PR14573: Unnamed parameters in debug info, Part 2

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.

llvm-svn: 171633
This commit is contained in:
David Blaikie 2013-01-05 20:03:07 +00:00
parent a234c65613
commit 219c7d9f64
2 changed files with 13 additions and 6 deletions

View 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.

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