]> granicus.if.org Git - clang/commitdiff
[MS ABI] Ignore transparent contexts when determining the effective context
authorDavid Majnemer <david.majnemer@gmail.com>
Thu, 19 May 2016 18:15:53 +0000 (18:15 +0000)
committerDavid Majnemer <david.majnemer@gmail.com>
Thu, 19 May 2016 18:15:53 +0000 (18:15 +0000)
We didn't skip over extern "C++" contexts, causing us to mangle things
which don't need to be mangled.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@270089 91177308-0d34-0410-b5e6-96231b3b80d8

lib/AST/MicrosoftMangle.cpp
test/CodeGenCXX/mangle-ms.cpp

index 774dab05728a7cd8a822f639e63c5e0c8b0b27c1..a88e2a621ce29d424bc97174c98d90bc9396450f 100644 (file)
@@ -94,7 +94,7 @@ static const DeclContext *getEffectiveDeclContext(const Decl *D) {
     return getEffectiveDeclContext(cast<Decl>(DC));
   }
 
-  return DC;
+  return DC->getRedeclContext();
 }
 
 static const DeclContext *getEffectiveParentContext(const DeclContext *DC) {
index c82fca49f6136a60e05775571a8a5160bb339d3f..ee0f50e5e2d328be00dcab8862cd93e78c6fcc40 100644 (file)
@@ -4,6 +4,11 @@
 int a;
 // CHECK-DAG: @"\01?a@@3HA"
 
+extern "C++" {
+static int __attribute__((used)) ignore_transparent_context;
+// CHECK-DAG: @ignore_transparent_context
+}
+
 namespace N {
   int b;
 // CHECK-DAG: @"\01?b@N@@3HA"