Fix for PR5522 and PR5666: fix a bunch of mangling issues with extern variables
and funcctions declared locally within a function.



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@90344 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/test/CodeGenCXX/mangle-extern-local.cpp b/test/CodeGenCXX/mangle-extern-local.cpp
new file mode 100644
index 0000000..7c25859
--- /dev/null
+++ b/test/CodeGenCXX/mangle-extern-local.cpp
@@ -0,0 +1,45 @@
+// RUN: clang-cc %s -emit-llvm -o - | FileCheck %s
+
+// CHECK: @var1 = external global i32
+// CHECK: @_ZN1N4var2E = external global i32
+// CHECK: @var5 = external global i32
+// CHECK: @_ZN1N4var3E = external global i32
+// CHECK: @_ZN1N4var4E = external global i32
+
+// CHECK: declare i32 @_Z5func1v()
+// CHECK: declare i32 @_ZN1N5func2Ev()
+// CHECK: declare i32 @func4()
+// CHECK: declare i32 @_ZN1N5func3Ev()
+
+int f1() {
+  extern int var1, func1();
+  return var1 + func1();
+}
+
+namespace N {
+
+int f2() {
+  extern int var2, func2();
+  return var2 + func2();
+}
+
+struct S {
+  static int f3() {
+    extern int var3, func3();
+    struct LC { int localfunc() { extern int var4; return var4; } };
+    LC localobj;
+    return var3 + func3() + localobj.localfunc();
+  }
+};
+
+int anchorf3() { return S::f3(); } 
+
+extern "C" {
+int f4() {
+  extern int var5, func4();
+  return var5 + func4();
+}
+}
+
+}
+