[cfe-commits] r71957 - in /cfe/trunk: lib/CodeGen/CodeGenModule.cpp test/CodeGenCXX/extern-c.cpp test/CodeGenCXX/mangle.cpp

Anders Carlsson andersca at mac.com
Sat May 16 14:02:40 PDT 2009


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; }





More information about the cfe-commits mailing list