]> granicus.if.org Git - clang/commitdiff
PR14573: Unnamed parameters in debug info, Part 2
authorDavid Blaikie <dblaikie@gmail.com>
Sat, 5 Jan 2013 20:03:07 +0000 (20:03 +0000)
committerDavid Blaikie <dblaikie@gmail.com>
Sat, 5 Jan 2013 20:03:07 +0000 (20:03 +0000)
Catch some cases I'd missed in r171605 related to unnamed parameters of record
type. This resolves all remaining cases of PR14573 suppression in the GDB 7.5
test suite. Fix to the test suite to follow.

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

lib/CodeGen/CGDebugInfo.cpp
test/CodeGenCXX/debug-info-method.cpp

index 1ec9464e8ad52798bd6edd797308fbcb11afb460..bc715f4d6d23a711262de4b8300e607ab00d74bb 100644 (file)
@@ -2432,7 +2432,7 @@ void CGDebugInfo::EmitDeclare(const VarDecl *VD, unsigned Tag,
     // If VD is an anonymous union then Storage represents value for
     // all union fields.
     const RecordDecl *RD = cast<RecordDecl>(RT->getDecl());
-    if (RD->isUnion()) {
+    if (RD->isUnion() && RD->isAnonymousStructOrUnion()) {
       for (RecordDecl::field_iterator I = RD->field_begin(),
              E = RD->field_end();
            I != E; ++I) {
@@ -2456,8 +2456,8 @@ void CGDebugInfo::EmitDeclare(const VarDecl *VD, unsigned Tag,
           DBuilder.insertDeclare(Storage, D, Builder.GetInsertBlock());
         Call->setDebugLoc(llvm::DebugLoc::get(Line, Column, Scope));
       }
+      return;
     }
-    return;
   }
 
   // Create the descriptor for the variable.
index 74e44d1072808870595371acb9c359704c50fe4f..8923d5f7e8013faef9cbc86018f312b9274e77af 100644 (file)
@@ -1,12 +1,19 @@
-// RUN: %clang_cc1 -emit-llvm -g %s -o - | FileCheck %s
-// CHECK: metadata !"_ZN1A3fooEi", {{.*}}, i32 258
+// RUN: %clang_cc1 -emit-llvm -std=c++11 -g %s -o - | FileCheck %s
+// CHECK: metadata !"_ZN1A3fooEiS_3$_0", {{.*}}, i32 258
 // CHECK: ""{{.*}}DW_TAG_arg_variable
+// CHECK: ""{{.*}}DW_TAG_arg_variable
+// CHECK: ""{{.*}}DW_TAG_arg_variable
+union {
+  int a;
+  float b;
+} u;
+
 class A {
 protected:
-  void foo(int);
+  void foo(int, A, decltype(u));
 }; 
 
-void A::foo(int) {
+void A::foo(int, A, decltype(u)) {
 }
 
 A a;