xref: /aosp_15_r20/external/clang/test/Modules/ExtDebugInfo.m (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li// RUN: rm -rf %t
2*67e74705SXin Li// Test that only forward declarations are emitted for types defined in modules.
3*67e74705SXin Li
4*67e74705SXin Li// Modules:
5*67e74705SXin Li// RUN: %clang_cc1 -x objective-c -debug-info-kind=limited -dwarf-ext-refs -fmodules \
6*67e74705SXin Li// RUN:     -fmodule-format=obj -fimplicit-module-maps -DMODULES \
7*67e74705SXin Li// RUN:     -fmodules-cache-path=%t %s -I %S/Inputs -I %t -emit-llvm -o %t-mod.ll
8*67e74705SXin Li// RUN: cat %t-mod.ll |  FileCheck %s
9*67e74705SXin Li
10*67e74705SXin Li// PCH:
11*67e74705SXin Li// RUN: %clang_cc1 -x objective-c -fmodule-format=obj -emit-pch -I%S/Inputs \
12*67e74705SXin Li// RUN:     -o %t.pch %S/Inputs/DebugObjC.h
13*67e74705SXin Li// RUN: %clang_cc1 -x objective-c -debug-info-kind=limited -dwarf-ext-refs -fmodule-format=obj \
14*67e74705SXin Li// RUN:     -include-pch %t.pch %s -emit-llvm -o %t-pch.ll %s
15*67e74705SXin Li// RUN: cat %t-pch.ll |  FileCheck %s
16*67e74705SXin Li
17*67e74705SXin Li#ifdef MODULES
18*67e74705SXin Li@import DebugObjC;
19*67e74705SXin Li#endif
20*67e74705SXin Li
21*67e74705SXin Li@implementation ObjCClassWithPrivateIVars {
22*67e74705SXin Li  int hidden_ivar;
23*67e74705SXin Li}
24*67e74705SXin Li@end
25*67e74705SXin Li
26*67e74705SXin LiTypedefUnion tdu;
27*67e74705SXin LiTypedefEnum tde;
28*67e74705SXin LiTypedefStruct tds;
29*67e74705SXin Li
30*67e74705SXin Liint foo(ObjCClass *c) {
31*67e74705SXin Li  InnerEnum e = e0;
32*67e74705SXin Li  GlobalStruct.i = GlobalUnion.i = GlobalEnum;
33*67e74705SXin Li  [c instanceMethodWithInt: 0];
34*67e74705SXin Li  return [c property];
35*67e74705SXin Li}
36*67e74705SXin Li
37*67e74705SXin Li// CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "ObjCClassWithPrivateIVars",
38*67e74705SXin Li// CHECK-SAME:             flags: DIFlagObjcClassComplete
39*67e74705SXin Li
40*67e74705SXin Li// CHECK: ![[MOD:.*]] = !DIModule(scope: null, name: "DebugObjC
41*67e74705SXin Li
42*67e74705SXin Li// CHECK: !DIDerivedType(tag: DW_TAG_member, name: "hidden_ivar",
43*67e74705SXin Li// CHECK-SAME:           flags: DIFlagPrivate)
44*67e74705SXin Li
45*67e74705SXin Li// CHECK: !DIGlobalVariable(name: "GlobalUnion",
46*67e74705SXin Li// CHECK-SAME:              type: ![[GLOBAL_UNION:[0-9]+]]
47*67e74705SXin Li// CHECK: ![[GLOBAL_UNION]] = distinct !DICompositeType(tag: DW_TAG_union_type,
48*67e74705SXin Li// CHECK-SAME:                elements: !{{[0-9]+}})
49*67e74705SXin Li
50*67e74705SXin Li// CHECK: !DIGlobalVariable(name: "GlobalStruct",
51*67e74705SXin Li// CHECK-SAME:              type: ![[GLOBAL_STRUCT:[0-9]+]]
52*67e74705SXin Li// CHECK: ![[GLOBAL_STRUCT]] = distinct !DICompositeType(tag: DW_TAG_structure_type,
53*67e74705SXin Li// CHECK-SAME:                elements: !{{[0-9]+}})
54*67e74705SXin Li
55*67e74705SXin Li// CHECK: !DIDerivedType(tag: DW_TAG_typedef, name: "TypedefUnion",
56*67e74705SXin Li// CHECK-SAME:           baseType: ![[TD_UNION:.*]])
57*67e74705SXin Li// CHECK: ![[TD_UNION]] = !DICompositeType(tag: DW_TAG_union_type,
58*67e74705SXin Li// CHECK-SAME:             flags: DIFlagFwdDecl)
59*67e74705SXin Li
60*67e74705SXin Li// CHECK: !DIDerivedType(tag: DW_TAG_typedef, name: "TypedefEnum",
61*67e74705SXin Li// CHECK-SAME:           baseType: ![[TD_ENUM:.*]])
62*67e74705SXin Li// CHECK: ![[TD_ENUM]] = !DICompositeType(tag: DW_TAG_enumeration_type,
63*67e74705SXin Li// CHECK-SAME:             flags: DIFlagFwdDecl)
64*67e74705SXin Li
65*67e74705SXin Li// CHECK: !DIDerivedType(tag: DW_TAG_typedef, name: "TypedefStruct",
66*67e74705SXin Li// CHECK-SAME:           baseType: ![[TD_STRUCT:.*]])
67*67e74705SXin Li// CHECK: ![[TD_STRUCT]] = !DICompositeType(tag: DW_TAG_structure_type,
68*67e74705SXin Li// CHECK-SAME:             flags: DIFlagFwdDecl)
69*67e74705SXin Li
70*67e74705SXin Li// CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "ObjCClass",
71*67e74705SXin Li// CHECK-SAME:             scope: ![[MOD]],
72*67e74705SXin Li// CHECK-SAME:             flags: DIFlagFwdDecl)
73*67e74705SXin Li
74*67e74705SXin Li// CHECK-NOT: !DICompositeType(tag: DW_TAG_structure_type,
75*67e74705SXin Li// CHECK: !DICompositeType(tag: DW_TAG_enumeration_type,
76*67e74705SXin Li// CHECK-SAME:             scope: ![[MOD]],
77*67e74705SXin Li// CHECK-SAME:             flags: DIFlagFwdDecl)
78