Author: andersca Date: Sat May 16 16:02:39 2009 New Revision: 71957 URL: http://llvm.org/viewvc/llvm-project?rev=71957&view=rev Log: extern "C" should preserve the 'extern' qualifier for VarDecls. Fixes 6853728.
Added: cfe/trunk/test/CodeGenCXX/extern-c.cpp Modified: cfe/trunk/lib/CodeGen/CodeGenModule.cpp cfe/trunk/test/CodeGenCXX/mangle.cpp Modified: cfe/trunk/lib/CodeGen/CodeGenModule.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenModule.cpp?rev=71957&r1=71956&r2=71957&view=diff ============================================================================== --- cfe/trunk/lib/CodeGen/CodeGenModule.cpp (original) +++ cfe/trunk/lib/CodeGen/CodeGenModule.cpp Sat May 16 16:02:39 2009 @@ -538,8 +538,9 @@ assert(VD->isFileVarDecl() && "Cannot emit local var decl as global."); // In C++, if this is marked "extern", defer code generation. - if (getLangOptions().CPlusPlus && - VD->getStorageClass() == VarDecl::Extern && !VD->getInit()) + if (getLangOptions().CPlusPlus && !VD->getInit() && + (VD->getStorageClass() == VarDecl::Extern || + VD->isExternC(getContext()))) return; // In C, if this isn't a definition, defer code generation. Added: cfe/trunk/test/CodeGenCXX/extern-c.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/extern-c.cpp?rev=71957&view=auto ============================================================================== --- cfe/trunk/test/CodeGenCXX/extern-c.cpp (added) +++ cfe/trunk/test/CodeGenCXX/extern-c.cpp Sat May 16 16:02:39 2009 @@ -0,0 +1,13 @@ +// RUN: clang-cc -emit-llvm %s -o %t && +namespace foo { + +// RUN: not grep "@a = global i32" %t && +extern "C" int a; + +// RUN: not grep "@_ZN3foo1bE = global i32" %t && +extern int b; + +// RUN: grep "@_ZN3foo1cE = global i32" %t | count 1 +int c = 5; + +} Modified: cfe/trunk/test/CodeGenCXX/mangle.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/mangle.cpp?rev=71957&r1=71956&r2=71957&view=diff ============================================================================== --- cfe/trunk/test/CodeGenCXX/mangle.cpp (original) +++ cfe/trunk/test/CodeGenCXX/mangle.cpp Sat May 16 16:02:39 2009 @@ -37,7 +37,7 @@ extern "C" { namespace N { void unmangled_function() { } } } // RUN: grep unmangled_variable %t | count 1 && -extern "C" { namespace N { int unmangled_variable; } } +extern "C" { namespace N { int unmangled_variable = 10; } } // RUN: grep _ZN1N1iE %t | count 1 && namespace N { int i; } _______________________________________________ cfe-commits mailing list cfe-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits