зеркало из https://github.com/microsoft/clang-1.git
Forward declarations should take a context. This helps the debugger
find forward declarations in the context that the actual definition will occur. rdar://11291658 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@155381 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
aed9ea398a
Коммит
87380aaf42
|
@ -350,8 +350,8 @@ llvm::DIType CGDebugInfo::CreateType(const BuiltinType *BT) {
|
|||
return llvm::DIType();
|
||||
case BuiltinType::ObjCClass:
|
||||
return DBuilder.createForwardDecl(llvm::dwarf::DW_TAG_structure_type,
|
||||
"objc_class", getOrCreateMainFile(),
|
||||
0);
|
||||
"objc_class", TheCU,
|
||||
getOrCreateMainFile(), 0);
|
||||
case BuiltinType::ObjCId: {
|
||||
// typedef struct objc_class *Class;
|
||||
// typedef struct objc_object {
|
||||
|
@ -361,8 +361,7 @@ llvm::DIType CGDebugInfo::CreateType(const BuiltinType *BT) {
|
|||
// TODO: Cache these two types to avoid duplicates.
|
||||
llvm::DIType OCTy =
|
||||
DBuilder.createForwardDecl(llvm::dwarf::DW_TAG_structure_type,
|
||||
"objc_class", getOrCreateMainFile(),
|
||||
0);
|
||||
"objc_class", TheCU, getOrCreateMainFile(), 0);
|
||||
unsigned Size = CGM.getContext().getTypeSize(CGM.getContext().VoidPtrTy);
|
||||
|
||||
llvm::DIType ISATy = DBuilder.createPointerType(OCTy, Size);
|
||||
|
@ -382,7 +381,7 @@ llvm::DIType CGDebugInfo::CreateType(const BuiltinType *BT) {
|
|||
case BuiltinType::ObjCSel: {
|
||||
return
|
||||
DBuilder.createForwardDecl(llvm::dwarf::DW_TAG_structure_type,
|
||||
"objc_selector", getOrCreateMainFile(),
|
||||
"objc_selector", TheCU, getOrCreateMainFile(),
|
||||
0);
|
||||
}
|
||||
case BuiltinType::UChar:
|
||||
|
@ -514,7 +513,7 @@ llvm::DIType CGDebugInfo::createRecordFwdDecl(const RecordDecl *RD,
|
|||
llvm_unreachable("Unknown RecordDecl type!");
|
||||
|
||||
// Create the type.
|
||||
return DBuilder.createForwardDecl(Tag, RDName, DefUnit, Line);
|
||||
return DBuilder.createForwardDecl(Tag, RDName, Ctx, DefUnit, Line);
|
||||
}
|
||||
|
||||
// Walk up the context chain and create forward decls for record decls,
|
||||
|
@ -1287,7 +1286,7 @@ llvm::DIType CGDebugInfo::CreateType(const ObjCInterfaceType *Ty,
|
|||
if (!Def) {
|
||||
llvm::DIType FwdDecl =
|
||||
DBuilder.createForwardDecl(llvm::dwarf::DW_TAG_structure_type,
|
||||
ID->getName(), DefUnit, Line,
|
||||
ID->getName(), TheCU, DefUnit, Line,
|
||||
RuntimeLang);
|
||||
return FwdDecl;
|
||||
}
|
||||
|
|
|
@ -6,5 +6,5 @@ int main() {
|
|||
return 0;
|
||||
}
|
||||
|
||||
// CHECK: !14 = metadata !{i32 {{.*}}, i32 0, metadata !5, metadata !"localstatic", metadata !"localstatic", metadata !"", metadata !6, i32 5, metadata !9, i32 1, i32 1, i32* @main.localstatic} ; [ DW_TAG_variable ]
|
||||
// CHECK: !15 = metadata !{i32 {{.*}}, i32 0, null, metadata !"global", metadata !"global", metadata !"", metadata !6, i32 3, metadata !9, i32 0, i32 1, i32* @global} ; [ DW_TAG_variable ]
|
||||
// CHECK: metadata !{i32 {{.*}}, i32 0, metadata !5, metadata !"localstatic", metadata !"localstatic", metadata !"", metadata !6, i32 5, metadata !9, i32 1, i32 1, i32* @main.localstatic} ; [ DW_TAG_variable ]
|
||||
// CHECK: metadata !{i32 {{.*}}, i32 0, null, metadata !"global", metadata !"global", metadata !"", metadata !6, i32 3, metadata !9, i32 0, i32 1, i32* @global} ; [ DW_TAG_variable ]
|
||||
|
|
|
@ -12,5 +12,5 @@ void func(char c, char* d)
|
|||
|
||||
}
|
||||
|
||||
// CHECK: ret void, !dbg !19
|
||||
// CHECK: !19 = metadata !{i32 6,
|
||||
// CHECK: ret void, !dbg !17
|
||||
// CHECK: !17 = metadata !{i32 6,
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
// Check to make sure that we emit the block for the break so that we can count the line.
|
||||
// CHECK: sw.bb: ; preds = %entry
|
||||
// CHECK: br label %sw.epilog, !dbg !21
|
||||
// CHECK: br label %sw.epilog, !dbg !19
|
||||
|
||||
extern int atoi(const char *);
|
||||
|
||||
|
|
|
@ -23,8 +23,8 @@ int main(int argc, char **argv) {
|
|||
}
|
||||
|
||||
// FIXME: The numbers are truly awful.
|
||||
// CHECK: !18 = metadata !{i32 {{.*}}, i32 0, metadata !"", i32 0, i32 0, i64 64, i64 64, i64 0, i32 64, metadata !19} ; [ DW_TAG_pointer_type ]
|
||||
// CHECK: !19 = metadata !{i32 {{.*}}, null, metadata !"A", metadata !6, i32 8, i64 128, i64 64, i32 0, i32 0, null, metadata !20, i32 0, metadata !19, null} ; [ DW_TAG_class_type ]
|
||||
// CHECK: metadata !19, metadata !"A", metadata !"A", metadata !"", metadata !6, i32 12, metadata !45, i1 false, i1 false, i32 0, i32 0, null, i32 256, i1 false, null, null, i32 0, metadata !47, i32 12} ; [ DW_TAG_subprogram ]
|
||||
// CHECK: metadata !"", i32 0, i32 0, i64 0, i64 0, i64 0, i32 0, null, metadata !46, i32 0, i32 0} ; [ DW_TAG_subroutine_type ]
|
||||
// CHECK: !46 = metadata !{null, metadata !18, metadata !9, metadata !34}
|
||||
// CHECK: !16 = metadata !{i32 {{.*}}, i32 0, metadata !"", i32 0, i32 0, i64 64, i64 64, i64 0, i32 64, metadata !17} ; [ DW_TAG_pointer_type ]
|
||||
// CHECK: !17 = metadata !{i32 {{.*}}, null, metadata !"A", metadata !6, i32 8, i64 128, i64 64, i32 0, i32 0, null, metadata !18, i32 0, metadata !17, null} ; [ DW_TAG_class_type ]
|
||||
// CHECK: metadata !17, metadata !"A", metadata !"A", metadata !"", metadata !6, i32 12, metadata !43, i1 false, i1 false, i32 0, i32 0, null, i32 256, i1 false, null, null, i32 0, metadata !45, i32 12} ; [ DW_TAG_subprogram ]
|
||||
// CHECK: metadata !"", i32 0, i32 0, i64 0, i64 0, i64 0, i32 0, null, metadata !44, i32 0, i32 0} ; [ DW_TAG_subroutine_type ]
|
||||
// CHECK: !44 = metadata !{null, metadata !16, metadata !9, metadata !32}
|
||||
|
|
|
@ -19,8 +19,8 @@ int main(int argc, char** argv) {
|
|||
// Make sure we have two DW_TAG_class_types for baz and bar and no forward
|
||||
// references.
|
||||
// FIXME: These should be struct types to match the declaration.
|
||||
// CHECK: metadata !{i32 {{.*}}, null, metadata !"bar", metadata !6, i32 8, i64 128, i64 64, i32 0, i32 0, null, metadata !20, i32 0, null, null} ; [ DW_TAG_class_type ]
|
||||
// CHECK: metadata !{i32 {{.*}}, null, metadata !"baz", metadata !6, i32 3, i64 32, i64 32, i32 0, i32 0, null, metadata !23, i32 0, null, null} ; [ DW_TAG_class_type ]
|
||||
// CHECK-NOT: metadata !{i32 {{.*}}, null, metadata !"bar", metadata !6, i32 9, i64 0, i64 0, i32 0, i32 4, i32 0, null, i32 0, i32 0} ; [ DW_TAG_class_type ]
|
||||
// CHECK: metadata !{i32 {{.*}}, null, metadata !"bar", metadata !6, i32 8, i64 128, i64 64, i32 0, i32 0, null, metadata !18, i32 0, null, null} ; [ DW_TAG_class_type ]
|
||||
// CHECK: metadata !{i32 {{.*}}, null, metadata !"baz", metadata !6, i32 3, i64 32, i64 32, i32 0, i32 0, null, metadata !21, i32 0, null, null} ; [ DW_TAG_class_type ]
|
||||
// CHECK-NOT: metadata !{i32 {{.*}}, null, metadata !"bar", metadata !6, i32 8, i64 0, i64 0, i32 0, i32 4, i32 0, null, i32 0, i32 0} ; [ DW_TAG_class_type ]
|
||||
// CHECK-NOT: metadata !{i32 {{.*}}, null, metadata !"baz", metadata !6, i32 3, i64 0, i64 0, i32 0, i32 4, null, null, i32 0, null, null} ; [ DW_TAG_class_type ]
|
||||
|
||||
|
|
|
@ -4,4 +4,4 @@ void foo() {
|
|||
decltype(nullptr) t = 0;
|
||||
}
|
||||
|
||||
// CHECK: !13 = metadata !{i32 {{.*}}, null, metadata !"nullptr_t", null, i32 0, i64 0, i64 0, i64 0, i32 0, i32 0} ; [ DW_TAG_unspecified_type ]
|
||||
// CHECK: metadata !{i32 {{.*}}, null, metadata !"nullptr_t", null, i32 0, i64 0, i64 0, i64 0, i32 0, i32 0} ; [ DW_TAG_unspecified_type ]
|
||||
|
|
|
@ -7,4 +7,4 @@ namespace A {
|
|||
}
|
||||
|
||||
// Verify that a is present and mangled.
|
||||
// CHECK: metadata !{i32 786478, i32 0, metadata !6, metadata !"a", metadata !"a", metadata !"_ZN1AL1aEi", metadata !7, i32 4, metadata !8, i1 true, i1 true, i32 0, i32 0, null, i32 256, i1 false, i32 (i32)* @_ZN1AL1aEi, null, null, metadata !14, i32 4} ; [ DW_TAG_subprogram ]
|
||||
// CHECK: metadata !{i32 {{.*}}, i32 0, metadata !6, metadata !"a", metadata !"a", metadata !"_ZN1AL1aEi", metadata !7, i32 4, metadata !8, i1 true, i1 true, i32 0, i32 0, null, i32 256, i1 false, i32 (i32)* @_ZN1AL1aEi, null, null, metadata !1, i32 4} ; [ DW_TAG_subprogram ]
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// RUN: %clang_cc1 -emit-llvm -fblocks -g -triple x86_64-apple-darwin10 -fobjc-fragile-abi %s -o - | FileCheck %s
|
||||
extern void foo(void(^)(void));
|
||||
|
||||
// CHECK: metadata !{i32 786478, i32 0, metadata !27, metadata !"__destroy_helper_block_", metadata !"__destroy_helper_block_", metadata !"", metadata !27, i32 24, metadata !43, i1 true, i1 true, i32 0, i32 0, null, i32 0, i1 false, void (i8*)* @__destroy_helper_block_, null, null, metadata !45, i32 24} ; [ DW_TAG_subprogram ]
|
||||
// CHECK: metadata !{i32 786478, i32 0, metadata !27, metadata !"__destroy_helper_block_", metadata !"__destroy_helper_block_", metadata !"", metadata !27, i32 24, metadata !37, i1 true, i1 true, i32 0, i32 0, null, i32 0, i1 false, void (i8*)* @__destroy_helper_block_, null, null, metadata !5, i32 24} ; [ DW_TAG_subprogram ]
|
||||
|
||||
@interface NSObject {
|
||||
struct objc_object *isa;
|
||||
|
|
|
@ -31,4 +31,4 @@ int main(int argc, char *argv[]) {
|
|||
}
|
||||
|
||||
// CHECK: !7 = metadata !{i32 {{.*}}, metadata !"./foo.h"
|
||||
// CHECK: !31 = metadata !{i32 {{.*}}, i32 0, metadata !7, metadata !"-[Foo dict]", metadata !"-[Foo dict]", metadata !"", metadata !7, i32 8, metadata !32, i1 true, i1 true, i32 0, i32 0, null, i32 320, i1 false, %1* (%0*, i8*)* @"\01-[Foo dict]", null, null, metadata !34, i32 8} ; [ DW_TAG_subprogram ]
|
||||
// CHECK: !29 = metadata !{i32 {{.*}}, i32 0, metadata !7, metadata !"-[Foo dict]", metadata !"-[Foo dict]", metadata !"", metadata !7, i32 8, metadata !30, i1 true, i1 true, i32 0, i32 0, null, i32 320, i1 false, %1* (%0*, i8*)* @"\01-[Foo dict]", null, null, metadata !1, i32 8} ; [ DW_TAG_subprogram ]
|
||||
|
|
Загрузка…
Ссылка в новой задаче