blob: dfc8be53d1f3945c64462e6886eadcf0d50ad646 [file] [log] [blame]
Adrian Prantl5c8bd882015-09-11 17:23:08 +00001// RUN: rm -rf %t
2// Test that only forward declarations are emitted for types dfined in modules.
3
4// Modules:
Adrian Prantle1c2ad82016-01-22 18:46:40 +00005// RUN: %clang_cc1 -x objective-c++ -std=c++11 -debug-info-kind=limited \
6// RUN: -dwarf-ext-refs -fmodules \
Adrian Prantl5c8bd882015-09-11 17:23:08 +00007// RUN: -fmodule-format=obj -fimplicit-module-maps -DMODULES \
Reid Kleckner854a2b72015-09-11 17:50:14 +00008// RUN: -triple %itanium_abi_triple \
Adrian Prantl5c8bd882015-09-11 17:23:08 +00009// RUN: -fmodules-cache-path=%t %s -I %S/Inputs -I %t -emit-llvm -o %t-mod.ll
10// RUN: cat %t-mod.ll | FileCheck %s
11
12// PCH:
13// RUN: %clang_cc1 -x c++ -std=c++11 -fmodule-format=obj -emit-pch -I%S/Inputs \
Reid Kleckner854a2b72015-09-11 17:50:14 +000014// RUN: -triple %itanium_abi_triple \
Adrian Prantl5c8bd882015-09-11 17:23:08 +000015// RUN: -o %t.pch %S/Inputs/DebugCXX.h
Adrian Prantle1c2ad82016-01-22 18:46:40 +000016// RUN: %clang_cc1 -std=c++11 -debug-info-kind=limited \
17// RUN: -dwarf-ext-refs -fmodule-format=obj \
Reid Kleckner854a2b72015-09-11 17:50:14 +000018// RUN: -triple %itanium_abi_triple \
Adrian Prantl5c8bd882015-09-11 17:23:08 +000019// RUN: -include-pch %t.pch %s -emit-llvm -o %t-pch.ll %s
20// RUN: cat %t-pch.ll | FileCheck %s
Adrian Prantlae108c42016-01-22 18:46:45 +000021// RUN: cat %t-pch.ll | FileCheck %s --check-prefix=CHECK-PCH
Adrian Prantle1c2ad82016-01-22 18:46:40 +000022
Adrian Prantl5c8bd882015-09-11 17:23:08 +000023#ifdef MODULES
24@import DebugCXX;
25#endif
26
27using DebugCXX::Struct;
28
29Struct s;
30DebugCXX::Enum e;
31DebugCXX::Template<long> implicitTemplate;
32DebugCXX::Template<int> explicitTemplate;
33DebugCXX::FloatInstatiation typedefTemplate;
34int Struct::static_member = -1;
35enum {
36 e3 = -1
37} conflicting_uid = e3;
38auto anon_enum = DebugCXX::e2;
39char _anchor = anon_enum + conflicting_uid;
40
Adrian Prantle5238d22016-01-19 18:02:47 +000041TypedefUnion tdu;
42TypedefEnum tde;
43TypedefStruct tds;
44
Adrian Prantl8f55b662016-01-20 01:29:34 +000045InAnonymousNamespace anon;
46
Adrian Prantlcd975012016-01-19 23:42:44 +000047void foo() {
Adrian Prantl8f55b662016-01-20 01:29:34 +000048 anon.i = GlobalStruct.i = GlobalUnion.i = GlobalEnum;
Adrian Prantlcd975012016-01-19 23:42:44 +000049}
50
Adrian Prantl5c8bd882015-09-11 17:23:08 +000051// CHECK: ![[NS:.*]] = !DINamespace(name: "DebugCXX", scope: ![[MOD:[0-9]+]],
52// CHECK: ![[MOD]] = !DIModule(scope: null, name: {{.*}}DebugCXX
53
54// CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "Struct",
55// CHECK-SAME: scope: ![[NS]],
56// CHECK-SAME: flags: DIFlagFwdDecl,
57// CHECK-SAME: identifier: "_ZTSN8DebugCXX6StructE")
58
59// CHECK: !DICompositeType(tag: DW_TAG_enumeration_type, name: "Enum",
60// CHECK-SAME: scope: ![[NS]],
61// CHECK-SAME: flags: DIFlagFwdDecl,
62// CHECK-SAME: identifier: "_ZTSN8DebugCXX4EnumE")
63
64// CHECK: !DICompositeType(tag: DW_TAG_class_type,
65
66// CHECK: !DICompositeType(tag: DW_TAG_class_type,
67// CHECK-SAME: name: "Template<int, DebugCXX::traits<int> >",
68// CHECK-SAME: scope: ![[NS]],
69// CHECK-SAME: flags: DIFlagFwdDecl,
70// CHECK-SAME: identifier: "_ZTSN8DebugCXX8TemplateIiNS_6traitsIiEEEE")
71
72// CHECK: !DICompositeType(tag: DW_TAG_class_type,
73// CHECK-SAME: name: "Template<float, DebugCXX::traits<float> >",
74// CHECK-SAME: scope: ![[NS]],
75// CHECK-SAME: flags: DIFlagFwdDecl,
76// CHECK-SAME: identifier: "_ZTSN8DebugCXX8TemplateIfNS_6traitsIfEEEE")
77
Adrian Prantle5238d22016-01-19 18:02:47 +000078// CHECK: !DICompositeType(tag: DW_TAG_union_type,
79// CHECK-SAME: flags: DIFlagFwdDecl, identifier: "_ZTS12TypedefUnion")
80// CHECK: !DICompositeType(tag: DW_TAG_enumeration_type,
81// CHECK-SAME: flags: DIFlagFwdDecl, identifier: "_ZTS11TypedefEnum")
82// CHECK: !DICompositeType(tag: DW_TAG_structure_type,
83// CHECK-SAME: flags: DIFlagFwdDecl, identifier: "_ZTS13TypedefStruct")
84
Adrian Prantl5c8bd882015-09-11 17:23:08 +000085// CHECK: !DIDerivedType(tag: DW_TAG_member, name: "static_member",
86// CHECK-SAME: scope: !"_ZTSN8DebugCXX6StructE"
87
88// CHECK: !DIGlobalVariable(name: "anon_enum", {{.*}}, type: ![[ANON_ENUM:[0-9]+]]
89// CHECK: !DICompositeType(tag: DW_TAG_enumeration_type, scope: ![[NS]],
90// CHECK-SAME: line: 16
91
Adrian Prantl43e00812016-01-19 23:42:53 +000092// CHECK: !DIGlobalVariable(name: "GlobalUnion",
93// CHECK-SAME: type: ![[GLOBAL_UNION:[0-9]+]]
94// CHECK: ![[GLOBAL_UNION]] = !DICompositeType(tag: DW_TAG_union_type,
95// CHECK-SAME: elements: !{{[0-9]+}})
96// CHECK: !DIGlobalVariable(name: "GlobalStruct",
97// CHECK-SAME: type: ![[GLOBAL_STRUCT:[0-9]+]]
98// CHECK: ![[GLOBAL_STRUCT]] = !DICompositeType(tag: DW_TAG_structure_type,
99// CHECK-SAME: elements: !{{[0-9]+}})
100
Adrian Prantl8f55b662016-01-20 01:29:34 +0000101// CHECK: !DIGlobalVariable(name: "anon",
102// CHECK-SAME: type: ![[GLOBAL_ANON:[0-9]+]]
103// CHECK: ![[GLOBAL_ANON]] = !DICompositeType(tag: DW_TAG_structure_type,
104// CHECK-SAME: name: "InAnonymousNamespace", {{.*}}DIFlagFwdDecl)
105
106
Adrian Prantle1c2ad82016-01-22 18:46:40 +0000107// CHECK: !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !0, entity: !"_ZTSN8DebugCXX6StructE", line: 27)
Adrian Prantlc96da8f2016-01-22 17:43:43 +0000108
109// CHECK: !DICompileUnit(
110// CHECK-SAME: splitDebugFilename:
111// CHECK-SAME: dwoId:
Adrian Prantlae108c42016-01-22 18:46:45 +0000112// CHECK-PCH: dwoId: 18446744073709551614