diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2016-04-29 01:23:20 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2016-04-29 01:23:20 +0000 |
commit | ec24bbe332b4c341fc32328ee6aafa7b72aa1df7 (patch) | |
tree | 6e343bd054192a75448d6682c24d037a571da34b /clang/test/CodeGenCXX/extern-c.cpp | |
parent | 23323e25f896cf44e6d4519ef38f066e45fe408f (diff) | |
download | bcm5719-llvm-ec24bbe332b4c341fc32328ee6aafa7b72aa1df7.tar.gz bcm5719-llvm-ec24bbe332b4c341fc32328ee6aafa7b72aa1df7.zip |
PR27549: fix bug that resulted in us giving a translation-unit-scope variable a
mangled name if it happened to be declared in an 'extern "C++"' context. This
also causes us to use the '_ZL' mangling rather than the '_Z' mangling for
internal-linkage entities that are wrapped in a language linkage construct.
llvm-svn: 267969
Diffstat (limited to 'clang/test/CodeGenCXX/extern-c.cpp')
-rw-r--r-- | clang/test/CodeGenCXX/extern-c.cpp | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/clang/test/CodeGenCXX/extern-c.cpp b/clang/test/CodeGenCXX/extern-c.cpp index 5b59a38ba0d..1046915fcaa 100644 --- a/clang/test/CodeGenCXX/extern-c.cpp +++ b/clang/test/CodeGenCXX/extern-c.cpp @@ -16,8 +16,23 @@ extern "C" struct d; // CHECK-NOT: should_not_appear extern "C++" int should_not_appear; +// CHECK: @_ZN3foo10extern_cxxE = global +extern "C++" int extern_cxx = 0; + } +// CHECK-NOT: @global_a = global +extern "C" int global_a; + +// CHECK: @global_b = global +extern "C" int global_b = 0; + +// CHECK-NOT: should_not_appear +extern "C++" int should_not_appear; + +// CHECK: @extern_cxx = global +extern "C++" int extern_cxx = 0; + namespace test1 { namespace { struct X {}; @@ -59,10 +74,10 @@ extern "C" { // CHECK-NOT: @unused // CHECK-NOT: @duplicate_internal - // CHECK: @internal_var = internal alias i32, i32* @_Z12internal_var + // CHECK: @internal_var = internal alias i32, i32* @_ZL12internal_var // CHECK-NOT: @unused // CHECK-NOT: @duplicate_internal - // CHECK: @internal_fn = internal alias i32 (), i32 ()* @_Z11internal_fnv + // CHECK: @internal_fn = internal alias i32 (), i32 ()* @_ZL11internal_fnv // CHECK-NOT: @unused // CHECK-NOT: @duplicate_internal } |