blob: 6489224774d2fa5c1bcdec7ccb2e9dd06068454a [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
Duncan P. N. Exon Smith383f8412016-04-23 21:08:27 +000051// CHECK: ![[STRUCT:[0-9]+]] = !DICompositeType(tag: DW_TAG_structure_type, name: "Struct",
52// CHECK-SAME: scope: ![[NS:[0-9]+]],
Adrian Prantl5c8bd882015-09-11 17:23:08 +000053// CHECK-SAME: flags: DIFlagFwdDecl,
54// CHECK-SAME: identifier: "_ZTSN8DebugCXX6StructE")
55
Duncan P. N. Exon Smith383f8412016-04-23 21:08:27 +000056// CHECK: ![[NS]] = !DINamespace(name: "DebugCXX", scope: ![[MOD:[0-9]+]],
57// CHECK: ![[MOD]] = !DIModule(scope: null, name: {{.*}}DebugCXX
58
Adrian Prantl5c8bd882015-09-11 17:23:08 +000059// 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
Duncan P. N. Exon Smith383f8412016-04-23 21:08:27 +000064// CHECK: !DICompositeType(tag: DW_TAG_class_type, name: "Template<int, DebugCXX::traits<int> >",
Adrian Prantl5c8bd882015-09-11 17:23:08 +000065// CHECK-SAME: scope: ![[NS]],
66// CHECK-SAME: flags: DIFlagFwdDecl,
67// CHECK-SAME: identifier: "_ZTSN8DebugCXX8TemplateIiNS_6traitsIiEEEE")
68
Duncan P. N. Exon Smith383f8412016-04-23 21:08:27 +000069// CHECK: !DICompositeType(tag: DW_TAG_class_type, name: "Template<float, DebugCXX::traits<float> >",
Adrian Prantl5c8bd882015-09-11 17:23:08 +000070// CHECK-SAME: scope: ![[NS]],
71// CHECK-SAME: flags: DIFlagFwdDecl,
72// CHECK-SAME: identifier: "_ZTSN8DebugCXX8TemplateIfNS_6traitsIfEEEE")
73
Duncan P. N. Exon Smith383f8412016-04-23 21:08:27 +000074// CHECK: !DIDerivedType(tag: DW_TAG_member, name: "static_member",
75// CHECK-SAME: scope: ![[STRUCT]]
76
Adrian Prantle5238d22016-01-19 18:02:47 +000077// CHECK: !DICompositeType(tag: DW_TAG_union_type,
78// CHECK-SAME: flags: DIFlagFwdDecl, identifier: "_ZTS12TypedefUnion")
79// CHECK: !DICompositeType(tag: DW_TAG_enumeration_type,
80// CHECK-SAME: flags: DIFlagFwdDecl, identifier: "_ZTS11TypedefEnum")
81// CHECK: !DICompositeType(tag: DW_TAG_structure_type,
82// CHECK-SAME: flags: DIFlagFwdDecl, identifier: "_ZTS13TypedefStruct")
83
Adrian Prantl5c8bd882015-09-11 17:23:08 +000084// CHECK: !DIGlobalVariable(name: "anon_enum", {{.*}}, type: ![[ANON_ENUM:[0-9]+]]
85// CHECK: !DICompositeType(tag: DW_TAG_enumeration_type, scope: ![[NS]],
86// CHECK-SAME: line: 16
87
Adrian Prantl43e00812016-01-19 23:42:53 +000088// CHECK: !DIGlobalVariable(name: "GlobalUnion",
89// CHECK-SAME: type: ![[GLOBAL_UNION:[0-9]+]]
Duncan P. N. Exon Smithf9521b02016-04-17 07:45:08 +000090// CHECK: ![[GLOBAL_UNION]] = distinct !DICompositeType(tag: DW_TAG_union_type,
Adrian Prantl43e00812016-01-19 23:42:53 +000091// CHECK-SAME: elements: !{{[0-9]+}})
92// CHECK: !DIGlobalVariable(name: "GlobalStruct",
93// CHECK-SAME: type: ![[GLOBAL_STRUCT:[0-9]+]]
Duncan P. N. Exon Smithf9521b02016-04-17 07:45:08 +000094// CHECK: ![[GLOBAL_STRUCT]] = distinct !DICompositeType(tag: DW_TAG_structure_type,
Adrian Prantl43e00812016-01-19 23:42:53 +000095// CHECK-SAME: elements: !{{[0-9]+}})
96
Adrian Prantl8f55b662016-01-20 01:29:34 +000097// CHECK: !DIGlobalVariable(name: "anon",
98// CHECK-SAME: type: ![[GLOBAL_ANON:[0-9]+]]
99// CHECK: ![[GLOBAL_ANON]] = !DICompositeType(tag: DW_TAG_structure_type,
100// CHECK-SAME: name: "InAnonymousNamespace", {{.*}}DIFlagFwdDecl)
101
102
Duncan P. N. Exon Smith383f8412016-04-23 21:08:27 +0000103// CHECK: !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !0, entity: ![[STRUCT]], line: 27)
Adrian Prantlc96da8f2016-01-22 17:43:43 +0000104
105// CHECK: !DICompileUnit(
106// CHECK-SAME: splitDebugFilename:
107// CHECK-SAME: dwoId:
Adrian Prantld4e73e72016-01-22 19:14:24 +0000108// CHECK-PCH: !DICompileUnit({{.*}}splitDebugFilename:
109// CHECK-PCH: dwoId: 18446744073709551614