From eeb56abe643929f570006917c088e53bc7c896a4 Mon Sep 17 00:00:00 2001 From: Peter Collingbourne Date: Tue, 13 Sep 2016 01:13:19 +0000 Subject: [PATCH] Update Clang for D20147 ("DebugInfo: New metadata representation for global variables.") Differential Revision: http://reviews.llvm.org/D20415 llvm-svn: 281285 --- clang/lib/CodeGen/CGDebugInfo.cpp | 16 ++++--- clang/lib/CodeGen/CGDebugInfo.h | 4 +- clang/lib/CodeGen/CGExpr.cpp | 4 +- clang/lib/CodeGen/CodeGenFunction.cpp | 4 +- clang/lib/CodeGen/CodeGenFunction.h | 2 +- clang/test/CodeGen/2009-10-20-GlobalDebug.c | 14 +++--- clang/test/CodeGen/2010-08-10-DbgConstant.c | 3 +- clang/test/CodeGen/debug-info-packed-struct.c | 4 +- clang/test/CodeGen/debug-info-static.c | 4 +- clang/test/CodeGenCXX/debug-info-access.cpp | 2 +- clang/test/CodeGenCXX/debug-info-alias.cpp | 5 ++- .../test/CodeGenCXX/debug-info-anon-namespace.cpp | 3 +- .../test/CodeGenCXX/debug-info-anon-union-vars.cpp | 2 +- clang/test/CodeGenCXX/debug-info-cxx1y.cpp | 6 +-- clang/test/CodeGenCXX/debug-info-method.cpp | 2 +- clang/test/CodeGenCXX/debug-info-ms-abi.cpp | 8 ++-- .../CodeGenCXX/debug-info-ms-anonymous-tag.cpp | 3 +- .../CodeGenCXX/debug-info-ms-ptr-to-member.cpp | 3 +- clang/test/CodeGenCXX/debug-info-ms-vbase.cpp | 50 +++++++++++----------- clang/test/CodeGenCXX/debug-info-namespace.cpp | 4 +- clang/test/CodeGenCXX/debug-info-static-member.cpp | 27 +++++++----- ...debug-info-template-explicit-specialization.cpp | 7 +-- .../test/CodeGenCXX/debug-info-template-member.cpp | 7 +-- clang/test/CodeGenCXX/debug-info-template.cpp | 17 ++++---- clang/test/CodeGenCXX/debug-info-uuid.cpp | 28 ++++++------ clang/test/CodeGenCXX/debug-info.cpp | 5 ++- clang/test/CodeGenCXX/debug-lambda-expressions.cpp | 10 +++-- clang/test/CodeGenCXX/inline-dllexport-member.cpp | 7 +-- clang/test/Driver/darwin-debug-flags.c | 2 +- clang/test/Modules/ExtDebugInfo.cpp | 19 ++++---- clang/test/Modules/ExtDebugInfo.m | 20 ++++----- 31 files changed, 158 insertions(+), 134 deletions(-) diff --git a/clang/lib/CodeGen/CGDebugInfo.cpp b/clang/lib/CodeGen/CGDebugInfo.cpp index c0af91f..5e3e975 100644 --- a/clang/lib/CodeGen/CGDebugInfo.cpp +++ b/clang/lib/CodeGen/CGDebugInfo.cpp @@ -3606,8 +3606,8 @@ llvm::DIGlobalVariable *CGDebugInfo::CollectAnonRecordDecls( } // Use VarDecl's Tag, Scope and Line number. GV = DBuilder.createGlobalVariable(DContext, FieldName, LinkageName, Unit, - LineNo, FieldTy, - Var->hasLocalLinkage(), Var, nullptr); + LineNo, FieldTy, Var->hasLocalLinkage()); + Var->addDebugInfo(GV); } return GV; } @@ -3640,14 +3640,14 @@ void CGDebugInfo::EmitGlobalVariable(llvm::GlobalVariable *Var, } else { GV = DBuilder.createGlobalVariable( DContext, DeclName, LinkageName, Unit, LineNo, getOrCreateType(T, Unit), - Var->hasLocalLinkage(), Var, + Var->hasLocalLinkage(), /*Expr=*/nullptr, getOrCreateStaticDataMemberDeclarationOrNull(D)); + Var->addDebugInfo(GV); } DeclCache[D->getCanonicalDecl()].reset(GV); } -void CGDebugInfo::EmitGlobalVariable(const ValueDecl *VD, - llvm::Constant *Init) { +void CGDebugInfo::EmitGlobalVariable(const ValueDecl *VD, const APValue &Init) { assert(DebugKind >= codegenoptions::LimitedDebugInfo); if (VD->hasAttr()) return; @@ -3687,9 +3687,13 @@ void CGDebugInfo::EmitGlobalVariable(const ValueDecl *VD, auto &GV = DeclCache[VD]; if (GV) return; + llvm::DIExpression *InitExpr = nullptr; + if (Init.isInt()) + InitExpr = + DBuilder.createConstantValueExpression(Init.getInt().getExtValue()); GV.reset(DBuilder.createGlobalVariable( DContext, Name, StringRef(), Unit, getLineNumber(VD->getLocation()), Ty, - true, Init, getOrCreateStaticDataMemberDeclarationOrNull(VarD))); + true, InitExpr, getOrCreateStaticDataMemberDeclarationOrNull(VarD))); } llvm::DIScope *CGDebugInfo::getCurrentContextDescriptor(const Decl *D) { diff --git a/clang/lib/CodeGen/CGDebugInfo.h b/clang/lib/CodeGen/CGDebugInfo.h index eba46ba..486eb2a 100644 --- a/clang/lib/CodeGen/CGDebugInfo.h +++ b/clang/lib/CodeGen/CGDebugInfo.h @@ -354,8 +354,8 @@ public: /// Emit information about a global variable. void EmitGlobalVariable(llvm::GlobalVariable *GV, const VarDecl *Decl); - /// Emit global variable's debug info. - void EmitGlobalVariable(const ValueDecl *VD, llvm::Constant *Init); + /// Emit a constant global variable's debug info. + void EmitGlobalVariable(const ValueDecl *VD, const APValue &Init); /// Emit C++ using directive. void EmitUsingDirective(const UsingDirectiveDecl &UD); diff --git a/clang/lib/CodeGen/CGExpr.cpp b/clang/lib/CodeGen/CGExpr.cpp index 5f710f9..7fee798 100644 --- a/clang/lib/CodeGen/CGExpr.cpp +++ b/clang/lib/CodeGen/CGExpr.cpp @@ -1180,10 +1180,10 @@ CodeGenFunction::tryEmitAsConstant(DeclRefExpr *refExpr) { // This should probably fire even for if (isa(value)) { if (!getContext().DeclMustBeEmitted(cast(value))) - EmitDeclRefExprDbgValue(refExpr, C); + EmitDeclRefExprDbgValue(refExpr, result.Val); } else { assert(isa(value)); - EmitDeclRefExprDbgValue(refExpr, C); + EmitDeclRefExprDbgValue(refExpr, result.Val); } // If we emitted a reference constant, we need to dereference that. diff --git a/clang/lib/CodeGen/CodeGenFunction.cpp b/clang/lib/CodeGen/CodeGenFunction.cpp index 2341eab..116079e 100644 --- a/clang/lib/CodeGen/CodeGenFunction.cpp +++ b/clang/lib/CodeGen/CodeGenFunction.cpp @@ -1840,8 +1840,8 @@ Address CodeGenFunction::EmitMSVAListRef(const Expr *E) { } void CodeGenFunction::EmitDeclRefExprDbgValue(const DeclRefExpr *E, - llvm::Constant *Init) { - assert (Init && "Invalid DeclRefExpr initializer!"); + const APValue &Init) { + assert(!Init.isUninit() && "Invalid DeclRefExpr initializer!"); if (CGDebugInfo *Dbg = getDebugInfo()) if (CGM.getCodeGenOpts().getDebugInfo() >= codegenoptions::LimitedDebugInfo) Dbg->EmitGlobalVariable(E->getDecl(), Init); diff --git a/clang/lib/CodeGen/CodeGenFunction.h b/clang/lib/CodeGen/CodeGenFunction.h index bb04371..db8b634 100644 --- a/clang/lib/CodeGen/CodeGenFunction.h +++ b/clang/lib/CodeGen/CodeGenFunction.h @@ -2810,7 +2810,7 @@ public: LValue EmitStmtExprLValue(const StmtExpr *E); LValue EmitPointerToDataMemberBinaryExpr(const BinaryOperator *E); LValue EmitObjCSelectorLValue(const ObjCSelectorExpr *E); - void EmitDeclRefExprDbgValue(const DeclRefExpr *E, llvm::Constant *Init); + void EmitDeclRefExprDbgValue(const DeclRefExpr *E, const APValue &Init); //===--------------------------------------------------------------------===// // Scalar Expression Emission diff --git a/clang/test/CodeGen/2009-10-20-GlobalDebug.c b/clang/test/CodeGen/2009-10-20-GlobalDebug.c index 080f02e..38f20cd 100644 --- a/clang/test/CodeGen/2009-10-20-GlobalDebug.c +++ b/clang/test/CodeGen/2009-10-20-GlobalDebug.c @@ -1,16 +1,18 @@ // REQUIRES: x86-registered-target // RUN: %clang -target i386-apple-darwin10 -flto -S -g %s -o - | FileCheck %s + +// CHECK: @main.localstatic = internal global i32 0, align 4, !dbg [[L:![0-9]+]] +// CHECK: @global = common global i32 0, align 4, !dbg [[G:![0-9]+]] + int global; int main() { static int localstatic; return 0; } -// CHECK: !DIGlobalVariable(name: "localstatic" +// CHECK: [[L]] = distinct !DIGlobalVariable(name: "localstatic" // CHECK-NOT: linkageName: -// CHECK-SAME: line: 5, -// CHECK-SAME: variable: i32* @main.localstatic -// CHECK: !DIGlobalVariable(name: "global" +// CHECK-SAME: line: 9, +// CHECK: [[G]] = distinct !DIGlobalVariable(name: "global" // CHECK-NOT: linkageName: -// CHECK-SAME: line: 3, -// CHECK-SAME: variable: i32* @global +// CHECK-SAME: line: 7, diff --git a/clang/test/CodeGen/2010-08-10-DbgConstant.c b/clang/test/CodeGen/2010-08-10-DbgConstant.c index cbc1841c..3a40c24 100644 --- a/clang/test/CodeGen/2010-08-10-DbgConstant.c +++ b/clang/test/CodeGen/2010-08-10-DbgConstant.c @@ -1,5 +1,6 @@ // RUN: %clang_cc1 -S -emit-llvm -debug-info-kind=limited %s -o - | FileCheck %s -// CHECK: !DIGlobalVariable( +// CHECK: !DIGlobalVariable({{.*}}, expr: [[EXPR:![0-9]+]]) +// CHECK: [[EXPR]] = !DIExpression(DW_OP_constu, 201, DW_OP_stack_value) static const unsigned int ro = 201; void bar(int); diff --git a/clang/test/CodeGen/debug-info-packed-struct.c b/clang/test/CodeGen/debug-info-packed-struct.c index 8c1a0d4..46f96aa 100644 --- a/clang/test/CodeGen/debug-info-packed-struct.c +++ b/clang/test/CodeGen/debug-info-packed-struct.c @@ -1,9 +1,9 @@ // RUN: %clang_cc1 -x c -debug-info-kind=limited -emit-llvm -triple x86_64-apple-darwin -o - %s | FileCheck %s +// CHECK: %struct.layout3 = type <{ i8, [3 x i8], %struct.size8_pack4, i8, [3 x i8] }> // CHECK: %struct.layout0 = type { i8, %struct.size8, i8 } // CHECK: %struct.layout1 = type <{ i8, %struct.size8_anon, i8, [2 x i8] }> // CHECK: %struct.layout2 = type <{ i8, %struct.size8_pack1, i8 }> -// CHECK: %struct.layout3 = type <{ i8, [3 x i8], %struct.size8_pack4, i8, [3 x i8] }> // --------------------------------------------------------------------- // Not packed. @@ -85,7 +85,7 @@ struct layout3 { // CHECK: !DIDerivedType(tag: DW_TAG_member, name: "l3_ofs12", // CHECK-SAME: {{.*}}size: 1, align: 32, offset: 96, flags: DIFlagBitField, extraData: i64 96) +struct layout3 l3; struct layout0 l0; struct layout1 l1; struct layout2 l2; -struct layout3 l3; diff --git a/clang/test/CodeGen/debug-info-static.c b/clang/test/CodeGen/debug-info-static.c index fbe2a00..0ebd6a6 100644 --- a/clang/test/CodeGen/debug-info-static.c +++ b/clang/test/CodeGen/debug-info-static.c @@ -1,6 +1,8 @@ // RUN: %clang_cc1 -debug-info-kind=limited -emit-llvm -o - %s | FileCheck %s -// CHECK: !DIGlobalVariable({{.*}}variable: i32* @f.xyzzy +// CHECK: @f.xyzzy = internal global i32 0, align 4, !dbg [[XYZZY:![0-9]+]] + +// CHECK: [[XYZZY]] = distinct !DIGlobalVariable void f(void) { static int xyzzy; diff --git a/clang/test/CodeGenCXX/debug-info-access.cpp b/clang/test/CodeGenCXX/debug-info-access.cpp index 41b7f71..82f29ea 100644 --- a/clang/test/CodeGenCXX/debug-info-access.cpp +++ b/clang/test/CodeGenCXX/debug-info-access.cpp @@ -39,6 +39,6 @@ private: // CHECK-SAME: flags: DIFlagPrototyped, void free() {} +U u; A a; B b; -U u; diff --git a/clang/test/CodeGenCXX/debug-info-alias.cpp b/clang/test/CodeGenCXX/debug-info-alias.cpp index 9047643..8c3f844 100644 --- a/clang/test/CodeGenCXX/debug-info-alias.cpp +++ b/clang/test/CodeGenCXX/debug-info-alias.cpp @@ -14,8 +14,6 @@ bar } // CHECK: !DIGlobalVariable(name: "bi",{{.*}} type: [[BINT:![0-9]+]] -// CHECK: [[BINT]] = !DIDerivedType(tag: DW_TAG_typedef, name: "bar" -// CHECK-SAME: line: 42, x::bar bi; // CHECK: !DIGlobalVariable(name: "bf",{{.*}} type: [[BFLOAT:![0-9]+]] // CHECK: [[BFLOAT]] = !DIDerivedType(tag: DW_TAG_typedef, name: "bar" @@ -37,3 +35,6 @@ tv *tvp; using v = void; // CHECK: !DIDerivedType(tag: DW_TAG_typedef, name: "v" v *vp; + +// CHECK: [[BINT]] = !DIDerivedType(tag: DW_TAG_typedef, name: "bar" +// CHECK-SAME: line: 42, diff --git a/clang/test/CodeGenCXX/debug-info-anon-namespace.cpp b/clang/test/CodeGenCXX/debug-info-anon-namespace.cpp index 4e3e08a..79298de 100644 --- a/clang/test/CodeGenCXX/debug-info-anon-namespace.cpp +++ b/clang/test/CodeGenCXX/debug-info-anon-namespace.cpp @@ -19,8 +19,9 @@ int *b2 = &a2; // PS4: [[NS:![0-9]+]] = !DINamespace +// PS4: [[CU:![0-9]+]] = distinct !DICompileUnit // PS4: [[NS2:![0-9]+]] = !DINamespace -// PS4: !DIImportedEntity(tag: DW_TAG_imported_module, scope: !0, entity: [[NS]]) +// PS4: !DIImportedEntity(tag: DW_TAG_imported_module, scope: [[CU]], entity: [[NS]]) // PS4: !DIImportedEntity(tag: DW_TAG_imported_module, scope: [[NS]], entity: [[NS2]], line: {{[0-9]+}}) // NON-PS4-NOT: !DIImportedEntity diff --git a/clang/test/CodeGenCXX/debug-info-anon-union-vars.cpp b/clang/test/CodeGenCXX/debug-info-anon-union-vars.cpp index b844d42..61b3c7c 100644 --- a/clang/test/CodeGenCXX/debug-info-anon-union-vars.cpp +++ b/clang/test/CodeGenCXX/debug-info-anon-union-vars.cpp @@ -45,8 +45,8 @@ void instantiate(int x) { } // CHECK: !DIGlobalVariable(name: "c",{{.*}} file: [[FILE:.*]], line: 6,{{.*}} isLocal: true, isDefinition: true -// CHECK: [[FILE]] = !DIFile(filename: "{{.*}}debug-info-anon-union-vars.cpp", // CHECK: !DIGlobalVariable(name: "d",{{.*}} file: [[FILE]], line: 6,{{.*}} isLocal: true, isDefinition: true +// CHECK: [[FILE]] = !DIFile(filename: "{{.*}}debug-info-anon-union-vars.cpp", // CHECK: !DIGlobalVariable(name: "a",{{.*}} file: [[FILE]], line: 6,{{.*}} isLocal: true, isDefinition: true // CHECK: !DIGlobalVariable(name: "b",{{.*}} file: [[FILE]], line: 6,{{.*}} isLocal: true, isDefinition: true // CHECK: !DIGlobalVariable(name: "result", {{.*}} isLocal: false, isDefinition: true diff --git a/clang/test/CodeGenCXX/debug-info-cxx1y.cpp b/clang/test/CodeGenCXX/debug-info-cxx1y.cpp index 36b3e09..403424e 100644 --- a/clang/test/CodeGenCXX/debug-info-cxx1y.cpp +++ b/clang/test/CodeGenCXX/debug-info-cxx1y.cpp @@ -3,9 +3,6 @@ // CHECK: imports: [[IMPS:![0-9]*]] // CHECK: [[EMPTY:![0-9]*]] = !{} -// CHECK: [[FOO:![0-9]+]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "foo", -// CHECK-SAME: elements: [[EMPTY]] - // CHECK: [[IMPS]] = !{[[IMP:![0-9]*]]} // CHECK: [[IMP]] = !DIImportedEntity( // CHECK-SAME: entity: [[F3:![0-9]*]] @@ -15,6 +12,9 @@ // CHECK: [[TYPE_LIST]] = !{[[INT:![0-9]*]]} // CHECK: [[INT]] = !DIBasicType(name: "int" +// 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: [[FOO]] // CHECK-SAME: type: [[SUBROUTINE_TYPE]] diff --git a/clang/test/CodeGenCXX/debug-info-method.cpp b/clang/test/CodeGenCXX/debug-info-method.cpp index 73d8b92..e0f9a28 100644 --- a/clang/test/CodeGenCXX/debug-info-method.cpp +++ b/clang/test/CodeGenCXX/debug-info-method.cpp @@ -1,10 +1,10 @@ // RUN: %clang_cc1 -emit-llvm -triple %itanium_abi_triple -std=c++11 -debug-info-kind=limited %s -o - | FileCheck %s +// CHECK: !DIDerivedType(tag: DW_TAG_ptr_to_member_type // 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: ![[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]+]] // CHECK: ![[MEMFUNTYPE]] = !DISubroutineType({{(cc: DW_CC_BORLAND_thiscall, )?}}types: ![[MEMFUNARGS:[0-9]+]]) // CHECK: ![[MEMFUNARGS]] = {{.*}}, ![[THISTYPE]], diff --git a/clang/test/CodeGenCXX/debug-info-ms-abi.cpp b/clang/test/CodeGenCXX/debug-info-ms-abi.cpp index c58fcc9..1bf8bab 100644 --- a/clang/test/CodeGenCXX/debug-info-ms-abi.cpp +++ b/clang/test/CodeGenCXX/debug-info-ms-abi.cpp @@ -11,11 +11,14 @@ struct Foo { Foo f; Foo::Nested n; +// CHECK: ![[Nested:[0-9]+]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "Nested", +// CHECK-SAME: identifier: ".?AUNested@Foo@@" + // CHECK: ![[Foo:[^ ]*]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "Foo", // CHECK-SAME: elements: ![[elements:[0-9]+]] // CHECK-SAME: identifier: ".?AUFoo@@" -// CHECK: ![[elements]] = !{![[vshape:[0-9]+]], ![[vptr:[0-9]+]], ![[Nested:[0-9]+]], ![[f:[0-9]+]], ![[g:[0-9]+]], ![[h:[0-9]+]]} +// CHECK: ![[elements]] = !{![[vshape:[0-9]+]], ![[vptr:[0-9]+]], ![[Nested]], ![[f:[0-9]+]], ![[g:[0-9]+]], ![[h:[0-9]+]]} // CHECK: ![[vshape]] = !DIDerivedType(tag: DW_TAG_pointer_type, name: "__vtbl_ptr_type", baseType: null, size: 96) @@ -24,9 +27,6 @@ Foo::Nested n; // CHECK: ![[vptr_ty]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: ![[vshape]], size: 32 -// CHECK: ![[Nested]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "Nested", -// CHECK-SAME: identifier: ".?AUNested@Foo@@" - // CHECK: ![[f]] = !DISubprogram(name: "f", // CHECK-SAME: containingType: ![[Foo]], virtuality: DW_VIRTUALITY_virtual, virtualIndex: 0, // CHECK-SAME: flags: DIFlagPrototyped | DIFlagIntroducedVirtual, diff --git a/clang/test/CodeGenCXX/debug-info-ms-anonymous-tag.cpp b/clang/test/CodeGenCXX/debug-info-ms-anonymous-tag.cpp index cef1eb8..5e2cb21 100644 --- a/clang/test/CodeGenCXX/debug-info-ms-anonymous-tag.cpp +++ b/clang/test/CodeGenCXX/debug-info-ms-anonymous-tag.cpp @@ -4,7 +4,6 @@ typedef struct { } test1; test1 gv1; -// CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "test1" struct { } test2; @@ -18,3 +17,5 @@ test3 gv3; void *use_test3 = &gv3; // CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "" + +// CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "test1" diff --git a/clang/test/CodeGenCXX/debug-info-ms-ptr-to-member.cpp b/clang/test/CodeGenCXX/debug-info-ms-ptr-to-member.cpp index 4b9f2a1..ddb22a1 100644 --- a/clang/test/CodeGenCXX/debug-info-ms-ptr-to-member.cpp +++ b/clang/test/CodeGenCXX/debug-info-ms-ptr-to-member.cpp @@ -23,7 +23,6 @@ int Incomplete::**ppmd; void (Incomplete::**ppmf)(); // CHECK: distinct !DIGlobalVariable(name: "pmd_a", {{.*}} type: ![[pmd_a:[^, ]*]], {{.*}}) -// CHECK: ![[pmd_a]] = !DIDerivedType(tag: DW_TAG_ptr_to_member_type, baseType: !{{.*}}, size: 32, flags: DIFlagSingleInheritance, {{.*}}) // CHECK: distinct !DIGlobalVariable(name: "pmd_b", {{.*}} type: ![[pmd_b:[^, ]*]], {{.*}}) // CHECK: ![[pmd_b]] = !DIDerivedType(tag: DW_TAG_ptr_to_member_type, baseType: !{{.*}}, size: 32, flags: DIFlagMultipleInheritance, {{.*}}) // CHECK: distinct !DIGlobalVariable(name: "pmd_c", {{.*}} type: ![[pmd_c:[^, ]*]], {{.*}}) @@ -50,3 +49,5 @@ void (Incomplete::**ppmf)(); // CHECK: distinct !DIGlobalVariable(name: "ppmf", {{.*}} type: ![[ppmf:[^, ]*]], {{.*}}) // CHECK: ![[ppmf]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: ![[ppmf2:[^ ]*]], size: 64, align: 64) // CHECK: ![[ppmf2]] = !DIDerivedType(tag: DW_TAG_ptr_to_member_type, baseType: !{{[0-9]*}}, extraData: !{{[0-9]*}}){{$}} + +// CHECK: ![[pmd_a]] = !DIDerivedType(tag: DW_TAG_ptr_to_member_type, baseType: !{{.*}}, size: 32, flags: DIFlagSingleInheritance, {{.*}}) diff --git a/clang/test/CodeGenCXX/debug-info-ms-vbase.cpp b/clang/test/CodeGenCXX/debug-info-ms-vbase.cpp index 810212e..1590657 100644 --- a/clang/test/CodeGenCXX/debug-info-ms-vbase.cpp +++ b/clang/test/CodeGenCXX/debug-info-ms-vbase.cpp @@ -2,11 +2,27 @@ // Tests virtual bases in the MS ABI. -struct POD { int pod; }; +// CHECK: ![[NoPrimaryBase:[0-9]+]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "NoPrimaryBase", +// CHECK-SAME: elements: ![[elements:[0-9]+]] -struct DynamicNoVFPtr : virtual POD { }; +// CHECK: ![[elements]] = !{![[NoPrimaryBase_base:[0-9]+]]} -DynamicNoVFPtr dynamic_no_vfptr; +// CHECK: ![[NoPrimaryBase_base]] = !DIDerivedType(tag: DW_TAG_inheritance, scope: ![[NoPrimaryBase]], +// CHECK-SAME: baseType: ![[HasVirtualMethod:[0-9]+]], offset: 4, flags: DIFlagVirtual) + +// CHECK: ![[HasVirtualMethod]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "HasVirtualMethod" + +// CHECK: ![[HasPrimaryBase:[0-9]+]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "HasPrimaryBase", +// CHECK-SAME: elements: ![[elements:[0-9]+]] + +// CHECK: ![[elements]] = !{![[SecondaryVTable_base:[0-9]+]], ![[HasVirtualMethod_base:[0-9]+]], ![[vshape:[0-9]+]]} + +// CHECK: ![[SecondaryVTable_base]] = !DIDerivedType(tag: DW_TAG_inheritance, scope: ![[HasPrimaryBase]], +// CHECK-SAME: baseType: ![[SecondaryVTable:[0-9]+]], offset: 4, flags: DIFlagVirtual) + +// CHECK: ![[SecondaryVTable]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "SecondaryVTable" + +// CHECK: ![[HasVirtualMethod_base]] = !DIDerivedType(tag: DW_TAG_inheritance, scope: ![[HasPrimaryBase]], baseType: ![[HasVirtualMethod]]) // CHECK: ![[DynamicNoVFPtr:[0-9]+]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "DynamicNoVFPtr", // CHECK-SAME: elements: ![[elements:[0-9]+]] @@ -18,21 +34,17 @@ DynamicNoVFPtr dynamic_no_vfptr; // CHECK: ![[POD]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "POD" -struct HasVirtualMethod { virtual void f(); }; - -struct NoPrimaryBase : virtual HasVirtualMethod { }; +struct POD { int pod; }; -NoPrimaryBase no_primary_base; +struct DynamicNoVFPtr : virtual POD { }; -// CHECK: ![[NoPrimaryBase:[0-9]+]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "NoPrimaryBase", -// CHECK-SAME: elements: ![[elements:[0-9]+]] +DynamicNoVFPtr dynamic_no_vfptr; -// CHECK: ![[elements]] = !{![[NoPrimaryBase_base:[0-9]+]]} +struct HasVirtualMethod { virtual void f(); }; -// CHECK: ![[NoPrimaryBase_base]] = !DIDerivedType(tag: DW_TAG_inheritance, scope: ![[NoPrimaryBase]], -// CHECK-SAME: baseType: ![[HasVirtualMethod:[0-9]+]], offset: 4, flags: DIFlagVirtual) +struct NoPrimaryBase : virtual HasVirtualMethod { }; -// CHECK: ![[HasVirtualMethod]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "HasVirtualMethod" +NoPrimaryBase no_primary_base; struct SecondaryVTable { virtual void g(); }; @@ -40,15 +52,3 @@ struct HasPrimaryBase : virtual SecondaryVTable, HasVirtualMethod { }; HasPrimaryBase has_primary_base; -// CHECK: ![[HasPrimaryBase:[0-9]+]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "HasPrimaryBase", -// CHECK-SAME: elements: ![[elements:[0-9]+]] - -// CHECK: ![[elements]] = !{![[SecondaryVTable_base:[0-9]+]], ![[HasVirtualMethod_base:[0-9]+]], ![[vshape:[0-9]+]]} - -// CHECK: ![[SecondaryVTable_base]] = !DIDerivedType(tag: DW_TAG_inheritance, scope: ![[HasPrimaryBase]], -// CHECK-SAME: baseType: ![[SecondaryVTable:[0-9]+]], offset: 4, flags: DIFlagVirtual) - -// CHECK: ![[SecondaryVTable]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "SecondaryVTable" - -// CHECK: ![[HasVirtualMethod_base]] = !DIDerivedType(tag: DW_TAG_inheritance, scope: ![[HasPrimaryBase]], baseType: ![[HasVirtualMethod]]) - diff --git a/clang/test/CodeGenCXX/debug-info-namespace.cpp b/clang/test/CodeGenCXX/debug-info-namespace.cpp index 060a5ce..4c534a0 100644 --- a/clang/test/CodeGenCXX/debug-info-namespace.cpp +++ b/clang/test/CodeGenCXX/debug-info-namespace.cpp @@ -55,8 +55,6 @@ void B::func_fwd() {} // This should work even if 'i' and 'func' were declarations & not definitions, // but it doesn't yet. -// CHECK: [[CU:![0-9]+]] = distinct !DICompileUnit( -// CHECK-SAME: imports: [[MODULES:![0-9]*]] // CHECK: [[I:![0-9]+]] = distinct !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" @@ -65,6 +63,8 @@ void B::func_fwd() {} // CHECK: [[VAR_FWD:![0-9]+]] = distinct !DIGlobalVariable(name: "var_fwd",{{.*}} scope: [[NS]], // CHECK-SAME: line: 44 // CHECK-SAME: isDefinition: true +// CHECK: [[CU:![0-9]+]] = distinct !DICompileUnit( +// CHECK-SAME: imports: [[MODULES:![0-9]*]] // 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) diff --git a/clang/test/CodeGenCXX/debug-info-static-member.cpp b/clang/test/CodeGenCXX/debug-info-static-member.cpp index ed8ae01..d28c2ac 100644 --- a/clang/test/CodeGenCXX/debug-info-static-member.cpp +++ b/clang/test/CodeGenCXX/debug-info-static-member.cpp @@ -3,6 +3,10 @@ // RUN: %clangxx -target x86_64-unknown-unknown -g -std=c++11 %s -emit-llvm -S -o - | FileCheck %s // PR14471 +// CHECK: @_ZN1C1aE = global i32 4, align 4, !dbg [[A:![0-9]+]] +// CHECK: @_ZN1C1bE = global i32 2, align 4, !dbg [[B:![0-9]+]] +// CHECK: @_ZN1C1cE = global i32 1, align 4, !dbg [[C:![0-9]+]] + enum X { Y }; @@ -28,6 +32,8 @@ public: // why the definition of "a" comes before the declarations while // "b" and "c" come after. +// CHECK: [[A]] = distinct !DIGlobalVariable(name: "a", {{.*}} declaration: ![[DECL_A:[0-9]+]]) +// // CHECK: !DICompositeType(tag: DW_TAG_enumeration_type, name: "X"{{.*}}, identifier: "_ZTS1X") // CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "anon_static_decl_struct" // CHECK: !DIDerivedType(tag: DW_TAG_member, name: "anon_static_decl_var" @@ -36,16 +42,22 @@ public: // 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: [[B]] = distinct !DIGlobalVariable(name: "b", {{.*}} declaration: ![[DECL_B:[0-9]+]]) +// CHECK: ![[DECL_B]] = !DIDerivedType(tag: DW_TAG_member, name: "b" // CHECK-NOT: size: // CHECK-NOT: align: // CHECK-NOT: offset: -// CHECK-SAME: flags: DIFlagStaticMember) +// CHECK-SAME: flags: DIFlagProtected | DIFlagStaticMember) // // CHECK: !DICompositeType(tag: DW_TAG_class_type, name: "C"{{.*}}, identifier: "_ZTS1C") // +// CHECK: ![[DECL_A]] = !DIDerivedType(tag: DW_TAG_member, name: "a" +// CHECK-NOT: size: +// CHECK-NOT: align: +// CHECK-NOT: offset: +// CHECK-SAME: flags: DIFlagStaticMember) +// // CHECK: !DIDerivedType(tag: DW_TAG_member, name: "const_a" // CHECK-NOT: size: // CHECK-NOT: align: @@ -53,12 +65,6 @@ int C::a = 4; // 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: -// CHECK-NOT: offset: -// CHECK-SAME: flags: DIFlagProtected | DIFlagStaticMember) -// // CHECK: !DIDerivedType(tag: DW_TAG_member, name: "const_b" // CHECK-NOT: size: // CHECK-NOT: align: @@ -82,9 +88,8 @@ int C::a = 4; // CHECK: !DIDerivedType(tag: DW_TAG_member, name: "x_a" // CHECK-SAME: flags: DIFlagPublic | DIFlagStaticMember) -// CHECK: !DIGlobalVariable(name: "b", {{.*}}variable: i32* @_ZN1C1bE, declaration: ![[DECL_B]]) int C::b = 2; -// CHECK: !DIGlobalVariable(name: "c", {{.*}}variable: i32* @_ZN1C1cE, declaration: ![[DECL_C]]) +// CHECK: [[C]] = distinct !DIGlobalVariable(name: "c", {{.*}} declaration: ![[DECL_C]]) int C::c = 1; int main() diff --git a/clang/test/CodeGenCXX/debug-info-template-explicit-specialization.cpp b/clang/test/CodeGenCXX/debug-info-template-explicit-specialization.cpp index 08146c2..c8d8a1d 100644 --- a/clang/test/CodeGenCXX/debug-info-template-explicit-specialization.cpp +++ b/clang/test/CodeGenCXX/debug-info-template-explicit-specialization.cpp @@ -22,9 +22,6 @@ struct b { }; extern template class b; b bi; -// CHECK: DICompositeType(tag: DW_TAG_structure_type, name: "b" -// CHECK-NOT: DIFlagFwdDecl -// CHECK-SAME: ){{$}} template struct c { @@ -116,3 +113,7 @@ template <> struct k; template struct k; // CHECK-NOT: !DICompositeType(tag: DW_TAG_structure_type, name: "k" + +// CHECK: DICompositeType(tag: DW_TAG_structure_type, name: "b" +// CHECK-NOT: DIFlagFwdDecl +// CHECK-SAME: ){{$}} diff --git a/clang/test/CodeGenCXX/debug-info-template-member.cpp b/clang/test/CodeGenCXX/debug-info-template-member.cpp index 88f024b..749b92e 100644 --- a/clang/test/CodeGenCXX/debug-info-template-member.cpp +++ b/clang/test/CodeGenCXX/debug-info-template-member.cpp @@ -1,5 +1,7 @@ // RUN: %clang_cc1 -emit-llvm -debug-info-kind=limited -triple x86_64-apple-darwin %s -o - | FileCheck %s +// CHECK: @x = global %"struct.outer::inner" zeroinitializer, align 4, !dbg [[X:![0-9]+]] + struct MyClass { template int add(int j) { return i + j; @@ -17,9 +19,8 @@ inline int add3(int x) { } // The compile unit pulls in the global variables first. -// CHECK: !DIGlobalVariable(name: "x", +// CHECK: [[X]] = distinct !DIGlobalVariable(name: "x", // CHECK-SAME: type: ![[OUTER_FOO_INNER_ID:[0-9]+]] -// CHECK-SAME: variable: %"struct.outer::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" @@ -38,7 +39,7 @@ inline int add3(int x) { // 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: [[C_FUNC]] = !DISubprogram(name: "func",{{.*}} line: 9, // CHECK: !DISubprogram(name: "add<2>" // CHECK-SAME: scope: [[C]] diff --git a/clang/test/CodeGenCXX/debug-info-template.cpp b/clang/test/CodeGenCXX/debug-info-template.cpp index d35bb70..7dc24b0 100644 --- a/clang/test/CodeGenCXX/debug-info-template.cpp +++ b/clang/test/CodeGenCXX/debug-info-template.cpp @@ -1,5 +1,9 @@ // RUN: %clang -S -emit-llvm -target x86_64-unknown_unknown -g %s -o - -std=c++11 | FileCheck %s +// CHECK: @tci = global %"struct.TC::nested" zeroinitializer, align 1, !dbg [[TCI:![0-9]+]] +// CHECK: @tcn = global %struct.TC zeroinitializer, align 1, !dbg [[TCN:![0-9]+]] +// CHECK: @nn = global %struct.NN zeroinitializer, align 1, !dbg [[NN:![0-9]+]] + // CHECK: !DICompileUnit( // CHECK: [[EMPTY:![0-9]*]] = !{} @@ -18,13 +22,11 @@ struct TC { }; }; -// CHECK: [[INT:![0-9]+]] = !DIBasicType(name: "int" int glb; void func(); -// CHECK: !DIGlobalVariable(name: "tci", +// CHECK: [[TCI]] = distinct !DIGlobalVariable(name: "tci", // CHECK-SAME: type: ![[TCNESTED:[0-9]+]] -// CHECK-SAME: variable: %"struct.TC::nested"* @tci // CHECK: ![[TCNESTED]] ={{.*}}!DICompositeType(tag: DW_TAG_structure_type, name: "nested", // CHECK-SAME: scope: ![[TC:[0-9]+]], @@ -39,7 +41,8 @@ TC 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]] +// CHECK: [[CINT]] = !DIDerivedType(tag: DW_TAG_const_type, {{.*}}baseType: [[INT:![0-9]+]] +// CHECK: [[INT]] = !DIBasicType(name: "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: ![[FOO:[0-9]+]]) @@ -80,9 +83,8 @@ TC // CHECK: [[TCARG7_3]] = !DITemplateValueParameter(type: [[INT]], value: i32 3) 3>::nested tci; -// CHECK: !DIGlobalVariable(name: "tcn" +// CHECK: [[TCN]] = distinct !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" // CHECK-SAME: templateParams: [[TCNARGS:![0-9]*]] @@ -121,9 +123,8 @@ template