forked from OSchip/llvm-project
Debug Info: include address-of ('&') operator and qualified names in template argument lists
This fixes several (7 out of 16) cases of PR14492 in the GDB 7.5 test suite. It seems GDB was bailing out whenever it had even the slightest problem with the template argument list (& I assume it didn't like seeing template value parameters that were just simple names - perhaps assuming that lone names must be types, not values) llvm-svn: 181556
This commit is contained in:
parent
32baf99b1d
commit
b8f6a8ab07
|
@ -353,9 +353,10 @@ void TemplateArgument::print(const PrintingPolicy &Policy,
|
|||
|
||||
case Declaration: {
|
||||
NamedDecl *ND = cast<NamedDecl>(getAsDecl());
|
||||
Out << '&';
|
||||
if (ND->getDeclName()) {
|
||||
// FIXME: distinguish between pointer and reference args?
|
||||
Out << *ND;
|
||||
ND->printQualifiedName(Out);
|
||||
} else {
|
||||
Out << "<anonymous>";
|
||||
}
|
||||
|
|
|
@ -1,19 +1,26 @@
|
|||
// RUN: %clang_cc1 -emit-llvm -g %s -o - | FileCheck %s
|
||||
// RUN: %clang_cc1 -emit-llvm -g %s -o - -std=c++11 | FileCheck %s
|
||||
|
||||
// CHECK: [[INT:![0-9]*]] = {{.*}} ; [ DW_TAG_base_type ] [int]
|
||||
// CHECK: metadata [[TCI:![0-9]*]], i32 0, i32 1, %class.TC* @tci, null} ; [ DW_TAG_variable ] [tci]
|
||||
// CHECK: [[TC:![0-9]*]] = {{.*}}, metadata [[TCARGS:![0-9]*]]} ; [ DW_TAG_class_type ] [TC<int, 2>]
|
||||
// CHECK: [[TC:![0-9]*]] = {{.*}}, metadata [[TCARGS:![0-9]*]]} ; [ DW_TAG_class_type ] [TC<int, 2, &glb, &foo::e, &foo::f, nullptr>]
|
||||
// CHECK: [[TCARGS]] = metadata !{metadata [[TCARG1:![0-9]*]], metadata [[TCARG2:![0-9]*]]}
|
||||
//
|
||||
// We seem to be missing file/line/col info on template value parameters -
|
||||
// metadata supports it but it's not populated.
|
||||
//
|
||||
// CHECK: [[TCARG1]] = {{.*}}metadata !"T", metadata [[INT:![0-9]*]], {{.*}} ; [ DW_TAG_template_type_parameter ]
|
||||
// CHECK: [[INT]] = {{.*}} ; [ DW_TAG_base_type ] [int]
|
||||
// CHECK: [[TCARG1]] = {{.*}}metadata !"T", metadata [[INT]], {{.*}} ; [ DW_TAG_template_type_parameter ]
|
||||
// CHECK: [[TCARG2]] = {{.*}}metadata !"", metadata [[UINT:![0-9]*]], i64 2, {{.*}} ; [ DW_TAG_template_value_parameter ]
|
||||
// CHECK: [[UINT]] = {{.*}} ; [ DW_TAG_base_type ] [unsigned int]
|
||||
|
||||
template<typename T, unsigned>
|
||||
struct foo {
|
||||
int e;
|
||||
void f();
|
||||
};
|
||||
|
||||
template<typename T, unsigned, int *x, int foo::*a, void (foo::*b)(), int *n>
|
||||
class TC {
|
||||
};
|
||||
|
||||
TC<int, 2> tci;
|
||||
int glb;
|
||||
|
||||
TC<int, 2, &glb, &foo::e, &foo::f, nullptr> tci;
|
||||
|
|
Loading…
Reference in New Issue