mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-01-23 17:48:03 +00:00
Update Clang for D20147 ("DebugInfo: New metadata representation for global variables.")
Differential Revision: http://reviews.llvm.org/D20415 llvm-svn: 281285
This commit is contained in:
parent
d4135bbc30
commit
eeb56abe64
clang
lib/CodeGen
test
CodeGen
CodeGenCXX
debug-info-access.cppdebug-info-alias.cppdebug-info-anon-namespace.cppdebug-info-anon-union-vars.cppdebug-info-cxx1y.cppdebug-info-method.cppdebug-info-ms-abi.cppdebug-info-ms-anonymous-tag.cppdebug-info-ms-ptr-to-member.cppdebug-info-ms-vbase.cppdebug-info-namespace.cppdebug-info-static-member.cppdebug-info-template-explicit-specialization.cppdebug-info-template-member.cppdebug-info-template.cppdebug-info-uuid.cppdebug-info.cppdebug-lambda-expressions.cppinline-dllexport-member.cpp
Driver
Modules
@ -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<NoDebugAttr>())
|
||||
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) {
|
||||
|
@ -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);
|
||||
|
@ -1180,10 +1180,10 @@ CodeGenFunction::tryEmitAsConstant(DeclRefExpr *refExpr) {
|
||||
// This should probably fire even for
|
||||
if (isa<VarDecl>(value)) {
|
||||
if (!getContext().DeclMustBeEmitted(cast<VarDecl>(value)))
|
||||
EmitDeclRefExprDbgValue(refExpr, C);
|
||||
EmitDeclRefExprDbgValue(refExpr, result.Val);
|
||||
} else {
|
||||
assert(isa<EnumConstantDecl>(value));
|
||||
EmitDeclRefExprDbgValue(refExpr, C);
|
||||
EmitDeclRefExprDbgValue(refExpr, result.Val);
|
||||
}
|
||||
|
||||
// If we emitted a reference constant, we need to dereference that.
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
|
@ -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,
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -39,6 +39,6 @@ private:
|
||||
// CHECK-SAME: flags: DIFlagPrototyped,
|
||||
void free() {}
|
||||
|
||||
U u;
|
||||
A a;
|
||||
B b;
|
||||
U u;
|
||||
|
@ -14,8 +14,6 @@ bar
|
||||
}
|
||||
|
||||
// CHECK: !DIGlobalVariable(name: "bi",{{.*}} type: [[BINT:![0-9]+]]
|
||||
// CHECK: [[BINT]] = !DIDerivedType(tag: DW_TAG_typedef, name: "bar<int>"
|
||||
// CHECK-SAME: line: 42,
|
||||
x::bar<int> bi;
|
||||
// CHECK: !DIGlobalVariable(name: "bf",{{.*}} type: [[BFLOAT:![0-9]+]]
|
||||
// CHECK: [[BFLOAT]] = !DIDerivedType(tag: DW_TAG_typedef, name: "bar<float>"
|
||||
@ -37,3 +35,6 @@ tv<int> *tvp;
|
||||
using v = void;
|
||||
// CHECK: !DIDerivedType(tag: DW_TAG_typedef, name: "v"
|
||||
v *vp;
|
||||
|
||||
// CHECK: [[BINT]] = !DIDerivedType(tag: DW_TAG_typedef, name: "bar<int>"
|
||||
// CHECK-SAME: line: 42,
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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]]
|
||||
|
@ -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]],
|
||||
|
@ -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,
|
||||
|
@ -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: "<unnamed-type-test3>"
|
||||
|
||||
// CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "test1"
|
||||
|
@ -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, {{.*}})
|
||||
|
@ -2,28 +2,6 @@
|
||||
|
||||
// Tests virtual bases in the MS ABI.
|
||||
|
||||
struct POD { int pod; };
|
||||
|
||||
struct DynamicNoVFPtr : virtual POD { };
|
||||
|
||||
DynamicNoVFPtr dynamic_no_vfptr;
|
||||
|
||||
// CHECK: ![[DynamicNoVFPtr:[0-9]+]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "DynamicNoVFPtr",
|
||||
// CHECK-SAME: elements: ![[elements:[0-9]+]]
|
||||
|
||||
// CHECK: ![[elements]] = !{![[POD_base:[0-9]+]]}
|
||||
|
||||
// CHECK: ![[POD_base]] = !DIDerivedType(tag: DW_TAG_inheritance, scope: ![[DynamicNoVFPtr]],
|
||||
// CHECK-SAME: baseType: ![[POD:[0-9]+]], offset: 4, flags: DIFlagVirtual)
|
||||
|
||||
// CHECK: ![[POD]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "POD"
|
||||
|
||||
struct HasVirtualMethod { virtual void f(); };
|
||||
|
||||
struct NoPrimaryBase : virtual HasVirtualMethod { };
|
||||
|
||||
NoPrimaryBase no_primary_base;
|
||||
|
||||
// CHECK: ![[NoPrimaryBase:[0-9]+]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "NoPrimaryBase",
|
||||
// CHECK-SAME: elements: ![[elements:[0-9]+]]
|
||||
|
||||
@ -34,12 +12,6 @@ NoPrimaryBase no_primary_base;
|
||||
|
||||
// CHECK: ![[HasVirtualMethod]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "HasVirtualMethod"
|
||||
|
||||
struct SecondaryVTable { virtual void g(); };
|
||||
|
||||
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]+]]
|
||||
|
||||
@ -52,3 +24,31 @@ HasPrimaryBase has_primary_base;
|
||||
|
||||
// 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]+]]
|
||||
|
||||
// CHECK: ![[elements]] = !{![[POD_base:[0-9]+]]}
|
||||
|
||||
// CHECK: ![[POD_base]] = !DIDerivedType(tag: DW_TAG_inheritance, scope: ![[DynamicNoVFPtr]],
|
||||
// CHECK-SAME: baseType: ![[POD:[0-9]+]], offset: 4, flags: DIFlagVirtual)
|
||||
|
||||
// CHECK: ![[POD]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "POD"
|
||||
|
||||
struct POD { int pod; };
|
||||
|
||||
struct DynamicNoVFPtr : virtual POD { };
|
||||
|
||||
DynamicNoVFPtr dynamic_no_vfptr;
|
||||
|
||||
struct HasVirtualMethod { virtual void f(); };
|
||||
|
||||
struct NoPrimaryBase : virtual HasVirtualMethod { };
|
||||
|
||||
NoPrimaryBase no_primary_base;
|
||||
|
||||
struct SecondaryVTable { virtual void g(); };
|
||||
|
||||
struct HasPrimaryBase : virtual SecondaryVTable, HasVirtualMethod { };
|
||||
|
||||
HasPrimaryBase has_primary_base;
|
||||
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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: [[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: 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: !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:
|
||||
@ -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()
|
||||
|
@ -22,9 +22,6 @@ struct b {
|
||||
};
|
||||
extern template class b<int>;
|
||||
b<int> bi;
|
||||
// CHECK: DICompositeType(tag: DW_TAG_structure_type, name: "b<int>"
|
||||
// CHECK-NOT: DIFlagFwdDecl
|
||||
// CHECK-SAME: ){{$}}
|
||||
|
||||
template <typename T>
|
||||
struct c {
|
||||
@ -116,3 +113,7 @@ template <>
|
||||
struct k<int>;
|
||||
template struct k<int>;
|
||||
// CHECK-NOT: !DICompositeType(tag: DW_TAG_structure_type, name: "k<int>"
|
||||
|
||||
// CHECK: DICompositeType(tag: DW_TAG_structure_type, name: "b<int>"
|
||||
// CHECK-NOT: DIFlagFwdDecl
|
||||
// CHECK-SAME: ){{$}}
|
||||
|
@ -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<foo>::inner" zeroinitializer, align 4, !dbg [[X:![0-9]+]]
|
||||
|
||||
struct MyClass {
|
||||
template <int i> 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<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"
|
||||
@ -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]]
|
||||
|
@ -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<unsigned int, 2, &glb, &foo::e, &foo::f, &foo::g, 1, 2, 3>::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<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]+]],
|
||||
|
||||
@ -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<int, -3, nullptr, nullptr, nullptr, nullptr>"
|
||||
// CHECK-SAME: templateParams: [[TCNARGS:![0-9]*]]
|
||||
@ -121,9 +123,8 @@ template <template <typename> class tmpl, int &lvr, int &&rvr>
|
||||
struct NN {
|
||||
};
|
||||
|
||||
// CHECK: !DIGlobalVariable(name: "nn"
|
||||
// CHECK: [[NN]] = distinct !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.
|
||||
|
@ -1,6 +1,18 @@
|
||||
// RUN: %clang_cc1 -emit-llvm -fms-extensions -triple=x86_64-pc-win32 -debug-info-kind=limited %s -o - -std=c++11 | FileCheck %s
|
||||
// RUN: %clang_cc1 -emit-llvm -fms-extensions -triple=x86_64-unknown-unknown -debug-info-kind=limited %s -o - -std=c++11 2>&1 | FileCheck %s --check-prefix=CHECK-ITANIUM
|
||||
|
||||
// CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "tmpl_guid2<__uuidof(uuid)>"
|
||||
// CHECK-SAME: templateParams: [[TGI2ARGS:![0-9]*]]
|
||||
// CHECK: [[TGI2ARGS]] = !{[[TGI2ARG1:![0-9]*]]}
|
||||
// CHECK: [[TGI2ARG1]] = !DITemplateValueParameter(
|
||||
// CHECK-SAME: type: [[CONST_GUID_REF:![0-9]*]]
|
||||
// CHECK-SAME: value: { i32, i16, i16, [8 x i8] }* @_GUID_12345678_1234_1234_1234_1234567890ab
|
||||
// CHECK: [[CONST_GUID_REF]] = !DIDerivedType(tag: DW_TAG_reference_type,
|
||||
// CHECK-SAME: baseType: [[CONST_GUID:![0-9]*]]
|
||||
// CHECK: [[CONST_GUID]] = !DIDerivedType(tag: DW_TAG_const_type
|
||||
// CHECK-SAME: baseType: [[GUID:![0-9]*]]
|
||||
// CHECK: [[GUID]] = !DICompositeType(tag: DW_TAG_structure_type, name: "_GUID"
|
||||
|
||||
// CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "tmpl_guid<&__uuidof(uuid)>"
|
||||
// CHECK-SAME: templateParams: [[TGIARGS:![0-9]*]]
|
||||
// CHECK: [[TGIARGS]] = !{[[TGIARG1:![0-9]*]]}
|
||||
@ -11,23 +23,11 @@
|
||||
// CHECK-SAME: baseType: [[CONST_GUID:![0-9]*]]
|
||||
// CHECK-SAME: size: 64
|
||||
// CHECK-SAME: align: 64
|
||||
// CHECK: [[CONST_GUID]] = !DIDerivedType(tag: DW_TAG_const_type
|
||||
// CHECK-SAME: baseType: [[GUID:![0-9]*]]
|
||||
// CHECK: [[GUID]] = !DICompositeType(tag: DW_TAG_structure_type, name: "_GUID"
|
||||
|
||||
// CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "tmpl_guid2<__uuidof(uuid)>"
|
||||
// CHECK-SAME: templateParams: [[TGI2ARGS:![0-9]*]]
|
||||
// CHECK: [[TGI2ARGS]] = !{[[TGI2ARG1:![0-9]*]]}
|
||||
// CHECK: [[TGI2ARG1]] = !DITemplateValueParameter(
|
||||
// CHECK-SAME: type: [[CONST_GUID_REF:![0-9]*]]
|
||||
// CHECK-SAME: value: { i32, i16, i16, [8 x i8] }* @_GUID_12345678_1234_1234_1234_1234567890ab
|
||||
// CHECK: [[CONST_GUID_REF]] = !DIDerivedType(tag: DW_TAG_reference_type,
|
||||
// CHECK-SAME: baseType: [[CONST_GUID:![0-9]*]]
|
||||
|
||||
// CHECK-ITANIUM: !DICompositeType(tag: DW_TAG_structure_type, name: "tmpl_guid<&__uuidof(uuid)>"
|
||||
// CHECK-ITANIUM-SAME: identifier: "_ZTS9tmpl_guidIXadu8__uuidoft4uuidEE"
|
||||
// CHECK-ITANIUM: !DICompositeType(tag: DW_TAG_structure_type, name: "tmpl_guid2<__uuidof(uuid)>"
|
||||
// CHECK-ITANIUM-SAME: identifier: "_ZTS10tmpl_guid2IXu8__uuidoft4uuidEE"
|
||||
// CHECK-ITANIUM: !DICompositeType(tag: DW_TAG_structure_type, name: "tmpl_guid<&__uuidof(uuid)>"
|
||||
// CHECK-ITANIUM-SAME: identifier: "_ZTS9tmpl_guidIXadu8__uuidoft4uuidEE"
|
||||
|
||||
struct _GUID;
|
||||
template <const _GUID *>
|
||||
|
@ -1,14 +1,15 @@
|
||||
// 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: @_ZN6pr96081xE = global [3 x i8]* null, align 8, !dbg [[X:![0-9]+]]
|
||||
|
||||
// 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: [[X]] = distinct !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:
|
||||
|
@ -15,6 +15,12 @@ struct D { D(); D(const D&); int x; };
|
||||
int d(int x) { D y[10]; return [x,y] { return y[x].x; }(); }
|
||||
|
||||
// Randomness for file. -- 6
|
||||
|
||||
// VAR:
|
||||
// CHECK: !DIGlobalVariable(name: "var"
|
||||
// CHECK-SAME: line: [[VAR_LINE:[0-9]+]]
|
||||
// CHECK-SAME: type: ![[VAR_T:[0-9]+]]
|
||||
|
||||
// CHECK: [[FILE:.*]] = !DIFile(filename: "{{.*}}debug-lambda-expressions.cpp",
|
||||
|
||||
// CVAR:
|
||||
@ -26,10 +32,6 @@ int d(int x) { D y[10]; return [x,y] { return y[x].x; }(); }
|
||||
// CHECK-SAME: elements: ![[CVAR_ARGS:[0-9]+]]
|
||||
// CHECK: ![[CVAR_ARGS]] = !{!{{[0-9]+}}}
|
||||
|
||||
// VAR:
|
||||
// CHECK: !DIGlobalVariable(name: "var"
|
||||
// CHECK-SAME: line: [[VAR_LINE:[0-9]+]]
|
||||
// CHECK-SAME: type: ![[VAR_T:[0-9]+]]
|
||||
// CHECK: ![[VAR_T]] = distinct !DICompositeType(tag: DW_TAG_class_type
|
||||
// CHECK-SAME: line: [[VAR_LINE]],
|
||||
// CHECK-SAME: elements: ![[VAR_ARGS:[0-9]+]]
|
||||
|
@ -1,11 +1,12 @@
|
||||
// RUN: %clang_cc1 -triple i686-windows-win32 -fms-extensions -debug-info-kind=limited -emit-llvm %s -o - \
|
||||
// RUN: | FileCheck %s
|
||||
|
||||
// CHECK: @"\01?ui@s@@2IB" = weak_odr dllexport constant i32 0, comdat, align 4, !dbg [[UI:![0-9]+]]
|
||||
|
||||
struct __declspec(dllexport) s {
|
||||
static const unsigned int ui = 0;
|
||||
};
|
||||
|
||||
// CHECK: ![[SCOPE:[0-9]+]] = distinct !DICompileUnit(
|
||||
// CHECK: !DIGlobalVariable(name: "ui", linkageName: "\01?ui@s@@2IB", scope: ![[SCOPE]],
|
||||
// CHECK-SAME: variable: i32* @"\01?ui@s@@2IB"
|
||||
// CHECK: [[UI]] = distinct !DIGlobalVariable(name: "ui", linkageName: "\01?ui@s@@2IB", scope: ![[SCOPE:[0-9]+]],
|
||||
// CHECK: ![[SCOPE]] = distinct !DICompileUnit(
|
||||
|
||||
|
@ -5,7 +5,7 @@
|
||||
// <rdar://problem/12955296>
|
||||
// RUN: %clang -### -target i386-apple-darwin9 -c -g %t.s 2>&1 | FileCheck -check-prefix=P %s
|
||||
|
||||
// CHECK: !0 = distinct !DICompileUnit(
|
||||
// CHECK: distinct !DICompileUnit(
|
||||
// CHECK-SAME: flags:
|
||||
// CHECK-SAME: -I path\5C with\5C \5C\5Cspaces
|
||||
// CHECK-SAME: -g -Os
|
||||
|
@ -71,20 +71,14 @@ void foo() {
|
||||
anon.i = GlobalStruct.i = GlobalUnion.i = GlobalEnum;
|
||||
}
|
||||
|
||||
|
||||
// CHECK: ![[STRUCT:.*]] = !DICompositeType(tag: DW_TAG_structure_type, name: "Struct",
|
||||
// CHECK: !DICompositeType(tag: DW_TAG_enumeration_type, name: "Enum",
|
||||
// CHECK-SAME: scope: ![[NS:[0-9]+]],
|
||||
// CHECK-SAME: flags: DIFlagFwdDecl,
|
||||
// CHECK-SAME: identifier: "_ZTSN8DebugCXX6StructE")
|
||||
// CHECK-SAME: identifier: "_ZTSN8DebugCXX4EnumE")
|
||||
|
||||
// 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")
|
||||
|
||||
// This type is anchored in the module by an explicit template instantiation.
|
||||
// CHECK: !DICompositeType(tag: DW_TAG_class_type,
|
||||
// CHECK-SAME: name: "Template<long, DebugCXX::traits<long> >",
|
||||
@ -125,7 +119,12 @@ void foo() {
|
||||
// CHECK-SAME: identifier: "_ZTSN8DebugCXX1AIJvEEE")
|
||||
|
||||
// CHECK: !DIDerivedType(tag: DW_TAG_member, name: "static_member",
|
||||
// CHECK-SAME: scope: ![[STRUCT]]
|
||||
// CHECK-SAME: scope: ![[STRUCT:[0-9]*]]
|
||||
|
||||
// CHECK: ![[STRUCT]] = !DICompositeType(tag: DW_TAG_structure_type, name: "Struct",
|
||||
// CHECK-SAME: scope: ![[NS]],
|
||||
// CHECK-SAME: flags: DIFlagFwdDecl,
|
||||
// CHECK-SAME: identifier: "_ZTSN8DebugCXX6StructE")
|
||||
|
||||
// CHECK: !DICompositeType(tag: DW_TAG_union_type,
|
||||
// CHECK-SAME: flags: DIFlagFwdDecl,
|
||||
@ -202,7 +201,7 @@ void foo() {
|
||||
// CHECK-SAME: name: "InAnonymousNamespace", {{.*}}DIFlagFwdDecl)
|
||||
|
||||
|
||||
// CHECK: !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !0, entity: ![[STRUCT]], line: 27)
|
||||
// CHECK: !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !{{[0-9]+}}, entity: ![[STRUCT]], line: 27)
|
||||
|
||||
// CHECK: !DICompileUnit(
|
||||
// CHECK-SAME: splitDebugFilename:
|
||||
|
@ -34,14 +34,8 @@ int foo(ObjCClass *c) {
|
||||
return [c property];
|
||||
}
|
||||
|
||||
// CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "ObjCClassWithPrivateIVars",
|
||||
// CHECK-SAME: flags: DIFlagObjcClassComplete
|
||||
|
||||
// CHECK: ![[MOD:.*]] = !DIModule(scope: null, name: "DebugObjC
|
||||
|
||||
// CHECK: !DIDerivedType(tag: DW_TAG_member, name: "hidden_ivar",
|
||||
// CHECK-SAME: flags: DIFlagPrivate)
|
||||
|
||||
// CHECK: !DIGlobalVariable(name: "GlobalUnion",
|
||||
// CHECK-SAME: type: ![[GLOBAL_UNION:[0-9]+]]
|
||||
// CHECK: ![[GLOBAL_UNION]] = distinct !DICompositeType(tag: DW_TAG_union_type,
|
||||
@ -52,10 +46,11 @@ int foo(ObjCClass *c) {
|
||||
// CHECK: ![[GLOBAL_STRUCT]] = distinct !DICompositeType(tag: DW_TAG_structure_type,
|
||||
// CHECK-SAME: elements: !{{[0-9]+}})
|
||||
|
||||
// CHECK: !DIDerivedType(tag: DW_TAG_typedef, name: "TypedefUnion",
|
||||
// CHECK-SAME: baseType: ![[TD_UNION:.*]])
|
||||
// CHECK: ![[TD_UNION]] = !DICompositeType(tag: DW_TAG_union_type,
|
||||
// CHECK-SAME: flags: DIFlagFwdDecl)
|
||||
// CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "ObjCClassWithPrivateIVars",
|
||||
// CHECK-SAME: flags: DIFlagObjcClassComplete
|
||||
|
||||
// CHECK: !DIDerivedType(tag: DW_TAG_member, name: "hidden_ivar",
|
||||
// CHECK-SAME: flags: DIFlagPrivate)
|
||||
|
||||
// CHECK: !DIDerivedType(tag: DW_TAG_typedef, name: "TypedefEnum",
|
||||
// CHECK-SAME: baseType: ![[TD_ENUM:.*]])
|
||||
@ -67,6 +62,11 @@ int foo(ObjCClass *c) {
|
||||
// CHECK: ![[TD_STRUCT]] = !DICompositeType(tag: DW_TAG_structure_type,
|
||||
// CHECK-SAME: flags: DIFlagFwdDecl)
|
||||
|
||||
// CHECK: !DIDerivedType(tag: DW_TAG_typedef, name: "TypedefUnion",
|
||||
// CHECK-SAME: baseType: ![[TD_UNION:.*]])
|
||||
// CHECK: ![[TD_UNION]] = !DICompositeType(tag: DW_TAG_union_type,
|
||||
// CHECK-SAME: flags: DIFlagFwdDecl)
|
||||
|
||||
// CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "ObjCClass",
|
||||
// CHECK-SAME: scope: ![[MOD]],
|
||||
// CHECK-SAME: flags: DIFlagFwdDecl)
|
||||
|
Loading…
x
Reference in New Issue
Block a user