Author: dexonsmith Date: Sat Apr 23 16:08:27 2016 New Revision: 267297 URL: http://llvm.org/viewvc/llvm-project?rev=267297&view=rev Log: DebugInfo: Adapt to loss of DITypeRef in LLVM r267296
LLVM stopped using MDString-based type references, and DIBuilder no longer fills 'retainedTypes:' with every DICompositeType that has an 'identifier:' field. There are just minor changes to keep the same behaviour in CFE. Leaving 'retainedTypes:' unfilled has a dramatic impact on the output order of the IR though. There are a huge number of testcase changes, which were unfortunately not really scriptable. Modified: cfe/trunk/lib/CodeGen/CGDebugInfo.cpp cfe/trunk/test/CodeGen/debug-info-imported-entity.cpp cfe/trunk/test/CodeGenCXX/debug-info-access.cpp cfe/trunk/test/CodeGenCXX/debug-info-artificial-arg.cpp cfe/trunk/test/CodeGenCXX/debug-info-class.cpp cfe/trunk/test/CodeGenCXX/debug-info-cxx1y.cpp cfe/trunk/test/CodeGenCXX/debug-info-enum-class.cpp cfe/trunk/test/CodeGenCXX/debug-info-function-context.cpp cfe/trunk/test/CodeGenCXX/debug-info-indirect-field-decl.cpp cfe/trunk/test/CodeGenCXX/debug-info-method.cpp cfe/trunk/test/CodeGenCXX/debug-info-namespace.cpp cfe/trunk/test/CodeGenCXX/debug-info-static-member.cpp cfe/trunk/test/CodeGenCXX/debug-info-template-explicit-specialization.cpp cfe/trunk/test/CodeGenCXX/debug-info-template-limit.cpp cfe/trunk/test/CodeGenCXX/debug-info-template-member.cpp cfe/trunk/test/CodeGenCXX/debug-info-template-quals.cpp cfe/trunk/test/CodeGenCXX/debug-info-template.cpp cfe/trunk/test/CodeGenCXX/debug-info-varargs.cpp cfe/trunk/test/CodeGenCXX/debug-info.cpp cfe/trunk/test/CodeGenCXX/debug-lambda-expressions.cpp cfe/trunk/test/CodeGenCXX/debug-lambda-this.cpp cfe/trunk/test/CodeGenObjCXX/debug-info-block-capture-this.mm cfe/trunk/test/CodeGenObjCXX/debug-info-cyclic.mm cfe/trunk/test/Modules/ExtDebugInfo.cpp cfe/trunk/test/Modules/ModuleDebugInfo.cpp Modified: cfe/trunk/lib/CodeGen/CGDebugInfo.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDebugInfo.cpp?rev=267297&r1=267296&r2=267297&view=diff ============================================================================== --- cfe/trunk/lib/CodeGen/CGDebugInfo.cpp (original) +++ cfe/trunk/lib/CodeGen/CGDebugInfo.cpp Sat Apr 23 16:08:27 2016 @@ -1451,11 +1451,6 @@ llvm::DIType *CGDebugInfo::getOrCreateSt llvm::DIType *T = getOrCreateType(D, getOrCreateFile(Loc)); assert(T && "could not create debug info for type"); - // Composite types with UIDs were already retained by DIBuilder - // because they are only referenced by name in the IR. - if (auto *CTy = dyn_cast<llvm::DICompositeType>(T)) - if (!CTy->getIdentifier().empty()) - return T; RetainedTypes.push_back(D.getAsOpaquePtr()); return T; } @@ -3435,6 +3430,9 @@ void CGDebugInfo::EmitGlobalVariable(con auto *RD = cast<RecordDecl>(VarD->getDeclContext()); getDeclContextDescriptor(VarD); // Ensure that the type is retained even though it's otherwise unreferenced. + // + // FIXME: This is probably unnecessary, since Ty should reference RD + // through its scope. RetainedTypes.push_back( CGM.getContext().getRecordType(RD).getAsOpaquePtr()); return; Modified: cfe/trunk/test/CodeGen/debug-info-imported-entity.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/debug-info-imported-entity.cpp?rev=267297&r1=267296&r2=267297&view=diff ============================================================================== --- cfe/trunk/test/CodeGen/debug-info-imported-entity.cpp (original) +++ cfe/trunk/test/CodeGen/debug-info-imported-entity.cpp Sat Apr 23 16:08:27 2016 @@ -6,5 +6,6 @@ using std::A; using ::A; // CHECK: [[CompileUnit:![0-9]+]] = distinct !DICompileUnit({{.+}} imports: [[Imports:![0-9]+]]) // CHECK: [[Imports]] = !{[[ImportedEntity:![0-9]+]]} -// CHECK: [[ImportedEntity]] = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: [[CompileUnit]], entity: !"_ZTSSt1A", line: 4) +// CHECK: [[ImportedEntity]] = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: [[CompileUnit]], entity: [[STDA:![0-9]+]], line: 4) +// CHECK: [[STDA]] = !DICompositeType(tag: DW_TAG_class_type, name: "A", Modified: cfe/trunk/test/CodeGenCXX/debug-info-access.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/debug-info-access.cpp?rev=267297&r1=267296&r2=267297&view=diff ============================================================================== --- cfe/trunk/test/CodeGenCXX/debug-info-access.cpp (original) +++ cfe/trunk/test/CodeGenCXX/debug-info-access.cpp Sat Apr 23 16:08:27 2016 @@ -1,13 +1,16 @@ // RUN: %clang_cc1 -emit-llvm -debug-info-kind=limited -triple %itanium_abi_triple %s -o - | FileCheck %s // Test the various accessibility flags in the debug info. struct A { + // CHECK: ![[A:[0-9]+]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "A", + // CHECK-DAG: !DISubprogram(name: "pub_default",{{.*}} line: [[@LINE+1]],{{.*}} flags: DIFlagPrototyped, void pub_default(); // CHECK-DAG: !DIDerivedType(tag: DW_TAG_member, name: "pub_default_static",{{.*}} line: [[@LINE+1]],{{.*}} flags: DIFlagStaticMember) static int pub_default_static; }; -// CHECK: !DIDerivedType(tag: DW_TAG_inheritance,{{.*}} baseType: !"_ZTS1A",{{.*}} flags: DIFlagPublic) + +// CHECK: !DIDerivedType(tag: DW_TAG_inheritance,{{.*}} baseType: ![[A]],{{.*}} flags: DIFlagPublic) class B : public A { public: // CHECK-DAG: !DISubprogram(name: "pub",{{.*}} line: [[@LINE+1]],{{.*}} flags: DIFlagPublic | DIFlagPrototyped, Modified: cfe/trunk/test/CodeGenCXX/debug-info-artificial-arg.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/debug-info-artificial-arg.cpp?rev=267297&r1=267296&r2=267297&view=diff ============================================================================== --- cfe/trunk/test/CodeGenCXX/debug-info-artificial-arg.cpp (original) +++ cfe/trunk/test/CodeGenCXX/debug-info-artificial-arg.cpp Sat Apr 23 16:08:27 2016 @@ -24,9 +24,8 @@ int main(int argc, char **argv) { // CHECK: ![[CLASSTYPE:.*]] = distinct !DICompositeType(tag: DW_TAG_class_type, name: "A", // CHECK-SAME: identifier: "_ZTS1A" -// CHECK: ![[ARTARG:.*]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !"_ZTS1A", -// CHECK-SAME: DIFlagArtificial -// CHECK: !DISubprogram(name: "A", scope: !"_ZTS1A" +// CHECK: ![[ARTARG:.*]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: ![[CLASSTYPE]],{{.*}} DIFlagArtificial +// CHECK: !DISubprogram(name: "A", scope: ![[CLASSTYPE]] // CHECK-SAME: line: 12 // CHECK-SAME: DIFlagPublic // CHECK: !DISubroutineType(types: [[FUNCTYPE:![0-9]*]]) Modified: cfe/trunk/test/CodeGenCXX/debug-info-class.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/debug-info-class.cpp?rev=267297&r1=267296&r2=267297&view=diff ============================================================================== --- cfe/trunk/test/CodeGenCXX/debug-info-class.cpp (original) +++ cfe/trunk/test/CodeGenCXX/debug-info-class.cpp Sat Apr 23 16:08:27 2016 @@ -90,6 +90,15 @@ int main(int argc, char **argv) { // CHECK: invoke {{.+}} @_ZN1BD1Ev(%class.B* %b) // CHECK-NEXT: unwind label %{{.+}}, !dbg ![[EXCEPTLOC:.*]] // CHECK: store i32 0, i32* %{{.+}}, !dbg ![[RETLOC:.*]] + +// CHECK: [[F:![0-9]*]] = !DICompositeType(tag: DW_TAG_structure_type, name: "F" +// CHECK-SAME: DIFlagFwdDecl +// CHECK-SAME: identifier: "_ZTS1F" +// CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "I" +// CHECK-NOT: DIFlagFwdDecl +// CHECK-SAME: ){{$}} + +// CHECK: ![[INT:[0-9]+]] = !DIBasicType(name: "int" // CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "foo" // CHECK: !DICompositeType(tag: DW_TAG_class_type, name: "bar" // CHECK: !DICompositeType(tag: DW_TAG_union_type, name: "baz" @@ -99,12 +108,10 @@ int main(int argc, char **argv) { // CHECK: !DIDerivedType(tag: DW_TAG_member, name: "_vptr$B", // CHECK-SAME: DIFlagArtificial -// CHECK: ![[INT:[0-9]+]] = !DIBasicType(name: "int" - // CHECK: [[C:![0-9]*]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "C", // CHECK-NOT: DIFlagFwdDecl // CHECK-SAME: elements: [[C_MEM:![0-9]*]] -// CHECK-SAME: vtableHolder: !"_ZTS1C" +// CHECK-SAME: vtableHolder: [[C]] // CHECK-SAME: identifier: "_ZTS1C" // CHECK: [[C_MEM]] = !{[[C_VPTR:![0-9]*]], [[C_S:![0-9]*]], [[C_DTOR:![0-9]*]]} // CHECK: [[C_VPTR]] = !DIDerivedType(tag: DW_TAG_member, name: "_vptr$C" @@ -114,39 +121,33 @@ int main(int argc, char **argv) { // CHECK-SAME: DIFlagStaticMember // CHECK: [[C_DTOR]] = !DISubprogram(name: "~C" -// CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "D" +// CHECK: [[D:![0-9]+]] = !DICompositeType(tag: DW_TAG_structure_type, name: "D" // CHECK-SAME: DIFlagFwdDecl // CHECK-SAME: identifier: "_ZTS1D" // CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "E" // CHECK-SAME: DIFlagFwdDecl // CHECK-SAME: identifier: "_ZTS1E" -// CHECK: [[F:![0-9]*]] = !DICompositeType(tag: DW_TAG_structure_type, name: "F" -// CHECK-SAME: DIFlagFwdDecl -// CHECK-SAME: identifier: "_ZTS1F" -// CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "G" -// CHECK-SAME: DIFlagFwdDecl -// CHECK-SAME: identifier: "_ZTS1G" -// CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "inner" -// CHECK: line: 50 +// CHECK: !DISubprogram(name: "func",{{.*}} scope: [[D]] +// CHECK-SAME: isDefinition: true +// CHECK-SAME: declaration: [[D_FUNC_DECL:![0-9]*]] +// CHECK: [[D_FUNC_DECL]] = !DISubprogram(name: "func",{{.*}} scope: [[D]] +// CHECK-SAME: isDefinition: false + +// CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "inner",{{.*}} line: 50 // CHECK-NOT: DIFlagFwdDecl // CHECK-SAME: elements: [[G_INNER_MEM:![0-9]*]] // CHECK-SAME: identifier: "_ZTSN1G5innerE" + +// CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "G" +// CHECK-SAME: DIFlagFwdDecl +// CHECK-SAME: identifier: "_ZTS1G" // CHECK: [[G_INNER_MEM]] = !{[[G_INNER_I:![0-9]*]]} // CHECK: [[G_INNER_I]] = !DIDerivedType(tag: DW_TAG_member, name: "j" // CHECK-SAME: baseType: ![[INT]] // CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "A" // CHECK: !DIDerivedType(tag: DW_TAG_member, name: "HdrSize" -// CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "I" -// CHECK-NOT: DIFlagFwdDecl -// CHECK-SAME: ){{$}} // -// CHECK: !DISubprogram(name: "func",{{.*}} scope: !"_ZTS1D" -// CHECK-SAME: isDefinition: true -// CHECK-SAME: declaration: [[D_FUNC_DECL:![0-9]*]] -// CHECK: [[D_FUNC_DECL]] = !DISubprogram(name: "func",{{.*}} scope: !"_ZTS1D" -// CHECK-SAME: isDefinition: false - // CHECK: ![[EXCEPTLOC]] = !DILocation(line: 84, // CHECK: ![[RETLOC]] = !DILocation(line: 83, Modified: cfe/trunk/test/CodeGenCXX/debug-info-cxx1y.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/debug-info-cxx1y.cpp?rev=267297&r1=267296&r2=267297&view=diff ============================================================================== --- cfe/trunk/test/CodeGenCXX/debug-info-cxx1y.cpp (original) +++ cfe/trunk/test/CodeGenCXX/debug-info-cxx1y.cpp Sat Apr 23 16:08:27 2016 @@ -1,10 +1,10 @@ // RUN: %clang_cc1 -triple %itanium_abi_triple -emit-llvm-only -std=c++14 -emit-llvm -debug-info-kind=limited %s -o - | FileCheck %s // CHECK: [[EMPTY:![0-9]*]] = !{} -// CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "foo", +// CHECK: [[FOO:![0-9]+]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "foo", // CHECK-SAME: elements: [[EMPTY]] // FIXME: The context of this definition should be the CU/file scope, not the class. -// CHECK: !DISubprogram(name: "func", {{.*}} scope: !"_ZTS3foo" +// CHECK: !DISubprogram(name: "func", {{.*}} scope: [[FOO]] // CHECK-SAME: type: [[SUBROUTINE_TYPE:![0-9]*]] // CHECK-SAME: isDefinition: true // CHECK-SAME: declaration: [[FUNC_DECL:![0-9]*]] @@ -12,7 +12,7 @@ // CHECK: [[TYPE_LIST]] = !{[[INT:![0-9]*]]} // CHECK: [[INT]] = !DIBasicType(name: "int" // CHECK: [[FUNC_DECL]] = !DISubprogram(name: "func", -// CHECK-SAME: scope: !"_ZTS3foo" +// CHECK-SAME: scope: [[FOO]] // CHECK-SAME: type: [[SUBROUTINE_TYPE]] // CHECK-SAME: isDefinition: false Modified: cfe/trunk/test/CodeGenCXX/debug-info-enum-class.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/debug-info-enum-class.cpp?rev=267297&r1=267296&r2=267297&view=diff ============================================================================== --- cfe/trunk/test/CodeGenCXX/debug-info-enum-class.cpp (original) +++ cfe/trunk/test/CodeGenCXX/debug-info-enum-class.cpp Sat Apr 23 16:08:27 2016 @@ -101,11 +101,11 @@ void f2(E) { void fz() { Z z; } namespace test5 { +// CHECK: [[TEST5:![0-9]+]] = !DINamespace(name: "test5" // CHECK: !DICompositeType(tag: DW_TAG_enumeration_type, name: "E" -// CHECK-SAME: scope: [[TEST5:![0-9]+]] +// CHECK-SAME: scope: [[TEST5]] // CHECK-SAME: flags: DIFlagFwdDecl // CHECK-SAME: identifier: "_ZTSN5test51EE" -// CHECK: [[TEST5]] = !DINamespace(name: "test5" enum E : int; void f1(E *) { } Modified: cfe/trunk/test/CodeGenCXX/debug-info-function-context.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/debug-info-function-context.cpp?rev=267297&r1=267296&r2=267297&view=diff ============================================================================== --- cfe/trunk/test/CodeGenCXX/debug-info-function-context.cpp (original) +++ cfe/trunk/test/CodeGenCXX/debug-info-function-context.cpp Sat Apr 23 16:08:27 2016 @@ -26,10 +26,11 @@ int global_namespace_variable = 1; // function has the file as a context. // CHECK: ![[FILE:[0-9]+]] = !DIFile(filename: "{{.*}}context.cpp", +// CHECK: ![[C:[0-9]+]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "C", // CHECK: ![[NS:.*]] = !DINamespace(name: "ns" -// CHECK: !DISubprogram(name: "member_function",{{.*}} scope: !"_ZTS1C",{{.*}} isDefinition: true +// CHECK: !DISubprogram(name: "member_function",{{.*}} scope: ![[C]],{{.*}} isDefinition: true -// CHECK: !DISubprogram(name: "static_member_function",{{.*}} scope: !"_ZTS1C",{{.*}} isDefinition: true +// CHECK: !DISubprogram(name: "static_member_function",{{.*}} scope: ![[C]],{{.*}} isDefinition: true // CHECK: !DISubprogram(name: "global_function",{{.*}} scope: ![[FILE]],{{.*}} isDefinition: true Modified: cfe/trunk/test/CodeGenCXX/debug-info-indirect-field-decl.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/debug-info-indirect-field-decl.cpp?rev=267297&r1=267296&r2=267297&view=diff ============================================================================== --- cfe/trunk/test/CodeGenCXX/debug-info-indirect-field-decl.cpp (original) +++ cfe/trunk/test/CodeGenCXX/debug-info-indirect-field-decl.cpp Sat Apr 23 16:08:27 2016 @@ -9,9 +9,10 @@ struct Bar { int i1; // CHECK: ![[INT:[0-9]+]] = !DIBasicType(name: "int" // CHECK: !DIDerivedType(tag: DW_TAG_member, scope: - // CHECK-SAME: line: [[@LINE+3]] - // CHECK-SAME: baseType: !"_ZTSN3BarUt_E" + // CHECK-SAME: line: [[@LINE+4]] + // CHECK-SAME: baseType: ![[UNION:[0-9]+]] // CHECK-SAME: size: 32, align: 32, offset: 32 + // CHECK: ![[UNION]] = distinct !DICompositeType(tag: DW_TAG_union_type,{{.*}} identifier: "_ZTSN3BarUt_E") union { // CHECK: !DIDerivedType(tag: DW_TAG_member, name: "i2", // CHECK-SAME: line: [[@LINE+5]] Modified: cfe/trunk/test/CodeGenCXX/debug-info-method.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/debug-info-method.cpp?rev=267297&r1=267296&r2=267297&view=diff ============================================================================== --- cfe/trunk/test/CodeGenCXX/debug-info-method.cpp (original) +++ cfe/trunk/test/CodeGenCXX/debug-info-method.cpp Sat Apr 23 16:08:27 2016 @@ -1,8 +1,8 @@ // RUN: %clang_cc1 -emit-llvm -triple %itanium_abi_triple -std=c++11 -debug-info-kind=limited %s -o - | FileCheck %s -// CHECK: !DICompositeType(tag: DW_TAG_class_type, name: "A",{{.*}} identifier: "_ZTS1A") +// CHECK: ![[A:[0-9]+]] = distinct !DICompositeType(tag: DW_TAG_class_type, name: "A",{{.*}} identifier: "_ZTS1A") // CHECK: !DISubprogram(name: "foo", linkageName: "_ZN1A3fooEiS_3$_0" // CHECK-SAME: DIFlagProtected -// CHECK: ![[THISTYPE:[0-9]+]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !"_ZTS1A" +// CHECK: ![[THISTYPE:[0-9]+]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: ![[A]] // CHECK-SAME: DIFlagArtificial // CHECK: !DIDerivedType(tag: DW_TAG_ptr_to_member_type // CHECK: !DIDerivedType(tag: DW_TAG_ptr_to_member_type, baseType: ![[MEMFUNTYPE:[0-9]+]] Modified: cfe/trunk/test/CodeGenCXX/debug-info-namespace.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/debug-info-namespace.cpp?rev=267297&r1=267296&r2=267297&view=diff ============================================================================== --- cfe/trunk/test/CodeGenCXX/debug-info-namespace.cpp (original) +++ cfe/trunk/test/CodeGenCXX/debug-info-namespace.cpp Sat Apr 23 16:08:27 2016 @@ -57,41 +57,41 @@ void B::func_fwd() {} // CHECK: [[CU:![0-9]+]] = distinct !DICompileUnit( // CHECK-SAME: imports: [[MODULES:![0-9]*]] -// CHECK: [[FOO:![0-9]+]] = !DICompositeType(tag: DW_TAG_structure_type, name: "foo", -// CHECK-SAME: line: 5 -// CHECK-SAME: DIFlagFwdDecl -// CHECK: [[FOOCPP:![0-9]+]] = !DIFile(filename: "foo.cpp" -// CHECK: [[NS:![0-9]+]] = !DINamespace(name: "B", scope: [[CTXT:![0-9]+]], file: [[FOOCPP]], line: 1) +// CHECK: [[I:![0-9]+]] = !DIGlobalVariable(name: "i",{{.*}} scope: [[NS:![0-9]+]], +// CHECK: [[NS]] = !DINamespace(name: "B", scope: [[CTXT:![0-9]+]], file: [[FOOCPP:![0-9]+]], line: 1) +// CHECK: [[FOOCPP]] = !DIFile(filename: "foo.cpp" // CHECK: [[CTXT]] = !DINamespace(name: "A", scope: null, file: [[FILE:![0-9]+]], line: 5) // CHECK: [[FILE]] = !DIFile(filename: "{{.*}}debug-info-namespace.cpp", -// CHECK: [[BAR:![0-9]+]] = !DICompositeType(tag: DW_TAG_structure_type, name: "bar", -// CHECK-SAME: line: 6 -// CHECK-SAME: DIFlagFwdDecl - -// CHECK: [[I:![0-9]+]] = !DIGlobalVariable(name: "i",{{.*}} scope: [[NS]], // CHECK: [[VAR_FWD:![0-9]+]] = !DIGlobalVariable(name: "var_fwd",{{.*}} scope: [[NS]], // CHECK-SAME: line: 44 // CHECK-SAME: isDefinition: true - // CHECK: [[MODULES]] = !{[[M1:![0-9]+]], [[M2:![0-9]+]], [[M3:![0-9]+]], [[M4:![0-9]+]], [[M5:![0-9]+]], [[M6:![0-9]+]], [[M7:![0-9]+]], [[M8:![0-9]+]], [[M9:![0-9]+]], [[M10:![0-9]+]], [[M11:![0-9]+]], [[M12:![0-9]+]], [[M13:![0-9]+]], [[M14:![0-9]+]], [[M15:![0-9]+]], [[M16:![0-9]+]], [[M17:![0-9]+]]} // CHECK: [[M1]] = !DIImportedEntity(tag: DW_TAG_imported_module, scope: [[CTXT]], entity: [[NS]], line: 15) + // CHECK: [[M2]] = !DIImportedEntity(tag: DW_TAG_imported_module, scope: [[CU]], entity: [[CTXT]], // CHECK: [[M3]] = !DIImportedEntity(tag: DW_TAG_imported_declaration, name: "E", scope: [[CU]], entity: [[CTXT]], line: 19) // CHECK: [[M4]] = !DIImportedEntity(tag: DW_TAG_imported_module, scope: [[LEX2:![0-9]+]], entity: [[NS]], line: 23) // CHECK: [[LEX2]] = distinct !DILexicalBlock(scope: [[LEX1:![0-9]+]], file: [[FOOCPP]], // CHECK: [[LEX1]] = distinct !DILexicalBlock(scope: [[FUNC:![0-9]+]], file: [[FOOCPP]], -// CHECK: [[FUNC]] = distinct !DISubprogram(name: "func",{{.*}} isDefinition: true -// CHECK: [[M5]] = !DIImportedEntity(tag: DW_TAG_imported_module, scope: [[FUNC]], entity: [[CTXT]], -// CHECK: [[M6]] = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: [[FUNC]], entity: [[FOO:!"_ZTSN1A1B3fooE"]], line: 27) -// CHECK: [[M7]] = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: [[FUNC]], entity: [[BAR:!"_ZTSN1A1B3barE"]] +// CHECK: [[FUNC:![0-9]+]] = distinct !DISubprogram(name: "func",{{.*}} isDefinition: true +// CHECK: [[M5]] = !DIImportedEntity(tag: DW_TAG_imported_module, scope: [[FUNC]], entity: [[CTXT:![0-9]+]], +// CHECK: [[M6]] = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: [[FUNC]], entity: [[FOO:![0-9]+]], line: 27) +// CHECK: [[FOO]] = !DICompositeType(tag: DW_TAG_structure_type, name: "foo", +// CHECK-SAME: line: 5 +// CHECK-SAME: DIFlagFwdDecl +// CHECK: [[M7]] = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: [[FUNC]], entity: [[BAR:![0-9]+]] +// CHECK: [[BAR]] = !DICompositeType(tag: DW_TAG_structure_type, name: "bar", +// CHECK-SAME: line: 6 +// CHECK-SAME: DIFlagFwdDecl + // CHECK: [[M8]] = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: [[FUNC]], entity: [[F1:![0-9]+]] // CHECK: [[F1:![0-9]+]] = distinct !DISubprogram(name: "f1",{{.*}} line: 4 // CHECK-SAME: isDefinition: true // CHECK: [[M9]] = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: [[FUNC]], entity: [[I]] // CHECK: [[M10]] = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: [[FUNC]], entity: [[BAZ:![0-9]+]] // CHECK: [[BAZ]] = !DIDerivedType(tag: DW_TAG_typedef, name: "baz", scope: [[NS]], file: [[FOOCPP]], -// CHECK-SAME: baseType: !"_ZTSN1A1B3barE" +// CHECK-SAME: baseType: [[BAR]] // CHECK: [[M11]] = !DIImportedEntity(tag: DW_TAG_imported_declaration, name: "X", scope: [[FUNC]], entity: [[CTXT]] // CHECK: [[M12]] = !DIImportedEntity(tag: DW_TAG_imported_declaration, name: "Y", scope: [[FUNC]], entity: [[M11]] // CHECK: [[M13]] = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: [[FUNC]], entity: [[VAR_DECL:![0-9]+]] Modified: cfe/trunk/test/CodeGenCXX/debug-info-static-member.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/debug-info-static-member.cpp?rev=267297&r1=267296&r2=267297&view=diff ============================================================================== --- cfe/trunk/test/CodeGenCXX/debug-info-static-member.cpp (original) +++ cfe/trunk/test/CodeGenCXX/debug-info-static-member.cpp Sat Apr 23 16:08:27 2016 @@ -24,37 +24,35 @@ public: static X x_a; }; -int C::a = 4; -int C::b = 2; -int C::c = 1; - -int main() -{ - C instance_C; - instance_C.d = 8; - return C::c; -} - // The definition of C::a drives the emission of class C, which is // why the definition of "a" comes before the declarations while // "b" and "c" come after. // CHECK: !DICompositeType(tag: DW_TAG_enumeration_type, name: "X"{{.*}}, identifier: "_ZTS1X") -// CHECK: !DICompositeType(tag: DW_TAG_class_type, name: "C"{{.*}}, identifier: "_ZTS1C") -// -// CHECK: ![[DECL_A:[0-9]+]] = !DIDerivedType(tag: DW_TAG_member, name: "a" +// CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "anon_static_decl_struct" +// CHECK: !DIDerivedType(tag: DW_TAG_member, name: "anon_static_decl_var" +// CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "static_decl_templ<int>" +// CHECK-NOT: DIFlagFwdDecl +// CHECK-SAME: ){{$}} +// CHECK: !DIDerivedType(tag: DW_TAG_member, name: "static_decl_templ_var" + +// CHECK: !DIGlobalVariable(name: "a", {{.*}}variable: i32* @_ZN1C1aE, declaration: ![[DECL_A:[0-9]+]]) +int C::a = 4; +// CHECK: ![[DECL_A]] = !DIDerivedType(tag: DW_TAG_member, name: "a" // CHECK-NOT: size: // CHECK-NOT: align: // CHECK-NOT: offset: // CHECK-SAME: flags: DIFlagStaticMember) // +// CHECK: !DICompositeType(tag: DW_TAG_class_type, name: "C"{{.*}}, identifier: "_ZTS1C") +// // CHECK: !DIDerivedType(tag: DW_TAG_member, name: "const_a" // CHECK-NOT: size: // CHECK-NOT: align: // CHECK-NOT: offset: // CHECK-SAME: flags: DIFlagStaticMember, // CHECK-SAME: extraData: i1 true) -// + // CHECK: ![[DECL_B:[0-9]+]] = !DIDerivedType(tag: DW_TAG_member, name: "b" // CHECK-NOT: size: // CHECK-NOT: align: @@ -67,7 +65,7 @@ int main() // CHECK-NOT: offset: // CHECK-SAME: flags: DIFlagProtected | DIFlagStaticMember, // CHECK-SAME: extraData: float 0x{{.*}}) -// + // CHECK: ![[DECL_C:[0-9]+]] = !DIDerivedType(tag: DW_TAG_member, name: "c" // CHECK-NOT: size: // CHECK-NOT: align: @@ -84,12 +82,19 @@ int main() // CHECK: !DIDerivedType(tag: DW_TAG_member, name: "x_a" // CHECK-SAME: flags: DIFlagPublic | DIFlagStaticMember) -// CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "static_decl_templ<int>" -// CHECK-NOT: DIFlagFwdDecl -// CHECK-SAME: ){{$}} -// CHECK: !DIDerivedType(tag: DW_TAG_member, name: "static_decl_templ_var" +// CHECK: !DIGlobalVariable(name: "b", {{.*}}variable: i32* @_ZN1C1bE, declaration: ![[DECL_B]]) +int C::b = 2; +// CHECK: !DIGlobalVariable(name: "c", {{.*}}variable: i32* @_ZN1C1cE, declaration: ![[DECL_C]]) +int C::c = 1; -// CHECK: [[NS_X:![0-9]+]] = !DINamespace(name: "x" +int main() +{ + C instance_C; + instance_C.d = 8; + return C::c; +} + +// CHECK-NOT: !DIGlobalVariable(name: "anon_static_decl_var" // Test this in an anonymous namespace to ensure the type is retained even when // it doesn't get automatically retained by the string type reference machinery. @@ -100,9 +105,6 @@ struct anon_static_decl_struct { } -// CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "anon_static_decl_struct" -// CHECK: !DIDerivedType(tag: DW_TAG_member, name: "anon_static_decl_var" - int ref() { return anon_static_decl_struct::anon_static_decl_var; } @@ -119,12 +121,6 @@ int static_decl_templ_ref() { return static_decl_templ<int>::static_decl_templ_var; } -// CHECK: !DIGlobalVariable(name: "a", {{.*}}variable: i32* @_ZN1C1aE, declaration: ![[DECL_A]]) -// CHECK: !DIGlobalVariable(name: "b", {{.*}}variable: i32* @_ZN1C1bE, declaration: ![[DECL_B]]) -// CHECK: !DIGlobalVariable(name: "c", {{.*}}variable: i32* @_ZN1C1cE, declaration: ![[DECL_C]]) - -// CHECK-NOT: !DIGlobalVariable(name: "anon_static_decl_var" - // Verify that even when a static member declaration is created lazily when // creating the definition, the declaration line is that of the canonical // declaration, not the definition. Also, since we look at the canonical @@ -141,10 +137,10 @@ const int V::const_va; namespace x { struct y { +// CHECK: !DIGlobalVariable(name: "z", +// CHECK-SAME: scope: [[NS_X:![0-9]+]] +// CHECK: [[NS_X]] = !DINamespace(name: "x" static int z; }; int y::z; } - -// CHECK: !DIGlobalVariable(name: "z", -// CHECK-SAME: scope: [[NS_X]] Modified: cfe/trunk/test/CodeGenCXX/debug-info-template-explicit-specialization.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/debug-info-template-explicit-specialization.cpp?rev=267297&r1=267296&r2=267297&view=diff ============================================================================== --- cfe/trunk/test/CodeGenCXX/debug-info-template-explicit-specialization.cpp (original) +++ cfe/trunk/test/CodeGenCXX/debug-info-template-explicit-specialization.cpp Sat Apr 23 16:08:27 2016 @@ -6,6 +6,11 @@ // LINES-ONLY-NOT: !DICompositeType(tag: DW_TAG_structure_type +// "h" is at the top because it's in the compile unit's retainedTypes: list. +// CHECK: DICompositeType(tag: DW_TAG_structure_type, name: "h<int>" +// CHECK-NOT: DIFlagFwdDecl +// CHECK-SAME: ){{$}} + template <typename T> struct a { }; @@ -85,9 +90,6 @@ template <typename T> struct h { }; template class h<int>; -// CHECK: DICompositeType(tag: DW_TAG_structure_type, name: "h<int>" -// CHECK-NOT: DIFlagFwdDecl -// CHECK-SAME: ){{$}} template <typename T> struct i { Modified: cfe/trunk/test/CodeGenCXX/debug-info-template-limit.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/debug-info-template-limit.cpp?rev=267297&r1=267296&r2=267297&view=diff ============================================================================== --- cfe/trunk/test/CodeGenCXX/debug-info-template-limit.cpp (original) +++ cfe/trunk/test/CodeGenCXX/debug-info-template-limit.cpp Sat Apr 23 16:08:27 2016 @@ -2,7 +2,7 @@ // Check that this pointer type is TC<int> // CHECK: ![[LINE:[0-9]+]] = distinct !DICompositeType(tag: DW_TAG_class_type, name: "TC<int>"{{.*}}, identifier: "_ZTS2TCIiE") -// CHECK: !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !"_ZTS2TCIiE" +// CHECK: !DIDerivedType(tag: DW_TAG_pointer_type, baseType: ![[LINE]] template<typename T> class TC { Modified: cfe/trunk/test/CodeGenCXX/debug-info-template-member.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/debug-info-template-member.cpp?rev=267297&r1=267296&r2=267297&view=diff ============================================================================== --- cfe/trunk/test/CodeGenCXX/debug-info-template-member.cpp (original) +++ cfe/trunk/test/CodeGenCXX/debug-info-template-member.cpp Sat Apr 23 16:08:27 2016 @@ -16,6 +16,12 @@ inline int add3(int x) { return MyClass().add<3>(x); // even though add<3> is ODR used, don't emit it since we don't codegen it } +// The compile unit pulls in the global variables first. +// CHECK: !DIGlobalVariable(name: "x", +// CHECK-SAME: type: ![[OUTER_FOO_INNER_ID:[0-9]+]] +// CHECK-SAME: variable: %"struct.outer<foo>::inner"* @x + +// CHECK: ![[OUTER_FOO_INNER_ID:[0-9]*]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "inner"{{.*}}, identifier: // CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "foo" // CHECK-SAME: elements: [[FOO_MEM:![0-9]*]] // CHECK-SAME: identifier: "_ZTS3foo" @@ -23,33 +29,35 @@ inline int add3(int x) { // CHECK: [[FOO_FUNC]] = !DISubprogram(name: "func", linkageName: "_ZN3foo4funcEN5outerIS_E5innerE", // CHECK-SAME: type: [[FOO_FUNC_TYPE:![0-9]*]] // CHECK: [[FOO_FUNC_TYPE]] = !DISubroutineType(types: [[FOO_FUNC_PARAMS:![0-9]*]]) -// CHECK: [[FOO_FUNC_PARAMS]] = !{null, !{{[0-9]*}}, !"[[OUTER_FOO_INNER_ID:.*]]"} -// CHECK: !{{[0-9]*}} = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "inner"{{.*}}, identifier: "[[OUTER_FOO_INNER_ID]]") - -// CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "virt<elem>" -// CHECK-SAME: elements: [[VIRT_MEM:![0-9]*]] -// CHECK-SAME: vtableHolder: !"_ZTS4virtI4elemE" -// CHECK-SAME: templateParams: [[VIRT_TEMP_PARAM:![0-9]*]] -// CHECK-SAME: identifier: "_ZTS4virtI4elemE" -// CHECK: [[VIRT_TEMP_PARAM]] = !{[[VIRT_T:![0-9]*]]} -// CHECK: [[VIRT_T]] = !DITemplateTypeParameter(name: "T", type: !"_ZTS4elem") +// CHECK: [[FOO_FUNC_PARAMS]] = !{null, !{{[0-9]*}}, ![[OUTER_FOO_INNER_ID]]} // CHECK: [[C:![0-9]*]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "MyClass" // CHECK-SAME: elements: [[C_MEM:![0-9]*]] -// CHECK-SAME: vtableHolder: !"_ZTS7MyClass" +// CHECK-SAME: vtableHolder: [[C]] // CHECK-SAME: identifier: "_ZTS7MyClass") // CHECK: [[C_MEM]] = !{[[C_VPTR:![0-9]*]], [[C_FUNC:![0-9]*]]} // CHECK: [[C_VPTR]] = !DIDerivedType(tag: DW_TAG_member, name: "_vptr$MyClass" // CHECK: [[C_FUNC]] = !DISubprogram(name: "func",{{.*}} line: 7, -// CHECK: [[ELEM:![0-9]*]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "elem" +// CHECK: !DISubprogram(name: "add<2>" +// CHECK-SAME: scope: [[C]] +// +// CHECK: [[VIRT_TEMP:![0-9]+]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "virt<elem>" +// CHECK-SAME: elements: [[VIRT_MEM:![0-9]*]] +// CHECK-SAME: vtableHolder: [[VIRT_TEMP]] +// CHECK-SAME: templateParams: [[VIRT_TEMP_PARAM:![0-9]*]] +// CHECK-SAME: identifier: "_ZTS4virtI4elemE" + +// CHECK: [[ELEM:![0-9]+]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "elem" // CHECK-SAME: elements: [[ELEM_MEM:![0-9]*]] // CHECK-SAME: identifier: "_ZTS4elem" // CHECK: [[ELEM_MEM]] = !{[[ELEM_X:![0-9]*]]} -// CHECK: [[ELEM_X]] = !DIDerivedType(tag: DW_TAG_member, name: "x", scope: !"_ZTS4elem" -// CHECK-SAME: baseType: !"_ZTS4virtI4elemE" +// CHECK: [[ELEM_X]] = !DIDerivedType(tag: DW_TAG_member, name: "x", scope: [[ELEM]] +// CHECK-SAME: baseType: [[VIRT_TEMP:![0-9]+]] +// CHECK: [[VIRT_TEMP_PARAM]] = !{[[VIRT_T:![0-9]*]]} +// CHECK: [[VIRT_T]] = !DITemplateTypeParameter(name: "T", type: [[ELEM]]) template<typename T> struct outer { @@ -71,10 +79,6 @@ inline void func() { outer<foo>::inner x; -// CHECK: !DIGlobalVariable(name: "x", -// CHECK-SAME: type: !"[[OUTER_FOO_INNER_ID]]" -// CHECK-SAME: variable: %"struct.outer<foo>::inner"* @x - template <typename T> struct virt { T* values; @@ -96,6 +100,4 @@ void f2() { // from being added to type units, while still appearing in the type // declaration/reference in the compile unit. // CHECK: !DISubprogram(name: "MyClass" -// CHECK-SAME: scope: !"_ZTS7MyClass" -// CHECK: !DISubprogram(name: "add<2>" -// CHECK-SAME: scope: !"_ZTS7MyClass" +// CHECK-SAME: scope: [[C]] Modified: cfe/trunk/test/CodeGenCXX/debug-info-template-quals.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/debug-info-template-quals.cpp?rev=267297&r1=267296&r2=267297&view=diff ============================================================================== --- cfe/trunk/test/CodeGenCXX/debug-info-template-quals.cpp (original) +++ cfe/trunk/test/CodeGenCXX/debug-info-template-quals.cpp Sat Apr 23 16:08:27 2016 @@ -15,17 +15,17 @@ void foo (const char *c) { str.assign(c, str); } +// CHECK: [[P:![0-9]*]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: [[CON:![0-9]*]] +// CHECK: [[CON]] = !DIDerivedType(tag: DW_TAG_const_type, baseType: [[CH:![0-9]*]] +// CHECK: [[CH]] = !DIBasicType(name: "char", size: 8, align: 8, encoding: DW_ATE_signed_char) // CHECK: [[BS:.*]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "basic_string<char>" // CHECK-SAME: line: 4 // CHECK-SAME: size: 8, align: 8 // CHECK: [[TYPE:![0-9]*]] = !DISubroutineType(types: [[ARGS:.*]]) -// CHECK: [[ARGS]] = !{!{{.*}}, !{{.*}}, [[P:![0-9]*]], [[R:.*]]} -// CHECK: [[P]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: [[CON:![0-9]*]] -// CHECK: [[CON]] = !DIDerivedType(tag: DW_TAG_const_type, baseType: [[CH:![0-9]*]] -// CHECK: [[CH]] = !DIBasicType(name: "char", size: 8, align: 8, encoding: DW_ATE_signed_char) +// CHECK: [[ARGS]] = !{!{{.*}}, !{{.*}}, [[P]], [[R:.*]]} // CHECK: [[R]] = !DIDerivedType(tag: DW_TAG_reference_type, baseType: [[CON2:![0-9]*]] -// CHECK: [[CON2]] = !DIDerivedType(tag: DW_TAG_const_type, baseType: !"_ZTS12basic_stringIcE" +// CHECK: [[CON2]] = !DIDerivedType(tag: DW_TAG_const_type, baseType: [[BS]] // CHECK: !DISubprogram(name: "assign" // CHECK-SAME: line: 7 // CHECK-SAME: scopeLine: 8 Modified: cfe/trunk/test/CodeGenCXX/debug-info-template.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/debug-info-template.cpp?rev=267297&r1=267296&r2=267297&view=diff ============================================================================== --- cfe/trunk/test/CodeGenCXX/debug-info-template.cpp (original) +++ cfe/trunk/test/CodeGenCXX/debug-info-template.cpp Sat Apr 23 16:08:27 2016 @@ -1,73 +1,105 @@ // RUN: %clang -S -emit-llvm -target x86_64-unknown_unknown -g %s -o - -std=c++11 | FileCheck %s // CHECK: !DICompileUnit( -// CHECK-SAME: retainedTypes: [[RETAIN:![0-9]*]] // CHECK: [[EMPTY:![0-9]*]] = !{} -// CHECK: [[RETAIN]] = !{!{{[0-9]]*}}, [[FOO:![0-9]*]], +struct foo { + char pad[8]; // make the member pointer to 'e' a bit more interesting (nonzero) + int e; + void f(); + static void g(); +}; -// CHECK: [[TC:![0-9]*]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "TC<unsigned int, 2, &glb, &foo::e, &foo::f, &foo::g, 1, 2, 3>" +typedef int foo::*foo_mem; + +template<typename T, T, const int *x, foo_mem a, void (foo::*b)(), void (*f)(), int ...Is> +struct TC { + struct nested { + }; +}; + +// CHECK: [[INT:![0-9]+]] = !DIBasicType(name: "int" +int glb; +void func(); + +// CHECK: !DIGlobalVariable(name: "tci", +// CHECK-SAME: type: ![[TCNESTED:[0-9]+]] +// CHECK-SAME: variable: %"struct.TC<unsigned int, 2, &glb, &foo::e, &foo::f, &foo::g, 1, 2, 3>::nested"* @tci +// CHECK: ![[TCNESTED]] ={{.*}}!DICompositeType(tag: DW_TAG_structure_type, name: "nested", +// CHECK-SAME: scope: ![[TC:[0-9]+]], + +// CHECK: ![[TC]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "TC<unsigned int, 2, &glb, &foo::e, &foo::f, &foo::g, 1, 2, 3>" // CHECK-SAME: templateParams: [[TCARGS:![0-9]*]] +TC // CHECK: [[TCARGS]] = !{[[TCARG1:![0-9]*]], [[TCARG2:![0-9]*]], [[TCARG3:![0-9]*]], [[TCARG4:![0-9]*]], [[TCARG5:![0-9]*]], [[TCARG6:![0-9]*]], [[TCARG7:![0-9]*]]} -// // CHECK: [[TCARG1]] = !DITemplateTypeParameter(name: "T", type: [[UINT:![0-9]*]]) // CHECK: [[UINT:![0-9]*]] = !DIBasicType(name: "unsigned int" +< unsigned, // CHECK: [[TCARG2]] = !DITemplateValueParameter(type: [[UINT]], value: i32 2) + 2, // CHECK: [[TCARG3]] = !DITemplateValueParameter(name: "x", type: [[CINTPTR:![0-9]*]], value: i32* @glb) // CHECK: [[CINTPTR]] = !DIDerivedType(tag: DW_TAG_pointer_type, {{.*}}baseType: [[CINT:![0-9]+]] -// CHECK: [[CINT]] = !DIDerivedType(tag: DW_TAG_const_type, {{.*}}baseType: [[INT:![0-9]+]] -// CHECK: [[INT]] = !DIBasicType(name: "int" +// CHECK: [[CINT]] = !DIDerivedType(tag: DW_TAG_const_type, {{.*}}baseType: [[INT]] + &glb, // CHECK: [[TCARG4]] = !DITemplateValueParameter(name: "a", type: [[MEMINTPTR:![0-9]*]], value: i64 8) -// CHECK: [[MEMINTPTR]] = !DIDerivedType(tag: DW_TAG_ptr_to_member_type, {{.*}}baseType: [[INT]], {{.*}}extraData: !"_ZTS3foo") +// CHECK: [[MEMINTPTR]] = !DIDerivedType(tag: DW_TAG_ptr_to_member_type, {{.*}}baseType: [[INT]], {{.*}}extraData: ![[FOO:[0-9]+]]) +// +// We could just emit a declaration of 'foo' here, rather than the entire +// definition (same goes for any time we emit a member (function or data) +// pointer type) +// CHECK: [[FOO]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "foo", {{.*}}identifier: "_ZTS3foo") +// CHECK: !DISubprogram(name: "f", linkageName: "_ZN3foo1fEv", {{.*}}type: [[FTYPE:![0-9]*]] // // Currently Clang emits the pointer-to-member-function value, but LLVM doesn't // use it (GCC doesn't emit a value for pointers to member functions either - so // it's not clear what, if any, format would be acceptable to GDB) // -// CHECK: [[TCARG5]] = !DITemplateValueParameter(name: "b", type: [[MEMFUNPTR:![0-9]*]], value: { i64, i64 } { i64 ptrtoint (void (%struct.foo*)* @_ZN3foo1fEv to i64), i64 0 }) -// CHECK: [[MEMFUNPTR]] = !DIDerivedType(tag: DW_TAG_ptr_to_member_type, {{.*}}baseType: [[FTYPE:![0-9]*]], {{.*}}extraData: !"_ZTS3foo") -// CHECK: [[FTYPE]] = !DISubroutineType(types: [[FARGS:![0-9]*]]) +// CHECK: [[FTYPE:![0-9]*]] = !DISubroutineType(types: [[FARGS:![0-9]*]]) // CHECK: [[FARGS]] = !{null, [[FARG1:![0-9]*]]} // CHECK: [[FARG1]] = !DIDerivedType(tag: DW_TAG_pointer_type, -// CHECK-SAME: baseType: !"_ZTS3foo" +// CHECK-SAME: baseType: ![[FOO]] // CHECK-NOT: line: // CHECK-SAME: size: 64, align: 64 // CHECK-NOT: offset: 0 // CHECK-SAME: DIFlagArtificial -// -// CHECK: [[TCARG6]] = !DITemplateValueParameter(name: "f", type: [[FUNPTR:![0-9]*]], value: void ()* @_ZN3foo1gEv) -// CHECK: [[FUNPTR]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: [[FUNTYPE:![0-9]*]] -// CHECK: [[FUNTYPE]] = !DISubroutineType(types: [[FUNARGS:![0-9]*]]) +// CHECK: [[FUNTYPE:![0-9]*]] = !DISubroutineType(types: [[FUNARGS:![0-9]*]]) // CHECK: [[FUNARGS]] = !{null} + &foo::e, +// CHECK: [[TCARG5]] = !DITemplateValueParameter(name: "b", type: [[MEMFUNPTR:![0-9]*]], value: { i64, i64 } { i64 ptrtoint (void (%struct.foo*)* @_ZN3foo1fEv to i64), i64 0 }) +// CHECK: [[MEMFUNPTR]] = !DIDerivedType(tag: DW_TAG_ptr_to_member_type, {{.*}}baseType: [[FTYPE]], {{.*}}extraData: ![[FOO]]) + &foo::f, +// CHECK: [[TCARG6]] = !DITemplateValueParameter(name: "f", type: [[FUNPTR:![0-9]*]], value: void ()* @_ZN3foo1gEv) +// CHECK: [[FUNPTR]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: [[FUNTYPE]] + &foo::g, // CHECK: [[TCARG7]] = !DITemplateValueParameter(tag: DW_TAG_GNU_template_parameter_pack, name: "Is", value: [[TCARG7_VALS:![0-9]*]]) // CHECK: [[TCARG7_VALS]] = !{[[TCARG7_1:![0-9]*]], [[TCARG7_2:![0-9]*]], [[TCARG7_3:![0-9]*]]} // CHECK: [[TCARG7_1]] = !DITemplateValueParameter(type: [[INT]], value: i32 1) + 1, // CHECK: [[TCARG7_2]] = !DITemplateValueParameter(type: [[INT]], value: i32 2) + 2, // CHECK: [[TCARG7_3]] = !DITemplateValueParameter(type: [[INT]], value: i32 3) -// -// We could just emit a declaration of 'foo' here, rather than the entire -// definition (same goes for any time we emit a member (function or data) -// pointer type) -// CHECK: [[FOO]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "foo", {{.*}}identifier: "_ZTS3foo") -// CHECK: !DISubprogram(name: "f", linkageName: "_ZN3foo1fEv", {{.*}}type: [[FTYPE:![0-9]*]] -// + 3>::nested tci; -// CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "nested", -// CHECK-SAME: scope: !"_ZTS2TCIjLj2EXadL_Z3glbEEXadL_ZN3foo1eEEEXadL_ZNS0_1fEvEEXadL_ZNS0_1gEvEEJLi1ELi2ELi3EEE" -// CHECK-SAME: identifier: "[[TCNESTED:.*]]") -// CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "TC<int, -3, nullptr, nullptr, nullptr, nullptr>" +// CHECK: !DIGlobalVariable(name: "tcn" +// CHECK-SAME: type: ![[TCNT:[0-9]+]] +// CHECK-SAME: variable: %struct.TC* @tcn +TC +// CHECK: ![[TCNT]] ={{.*}}!DICompositeType(tag: DW_TAG_structure_type, name: "TC<int, -3, nullptr, nullptr, nullptr, nullptr>" // CHECK-SAME: templateParams: [[TCNARGS:![0-9]*]] -// CHECK-SAME: identifier: "[[TCNT:.*]]") // CHECK: [[TCNARGS]] = !{[[TCNARG1:![0-9]*]], [[TCNARG2:![0-9]*]], [[TCNARG3:![0-9]*]], [[TCNARG4:![0-9]*]], [[TCNARG5:![0-9]*]], [[TCNARG6:![0-9]*]], [[TCNARG7:![0-9]*]]} // CHECK: [[TCNARG1]] = !DITemplateTypeParameter(name: "T", type: [[INT]]) +<int, // CHECK: [[TCNARG2]] = !DITemplateValueParameter(type: [[INT]], value: i32 -3) + -3, // CHECK: [[TCNARG3]] = !DITemplateValueParameter(name: "x", type: [[CINTPTR]], value: i8 0) + nullptr, // The interesting null pointer: -1 for member data pointers (since they are // just an offset in an object, they can be zero and non-null for the first // member) // CHECK: [[TCNARG4]] = !DITemplateValueParameter(name: "a", type: [[MEMINTPTR]], value: i64 -1) + nullptr, // // In some future iteration we could possibly emit the value of a null member // function pointer as '{ i64, i64 } zeroinitializer' as it may be handled @@ -75,69 +107,38 @@ // member function pointers. For now, it's simpler just to emit the 'i8 0'. // // CHECK: [[TCNARG5]] = !DITemplateValueParameter(name: "b", type: [[MEMFUNPTR]], value: i8 0) + nullptr, // CHECK: [[TCNARG6]] = !DITemplateValueParameter(name: "f", type: [[FUNPTR]], value: i8 0) + nullptr // CHECK: [[TCNARG7]] = !DITemplateValueParameter(tag: DW_TAG_GNU_template_parameter_pack, name: "Is", value: [[EMPTY]]) + > tcn; + +template<typename> +struct tmpl_impl { +}; + +template <template <typename> class tmpl, int &lvr, int &&rvr> +struct NN { +}; + +// CHECK: !DIGlobalVariable(name: "nn" +// CHECK-SAME: type: ![[NNT:[0-9]+]] +// CHECK-SAME: variable: %struct.NN* @nn // FIXME: these parameters should probably be rendered as 'glb' rather than // '&glb', since they're references, not pointers. -// CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "NN<tmpl_impl, &glb, &glb>", +// CHECK: ![[NNT]] ={{.*}}!DICompositeType(tag: DW_TAG_structure_type, name: "NN<tmpl_impl, &glb, &glb>", // CHECK-SAME: templateParams: [[NNARGS:![0-9]*]] -// CHECK-SAME: identifier: "[[NNT:.*]]") +// CHECK-SAME: identifier: // CHECK: [[NNARGS]] = !{[[NNARG1:![0-9]*]], [[NNARG2:![0-9]*]], [[NNARG3:![0-9]*]]} // CHECK: [[NNARG1]] = !DITemplateValueParameter(tag: DW_TAG_GNU_template_template_param, name: "tmpl", value: !"tmpl_impl") // CHECK: [[NNARG2]] = !DITemplateValueParameter(name: "lvr", type: [[INTLVR:![0-9]*]], value: i32* @glb) // CHECK: [[INTLVR]] = !DIDerivedType(tag: DW_TAG_reference_type, baseType: [[INT]] // CHECK: [[NNARG3]] = !DITemplateValueParameter(name: "rvr", type: [[INTRVR:![0-9]*]], value: i32* @glb) // CHECK: [[INTRVR]] = !DIDerivedType(tag: DW_TAG_rvalue_reference_type, baseType: [[INT]] - -// CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "PaddingAtEndTemplate<&PaddedObj>" -// CHECK-SAME: templateParams: [[PTOARGS:![0-9]*]] -// CHECK: [[PTOARGS]] = !{[[PTOARG1:![0-9]*]]} -// CHECK: [[PTOARG1]] = !DITemplateValueParameter(type: [[CONST_PADDINGATEND_PTR:![0-9]*]], value: %struct.PaddingAtEnd* @PaddedObj) -// CHECK: [[CONST_PADDINGATEND_PTR]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !"_ZTS12PaddingAtEnd", size: 64, align: 64) - -// CHECK: !DIGlobalVariable(name: "tci", -// CHECK-SAME: type: !"[[TCNESTED]]" -// CHECK-SAME: variable: %"struct.TC<unsigned int, 2, &glb, &foo::e, &foo::f, &foo::g, 1, 2, 3>::nested"* @tci - -// CHECK: !DIGlobalVariable(name: "tcn" -// CHECK-SAME: type: !"[[TCNT]]" -// CHECK-SAME: variable: %struct.TC* @tcn - -// CHECK: !DIGlobalVariable(name: "nn" -// CHECK-SAME: type: !"[[NNT]]" -// CHECK-SAME: variable: %struct.NN* @nn -struct foo { - char pad[8]; // make the member pointer to 'e' a bit more interesting (nonzero) - int e; - void f(); - static void g(); -}; - -typedef int foo::*foo_mem; - -template<typename T, T, const int *x, foo_mem a, void (foo::*b)(), void (*f)(), int ...Is> -struct TC { - struct nested { - }; -}; - -int glb; -void func(); - -TC<unsigned, 2, &glb, &foo::e, &foo::f, &foo::g, 1, 2, 3>::nested tci; -TC<int, -3, nullptr, nullptr, nullptr, nullptr> tcn; - -template<typename> -struct tmpl_impl { -}; - -template <template <typename> class tmpl, int &lvr, int &&rvr> -struct NN { -}; - NN<tmpl_impl, glb, glb> nn; +// CHECK: ![[PADDINGATEND:[0-9]+]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "PaddingAtEnd", struct PaddingAtEnd { int i; char c; @@ -145,6 +146,11 @@ struct PaddingAtEnd { PaddingAtEnd PaddedObj = {}; +// CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "PaddingAtEndTemplate<&PaddedObj>" +// CHECK-SAME: templateParams: [[PTOARGS:![0-9]*]] +// CHECK: [[PTOARGS]] = !{[[PTOARG1:![0-9]*]]} +// CHECK: [[PTOARG1]] = !DITemplateValueParameter(type: [[CONST_PADDINGATEND_PTR:![0-9]*]], value: %struct.PaddingAtEnd* @PaddedObj) +// CHECK: [[CONST_PADDINGATEND_PTR]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: ![[PADDINGATEND]], size: 64, align: 64) template <PaddingAtEnd *> struct PaddingAtEndTemplate { }; Modified: cfe/trunk/test/CodeGenCXX/debug-info-varargs.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/debug-info-varargs.cpp?rev=267297&r1=267296&r2=267297&view=diff ============================================================================== --- cfe/trunk/test/CodeGenCXX/debug-info-varargs.cpp (original) +++ cfe/trunk/test/CodeGenCXX/debug-info-varargs.cpp Sat Apr 23 16:08:27 2016 @@ -2,13 +2,7 @@ struct A { - // CHECK: !DISubprogram(name: "a", linkageName: "_ZN1A1aEiz" - // CHECK-SAME: line: [[@LINE+2]] - // CHECK-SAME: type: ![[ATY:[0-9]+]] void a(int c, ...) {} - // CHECK: ![[ATY]] = !DISubroutineType(types: ![[AARGS:[0-9]+]]) - // We no longer use an explicit unspecified parameter. Instead we use a trailing null to mean the function is variadic. - // CHECK: ![[AARGS]] = !{null, !{{[0-9]+}}, !{{[0-9]+}}, null} }; // CHECK: !DISubprogram(name: "b", linkageName: "_Z1biz" @@ -18,6 +12,14 @@ void b(int c, ...) { // CHECK: ![[BTY]] = !DISubroutineType(types: ![[BARGS:[0-9]+]]) // CHECK: ![[BARGS]] = !{null, !{{[0-9]+}}, null} + // The subprogram "a" comes after "b" because the function comes later. + // CHECK: !DISubprogram(name: "a", linkageName: "_ZN1A1aEiz" + // CHECK-SAME: line: 5, + // CHECK-SAME: type: ![[ATY:[0-9]+]] + // CHECK: ![[ATY]] = !DISubroutineType(types: ![[AARGS:[0-9]+]]) + // We no longer use an explicit unspecified parameter. Instead we use a trailing null to mean the function is variadic. + // CHECK: ![[AARGS]] = !{null, !{{[0-9]+}}, !{{[0-9]+}}, null} + A a; // CHECK: !DILocalVariable(name: "fptr" Modified: cfe/trunk/test/CodeGenCXX/debug-info.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/debug-info.cpp?rev=267297&r1=267296&r2=267297&view=diff ============================================================================== --- cfe/trunk/test/CodeGenCXX/debug-info.cpp (original) +++ cfe/trunk/test/CodeGenCXX/debug-info.cpp Sat Apr 23 16:08:27 2016 @@ -1,5 +1,24 @@ -// RUN: %clang_cc1 -triple x86_64-none-linux-gnu -emit-llvm -debug-info-kind=limited %s -o - | FileCheck %s -// RUN: %clang_cc1 -triple i686-pc-windows-msvc -emit-llvm -debug-info-kind=limited %s -o - | FileCheck %s --check-prefix=MSVC +// RUN: %clang_cc1 -triple x86_64-none-linux-gnu -emit-llvm -debug-info-kind=limited %s -o - | FileCheck %s --check-prefix=CHECK --check-prefix=BOTH +// RUN: %clang_cc1 -triple i686-pc-windows-msvc -emit-llvm -debug-info-kind=limited %s -o - | FileCheck %s --check-prefix=MSVC --check-prefix=BOTH + +// CHECK: define void @_ZN7pr147634funcENS_3fooE +// CHECK: call void @llvm.dbg.declare({{.*}}, metadata ![[F:[0-9]+]], metadata ![[EXPR:[0-9]+]]) + +// !llvm.dbg.cu pulls in globals and their types first. +// CHECK-NOT: !DIGlobalVariable(name: "c" +// CHECK: !DIGlobalVariable(name: "x", linkageName: "_ZN6pr96081xE" +// CHECK-SAME: type: [[INCARRAYPTR:![0-9]*]] +// CHECK-SAME: variable: [3 x i8]** @_ZN6pr96081xE +// CHECK: [[INCARRAYPTR]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: [[INCARRAY:![0-9]+]] +// CHECK: [[INCARRAY]] = !DICompositeType(tag: DW_TAG_array_type +// CHECK-NOT: line: +// CHECK-NOT: size: +// CHECK-NOT: align: +// CHECK-NOT: offset: +// CHECK-SAME: baseType: ![[INCTYPE:[0-9]+]] + +// CHECK: ![[INCTYPE]] = !DICompositeType(tag: DW_TAG_structure_type, name: "incomplete" +// CHECK-SAME: DIFlagFwdDecl template<typename T> struct Identity { typedef T Type; @@ -47,38 +66,27 @@ namespace VirtualDtor { namespace VirtualBase { struct A { int a; }; struct B : virtual A { int b; }; +// BOTH: ![[VBASE_B:[0-9]+]] ={{.*}}!DICompositeType(tag: DW_TAG_structure_type, name: "B",{{.*}} line: [[@LINE-1]], +// MSVC-SAME: size: 96, align: 32 +// CHECK-SAME: size: 128, align: 64, +// BOTH-NOT: offset: +// BOTH-NOT: DIFlagFwdDecl +// BOTH-SAME: elements: [[VBASE_B_DEF:![0-9]+]] +// BOTH: [[VBASE_B_DEF]] = !{[[VBASE_A_IN_B:![0-9]+]], +// +// Look for the vbtable offset of A, which should be 4 for MSVC, 24 otherwise. +// BOTH: [[VBASE_A_IN_B]] = !DIDerivedType(tag: DW_TAG_inheritance, scope: ![[VBASE_B]], +// BOTH-SAME: baseType: ![[VBASE_A:[0-9]+]], +// MSVC-SAME: offset: 4, +// CHECK-SAME: offset: 24, +// +// BOTH: ![[VBASE_A]] ={{.*}}!DICompositeType(tag: DW_TAG_structure_type, name: "A", void f() { B b; } } -// CHECK: define void @_ZN7pr147634funcENS_3fooE -// CHECK: call void @llvm.dbg.declare({{.*}}, metadata ![[F:.*]], metadata ![[EXPR:.*]]) - -// MSVC: [[VBASE_B:![0-9]+]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "B",{{.*}} line: 49 -// MSVC-SAME: size: 96, align: 32 -// MSVC-NOT: offset: -// MSVC-NOT: DIFlagFwdDecl -// MSVC-SAME: elements: [[VBASE_B_DEF:![0-9]+]] -// MSVC: [[VBASE_B_DEF]] = !{[[VBASE_A_IN_B:![0-9]+]], -// -// Look for the vbtable offset of A, which should be 4. -// MSVC: [[VBASE_A_IN_B]] = !DIDerivedType(tag: DW_TAG_inheritance, scope: [[VBASE_B]], -// MSVC-SAME: baseType: !{{[0-9]*}} - -// CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "B",{{.*}} line: 49, -// CHECK-SAME: size: 128, align: 64, -// CHECK-NOT: offset: -// CHECK-NOT: DIFlagFwdDecl -// CHECK-SAME: elements: [[VBASE_B_DEF:![^,)]+]] -// CHECK: [[VBASE_B_DEF]] = !{[[VBASE_A_IN_B:![0-9]+]], -// -// Look for the vtable offset offset, which should be -24. -// CHECK: [[VBASE_A_IN_B]] = !DIDerivedType(tag: DW_TAG_inheritance -// CHECK-SAME: scope: !"_ZTSN11VirtualBase1BE" -// CHECK-SAME: baseType: !"_ZTSN11VirtualBase1AE" -// CHECK-SAME: offset: 24, namespace b5249287 { template <typename T> class A { struct B; @@ -91,73 +99,56 @@ class Cls { Cls obj; } +// CHECK: [[FUNC:[0-9]+]] = distinct !DISubprogram(name: "func", linkageName: "_ZN7pr147634funcENS_3fooE" +// CHECK-SAME: type: {{![0-9]+}} +// CHECK-SAME: isDefinition: true + +// CHECK: [[PR14763:![0-9]+]] = !DINamespace(name: "pr14763" namespace pr14763 { struct foo { +// CHECK: ![[FOO:[0-9]+]] ={{.*}}!DICompositeType(tag: DW_TAG_structure_type, name: "foo" +// CHECK-SAME: scope: [[PR14763]] +// CHECK-SAME: identifier: foo(const foo&); }; +// For some reason function arguments ended up down here +// CHECK: ![[F]] = !DILocalVariable(name: "f", arg: 1, scope: ![[FUNC]] +// CHECK-SAME: type: ![[FOO]] +// CHECK: ![[EXPR]] = !DIExpression(DW_OP_deref) foo func(foo f) { return f; // reference 'f' for now because otherwise we hit another bug } -// CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "foo" -// CHECK-SAME: scope: [[PR14763:![0-9]+]] -// CHECK-SAME: identifier: "[[FOO:.*]]" -// CHECK: [[PR14763]] = !DINamespace(name: "pr14763" -// CHECK: [[INCTYPE:![0-9]*]] = !DICompositeType(tag: DW_TAG_structure_type, name: "incomplete" -// CHECK-SAME: DIFlagFwdDecl -// CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "a" -// CHECK-SAME: elements: [[A_MEM:![0-9]+]] -// CHECK-SAME: identifier: "_ZTSN7pr162141aE" -// CHECK: [[A_MEM]] = !{[[A_I:![0-9]*]]} -// CHECK: [[A_I]] = !DIDerivedType(tag: DW_TAG_member, name: "i" -// CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "b" -// CHECK-SAME: DIFlagFwdDecl - } void foo() { +// CHECK: !DILocalVariable(name: "c" +// CHECK-NOT: arg: +// CHECK-SAME: ) const wchar_t c = L'x'; wchar_t d = c; } -// CHECK-NOT: !DIGlobalVariable(name: "c" - namespace pr9608 { // also pr9600 struct incomplete; incomplete (*x)[3]; -// CHECK: !DIGlobalVariable(name: "x", linkageName: "_ZN6pr96081xE" -// CHECK-SAME: type: [[INCARRAYPTR:![0-9]*]] -// CHECK-SAME: variable: [3 x i8]** @_ZN6pr96081xE -// CHECK: [[INCARRAYPTR]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: [[INCARRAY:![0-9]+]] -// CHECK: [[INCARRAY]] = !DICompositeType(tag: DW_TAG_array_type -// CHECK-NOT: line: -// CHECK-NOT: size: -// CHECK-NOT: align: -// CHECK-NOT: offset: -// CHECK-SAME: baseType: !"_ZTSN6pr960810incompleteE" } -// CHECK: [[FUNC:![0-9]+]] = distinct !DISubprogram(name: "func", linkageName: "_ZN7pr147634funcENS_3fooE" -// CHECK-SAME: type: [[FUNC_TYPE:![0-9]*]] -// CHECK-SAME: isDefinition: true - -// For some reason function arguments ended up down here -// CHECK: ![[F]] = !DILocalVariable(name: "f", arg: 1, scope: [[FUNC]] -// CHECK-SAME: type: !"[[FOO]]" -// CHECK: ![[EXPR]] = !DIExpression(DW_OP_deref) - -// CHECK: !DILocalVariable(name: "c" -// CHECK-NOT: arg: -// CHECK-SAME: ) - namespace pr16214 { +// CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "a" +// CHECK-SAME: elements: [[A_MEM:![0-9]+]] +// CHECK-SAME: identifier: "_ZTSN7pr162141aE" +// CHECK: [[A_MEM]] = !{[[A_I:![0-9]*]]} struct a { +// CHECK: [[A_I]] = !DIDerivedType(tag: DW_TAG_member, name: "i" int i; }; typedef a at; +// CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "b" +// CHECK-SAME: DIFlagFwdDecl struct b { }; Modified: cfe/trunk/test/CodeGenCXX/debug-lambda-expressions.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/debug-lambda-expressions.cpp?rev=267297&r1=267296&r2=267297&view=diff ============================================================================== --- cfe/trunk/test/CodeGenCXX/debug-lambda-expressions.cpp (original) +++ cfe/trunk/test/CodeGenCXX/debug-lambda-expressions.cpp Sat Apr 23 16:08:27 2016 @@ -17,8 +17,6 @@ int d(int x) { D y[10]; return [x,y] { r // Randomness for file. -- 6 // CHECK: [[FILE:.*]] = !DIFile(filename: "{{.*}}debug-lambda-expressions.cpp", -// CHECK: ![[INT:[0-9]+]] = !DIBasicType(name: "int" - // CVAR: // CHECK: !DIGlobalVariable(name: "cvar" // CHECK-SAME: line: [[CVAR_LINE:[0-9]+]] @@ -37,6 +35,8 @@ int d(int x) { D y[10]; return [x,y] { r // CHECK-SAME: elements: ![[VAR_ARGS:[0-9]+]] // CHECK: ![[VAR_ARGS]] = !{!{{[0-9]+}}} +// CHECK: ![[INT:[0-9]+]] = !DIBasicType(name: "int" + // A: 10 // CHECK: ![[A_FUNC:.*]] = distinct !DISubprogram(name: "a"{{.*}}, line: [[A_LINE:[0-9]+]]{{.*}}, isDefinition: true Modified: cfe/trunk/test/CodeGenCXX/debug-lambda-this.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/debug-lambda-this.cpp?rev=267297&r1=267296&r2=267297&view=diff ============================================================================== --- cfe/trunk/test/CodeGenCXX/debug-lambda-this.cpp (original) +++ cfe/trunk/test/CodeGenCXX/debug-lambda-this.cpp Sat Apr 23 16:08:27 2016 @@ -12,7 +12,8 @@ int D::d(int x) { }(); } -// CHECK: ![[POINTER:.*]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !"_ZTS1D", size: 64, align: 64) +// CHECK: ![[D:[0-9]+]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "D", +// CHECK: ![[POINTER:.*]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: ![[D]], size: 64, align: 64) // CHECK: !DIDerivedType(tag: DW_TAG_member, name: "this", // CHECK-SAME: line: 11 // CHECK-SAME: baseType: ![[POINTER]] Modified: cfe/trunk/test/CodeGenObjCXX/debug-info-block-capture-this.mm URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenObjCXX/debug-info-block-capture-this.mm?rev=267297&r1=267296&r2=267297&view=diff ============================================================================== --- cfe/trunk/test/CodeGenObjCXX/debug-info-block-capture-this.mm (original) +++ cfe/trunk/test/CodeGenObjCXX/debug-info-block-capture-this.mm Sat Apr 23 16:08:27 2016 @@ -10,10 +10,11 @@ int main(int argc, const char * argv[]) return t.block(); } +// CHECK: ![[TESTCT:[0-9]+]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "test" // CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "__block_literal_1", // CHECK-SAME: elements: ![[ELEMS:.*]]) // CHECK: ![[ELEMS]] = !{{{.*}}, ![[THIS:[0-9]+]]} // CHECK: ![[THIS]] = !DIDerivedType(tag: DW_TAG_member, name: "this", -// CHECK-SAME: baseType: !"_ZTS4test", +// CHECK-SAME: baseType: ![[TESTCT]], Modified: cfe/trunk/test/CodeGenObjCXX/debug-info-cyclic.mm URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenObjCXX/debug-info-cyclic.mm?rev=267297&r1=267296&r2=267297&view=diff ============================================================================== --- cfe/trunk/test/CodeGenObjCXX/debug-info-cyclic.mm (original) +++ cfe/trunk/test/CodeGenObjCXX/debug-info-cyclic.mm Sat Apr 23 16:08:27 2016 @@ -1,13 +1,13 @@ // RUN: %clang_cc1 -triple x86_64-apple-darwin -debug-info-kind=standalone -emit-llvm %s -o - | FileCheck %s struct B { -// CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "B" +// CHECK: ![[B:[0-9]+]] ={{.*}}!DICompositeType(tag: DW_TAG_structure_type, name: "B" // CHECK-SAME: line: [[@LINE-2]], // CHECK-SAME: size: 8, align: 8, // CHECK-NOT: offset: // CHECK-NOT: DIFlagFwdDecl // CHECK-SAME: elements: ![[BMEMBERS:[0-9]+]] -// CHECK-SAME: identifier: [[B:.*]]) +// CHECK-SAME: identifier: // CHECK: ![[BMEMBERS]] = !{![[BB:[0-9]+]]} B(struct A *); // CHECK: ![[BB]] = !DISubprogram(name: "B", scope: ![[B]] Modified: cfe/trunk/test/Modules/ExtDebugInfo.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/ExtDebugInfo.cpp?rev=267297&r1=267296&r2=267297&view=diff ============================================================================== --- cfe/trunk/test/Modules/ExtDebugInfo.cpp (original) +++ cfe/trunk/test/Modules/ExtDebugInfo.cpp Sat Apr 23 16:08:27 2016 @@ -48,33 +48,32 @@ void foo() { anon.i = GlobalStruct.i = GlobalUnion.i = GlobalEnum; } -// CHECK: ![[NS:.*]] = !DINamespace(name: "DebugCXX", scope: ![[MOD:[0-9]+]], -// CHECK: ![[MOD]] = !DIModule(scope: null, name: {{.*}}DebugCXX - -// CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "Struct", -// CHECK-SAME: scope: ![[NS]], +// CHECK: ![[STRUCT:[0-9]+]] = !DICompositeType(tag: DW_TAG_structure_type, name: "Struct", +// CHECK-SAME: scope: ![[NS:[0-9]+]], // CHECK-SAME: flags: DIFlagFwdDecl, // CHECK-SAME: identifier: "_ZTSN8DebugCXX6StructE") +// CHECK: ![[NS]] = !DINamespace(name: "DebugCXX", scope: ![[MOD:[0-9]+]], +// CHECK: ![[MOD]] = !DIModule(scope: null, name: {{.*}}DebugCXX + // CHECK: !DICompositeType(tag: DW_TAG_enumeration_type, name: "Enum", // CHECK-SAME: scope: ![[NS]], // CHECK-SAME: flags: DIFlagFwdDecl, // CHECK-SAME: identifier: "_ZTSN8DebugCXX4EnumE") -// CHECK: !DICompositeType(tag: DW_TAG_class_type, - -// CHECK: !DICompositeType(tag: DW_TAG_class_type, -// CHECK-SAME: name: "Template<int, DebugCXX::traits<int> >", +// CHECK: !DICompositeType(tag: DW_TAG_class_type, name: "Template<int, DebugCXX::traits<int> >", // CHECK-SAME: scope: ![[NS]], // CHECK-SAME: flags: DIFlagFwdDecl, // CHECK-SAME: identifier: "_ZTSN8DebugCXX8TemplateIiNS_6traitsIiEEEE") -// CHECK: !DICompositeType(tag: DW_TAG_class_type, -// CHECK-SAME: name: "Template<float, DebugCXX::traits<float> >", +// CHECK: !DICompositeType(tag: DW_TAG_class_type, name: "Template<float, DebugCXX::traits<float> >", // CHECK-SAME: scope: ![[NS]], // CHECK-SAME: flags: DIFlagFwdDecl, // CHECK-SAME: identifier: "_ZTSN8DebugCXX8TemplateIfNS_6traitsIfEEEE") +// CHECK: !DIDerivedType(tag: DW_TAG_member, name: "static_member", +// CHECK-SAME: scope: ![[STRUCT]] + // CHECK: !DICompositeType(tag: DW_TAG_union_type, // CHECK-SAME: flags: DIFlagFwdDecl, identifier: "_ZTS12TypedefUnion") // CHECK: !DICompositeType(tag: DW_TAG_enumeration_type, @@ -82,9 +81,6 @@ void foo() { // CHECK: !DICompositeType(tag: DW_TAG_structure_type, // CHECK-SAME: flags: DIFlagFwdDecl, identifier: "_ZTS13TypedefStruct") -// CHECK: !DIDerivedType(tag: DW_TAG_member, name: "static_member", -// CHECK-SAME: scope: !"_ZTSN8DebugCXX6StructE" - // CHECK: !DIGlobalVariable(name: "anon_enum", {{.*}}, type: ![[ANON_ENUM:[0-9]+]] // CHECK: !DICompositeType(tag: DW_TAG_enumeration_type, scope: ![[NS]], // CHECK-SAME: line: 16 @@ -104,7 +100,7 @@ void foo() { // CHECK-SAME: name: "InAnonymousNamespace", {{.*}}DIFlagFwdDecl) -// CHECK: !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !0, entity: !"_ZTSN8DebugCXX6StructE", line: 27) +// CHECK: !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !0, entity: ![[STRUCT]], line: 27) // CHECK: !DICompileUnit( // CHECK-SAME: splitDebugFilename: Modified: cfe/trunk/test/Modules/ModuleDebugInfo.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/ModuleDebugInfo.cpp?rev=267297&r1=267296&r2=267297&view=diff ============================================================================== --- cfe/trunk/test/Modules/ModuleDebugInfo.cpp (original) +++ cfe/trunk/test/Modules/ModuleDebugInfo.cpp Sat Apr 23 16:08:27 2016 @@ -44,23 +44,24 @@ // CHECK-SAME: ) // CHECK: !DIEnumerator(name: "e5", value: 5) +// CHECK: !DIDerivedType(tag: DW_TAG_typedef, name: "B", +// no mangled name here yet. + +// CHECK: !DICompositeType(tag: DW_TAG_class_type, name: "A<void>" +// CHECK-SAME: identifier: "_ZTSN8DebugCXX1AIJvEEE") + // CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "Struct" // CHECK-SAME: identifier: "_ZTSN8DebugCXX6StructE") -// CHECK: !DICompositeType(tag: DW_TAG_class_type, -// CHECK-SAME: name: "Template<int, DebugCXX::traits<int> >" +// CHECK: !DICompositeType(tag: DW_TAG_class_type, name: "Template<int, DebugCXX::traits<int> >" // CHECK-SAME: identifier: "_ZTSN8DebugCXX8TemplateIiNS_6traitsIiEEEE") -// CHECK: !DICompositeType(tag: DW_TAG_class_type, name: "A<void>" -// CHECK-SAME: identifier: "_ZTSN8DebugCXX1AIJvEEE") +// CHECK: !DIDerivedType(tag: DW_TAG_typedef, name: "FloatInstatiation" +// no mangled name here yet. -// CHECK: !DICompositeType(tag: DW_TAG_class_type, -// CHECK-SAME: name: "Template<float, DebugCXX::traits<float> >" +// CHECK: !DICompositeType(tag: DW_TAG_class_type, name: "Template<float, DebugCXX::traits<float> >" // CHECK-SAME: identifier: "_ZTSN8DebugCXX8TemplateIfNS_6traitsIfEEEE") -// CHECK: !DIDerivedType(tag: DW_TAG_typedef, name: "B", -// no mangled name here yet. - // CHECK: !DICompositeType(tag: DW_TAG_class_type, name: "FwdVirtual" // CHECK-SAME: elements: // CHECK-SAME: identifier: "_ZTS10FwdVirtual") @@ -74,16 +75,6 @@ // CHECK-NOT: name: // CHECK-SAME: identifier: "_ZTS13TypedefStruct") -// CHECK: !DICompositeType(tag: DW_TAG_class_type, name: "Derived", -// CHECK-SAME: identifier: "_ZTS7Derived") -// CHECK: !DICompositeType(tag: DW_TAG_class_type, name: "B", scope: !"_ZTS7Derived", -// CHECK-SAME: elements: ![[B_MBRS:.*]], vtableHolder: !"_ZTS1A" -// CHECK: ![[B_MBRS]] = !{{{.*}}, ![[GET_PARENT:.*]]} -// CHECK: ![[GET_PARENT]] = !DISubprogram(name: "getParent" - -// CHECK: !DIDerivedType(tag: DW_TAG_typedef, name: "FloatInstatiation" -// no mangled name here yet. - // CHECK: !DICompositeType(tag: DW_TAG_union_type, // CHECK-NOT: name: // CHECK-SAME: ) @@ -96,4 +87,12 @@ // CHECK-SAME: name: "InAnonymousNamespace", // CHECK-SAME: elements: !{{[0-9]+}}) +// CHECK: ![[A:[0-9]+]] = {{.*}}!DICompositeType(tag: DW_TAG_class_type, name: "A", +// CHECK: ![[DERIVED:[0-9]+]] = {{.*}}!DICompositeType(tag: DW_TAG_class_type, name: "Derived", +// CHECK-SAME: identifier: "_ZTS7Derived") +// CHECK: !DICompositeType(tag: DW_TAG_class_type, name: "B", scope: ![[DERIVED]], +// CHECK-SAME: elements: ![[B_MBRS:.*]], vtableHolder: ![[A]] +// CHECK: ![[B_MBRS]] = !{{{.*}}, ![[GET_PARENT:.*]]} +// CHECK: ![[GET_PARENT]] = !DISubprogram(name: "getParent" + // CHECK-NEG-NOT: !DICompositeType(tag: DW_TAG_structure_type, name: "PureForwardDecl" _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits