summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdrian Prantl <aprantl@apple.com>2016-01-19 23:42:56 +0000
committerAdrian Prantl <aprantl@apple.com>2016-01-19 23:42:56 +0000
commit8c0e50519b4efd161f28c8ef7bb2ee7bbdf6041e (patch)
treedabf2150db841f33dcc9b22ca48b3c3a7260737a
parent43e008174072301cca77524027ddb74d1d8b604a (diff)
downloadbcm5719-llvm-8c0e50519b4efd161f28c8ef7bb2ee7bbdf6041e.tar.gz
bcm5719-llvm-8c0e50519b4efd161f28c8ef7bb2ee7bbdf6041e.zip
Module Debugging: Add Objective-C testcases for anonymous tag decls. (NFC)
rdar://problem/24199640 llvm-svn: 258252
-rw-r--r--clang/test/Modules/ExtDebugInfo.m28
-rw-r--r--clang/test/Modules/Inputs/DebugObjC.h14
-rw-r--r--clang/test/Modules/ModuleDebugInfo.m33
3 files changed, 75 insertions, 0 deletions
diff --git a/clang/test/Modules/ExtDebugInfo.m b/clang/test/Modules/ExtDebugInfo.m
index 8e063f09048..416f2813cec 100644
--- a/clang/test/Modules/ExtDebugInfo.m
+++ b/clang/test/Modules/ExtDebugInfo.m
@@ -18,8 +18,13 @@
@import DebugObjC;
#endif
+TypedefUnion tdu;
+TypedefEnum tde;
+TypedefStruct tds;
+
int foo(ObjCClass *c) {
InnerEnum e = e0;
+ GlobalStruct.i = GlobalUnion.i = GlobalEnum;
[c instanceMethodWithInt: 0];
return [c property];
}
@@ -30,6 +35,29 @@ int foo(ObjCClass *c) {
// CHECK-SAME: flags: DIFlagFwdDecl)
// CHECK-NOT: !DICompositeType(tag: DW_TAG_structure_type,
// CHECK: ![[MOD]] = !DIModule(scope: null, name: {{.*}}DebugObjC
+
+// CHECK: !DIGlobalVariable(name: "GlobalUnion",
+// CHECK-SAME: type: ![[GLOBAL_UNION:[0-9]+]]
+// CHECK: ![[GLOBAL_UNION]] = !DICompositeType(tag: DW_TAG_union_type,
+// CHECK-SAME: elements: !{{[0-9]+}})
+// CHECK: !DIGlobalVariable(name: "GlobalStruct",
+// CHECK-SAME: type: ![[GLOBAL_STRUCT:[0-9]+]]
+// CHECK: ![[GLOBAL_STRUCT]] = !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: !DIDerivedType(tag: DW_TAG_typedef, name: "TypedefEnum",
+// CHECK-SAME: baseType: ![[TD_ENUM:.*]])
+// CHECK: ![[TD_ENUM]] = !DICompositeType(tag: DW_TAG_enumeration_type,
+// CHECK-SAME: flags: DIFlagFwdDecl)
+// CHECK: !DIDerivedType(tag: DW_TAG_typedef, name: "TypedefStruct",
+// CHECK-SAME: baseType: ![[TD_STRUCT:.*]])
+// CHECK: ![[TD_STRUCT]] = !DICompositeType(tag: DW_TAG_structure_type,
+// CHECK-SAME: flags: DIFlagFwdDecl)
+
// CHECK-NOT: !DICompositeType(tag: DW_TAG_structure_type,
// CHECK: !DICompositeType(tag: DW_TAG_enumeration_type,
// CHECK-SAME: scope: ![[MOD]],
diff --git a/clang/test/Modules/Inputs/DebugObjC.h b/clang/test/Modules/Inputs/DebugObjC.h
index bde463abfd6..eb7a9f9da9f 100644
--- a/clang/test/Modules/Inputs/DebugObjC.h
+++ b/clang/test/Modules/Inputs/DebugObjC.h
@@ -22,3 +22,17 @@ typedef enum {
+ (InnerEnum)protocolMethod;
@end
+
+struct FwdDeclared;
+struct FwdDeclared {
+ int i;
+};
+struct PureForwardDecl;
+
+typedef union { int i; } TypedefUnion;
+typedef enum { e1 = 1 } TypedefEnum;
+typedef struct { int i; } TypedefStruct;
+
+union { int i; } GlobalUnion;
+struct { int i; } GlobalStruct;
+enum { e2 = 2 } GlobalEnum;
diff --git a/clang/test/Modules/ModuleDebugInfo.m b/clang/test/Modules/ModuleDebugInfo.m
index 0974f38cc22..cba4063b1de 100644
--- a/clang/test/Modules/ModuleDebugInfo.m
+++ b/clang/test/Modules/ModuleDebugInfo.m
@@ -38,14 +38,47 @@
// MODULE-CHECK: !DICompositeType(tag: DW_TAG_enumeration_type,
// MODULE-CHECK-SAME: scope: ![[MODULE:[0-9]+]],
// MODULE-CHECK: ![[MODULE]] = !DIModule(scope: null, name: "DebugObjC"
+
+// MODULE-CHECK: ![[TD_ENUM:.*]] = !DICompositeType(tag: DW_TAG_enumeration_type,
+// MODULE-CHECK-SAME-NOT: name:
+// MODULE-CHECK-SAME: elements:
+
// MODULE-CHECK: !DICompositeType(tag: DW_TAG_structure_type,
// MODULE-CHECK-SAME: name: "FwdDecl",
// MODULE-CHECK-SAME: scope: ![[MODULE]],
// MODULE-CHECK: !DICompositeType(tag: DW_TAG_structure_type,
// MODULE-CHECK-SAME: name: "ObjCClass",
// MODULE-CHECK-SAME: scope: ![[MODULE]],
+
+// MODULE-CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "FwdDeclared"
+// MODULE-CHECK-SAME: elements:
+
+// MODULE-CHECK: ![[TD_UNION:.*]] = !DICompositeType(tag: DW_TAG_union_type,
+// MODULE-CHECK-SAME-NOT: name:
+// MODULE-CHECK-SAME: elements:
+
+// MODULE-CHECK: !DIDerivedType(tag: DW_TAG_typedef, name: "TypedefUnion",
+// MODULE-CHECK-SAME: baseType: ![[TD_UNION]])
+
+// MODULE-CHECK: !DIDerivedType(tag: DW_TAG_typedef, name: "TypedefEnum",
+// MODULE-CHECK-SAME: baseType: ![[TD_ENUM:.*]])
+
+// MODULE-CHECK: ![[TD_STRUCT:.*]] = !DICompositeType(tag: DW_TAG_structure_type,
+// MODULE-CHECK-SAME-NOT: name:
+// MODULE-CHECK-SAME: elements:
+// MODULE-CHECK: !DIDerivedType(tag: DW_TAG_typedef, name: "TypedefStruct",
+// MODULE-CHECK-SAME: baseType: ![[TD_STRUCT]])
+
+// MODULE-CHECK: !DICompositeType(tag: DW_TAG_union_type,
+// MODULE-CHECK-SAME-NOT: name:
+
+// MODULE-CHECK: !DICompositeType(tag: DW_TAG_structure_type,
+// MODULE-CHECK-SAME-NOT: name:
+
// MODULE-CHECK: !DISubprogram(name: "+[ObjCClass classMethod]",
// MODULE-CHECK-SAME: scope: ![[MODULE]],
// The forward declaration should not be in the module scope.
// MODULE-CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "OpaqueData", file
+
+// MODULE-CHECK-NEG-NOT: !DICompositeType(tag: DW_TAG_structure_type, name: "PureForwardDecl"
OpenPOWER on IntegriCloud