1// UNSUPPORTED: target={{.*}}-zos{{.*}}, target={{.*}}-aix{{.*}} 2// Test that debug info is emitted for an Objective-C module and 3// a precompiled header. 4 5// REQUIRES: asserts 6 7// Modules: 8// RUN: rm -rf %t 9// RUN: %clang_cc1 -x objective-c -fmodules -fmodule-format=obj \ 10// RUN: -fimplicit-module-maps -DMODULES -fmodules-cache-path=%t %s \ 11// RUN: -I %S/Inputs -I %t -emit-llvm -o %t.ll \ 12// RUN: -mllvm -debug-only=pchcontainer &>%t-mod.ll 13// RUN: cat %t-mod.ll | FileCheck %s 14// RUN: cat %t-mod.ll | FileCheck %s --check-prefix=CHECK2 15 16// PCH: 17// RUN: %clang_cc1 -x objective-c -emit-pch -fmodule-format=obj -I %S/Inputs \ 18// RUN: -o %t.pch %S/Inputs/DebugObjC.h \ 19// RUN: -mllvm -debug-only=pchcontainer &>%t-pch.ll 20// RUN: cat %t-pch.ll | FileCheck %s 21// RUN: cat %t-pch.ll | FileCheck %s --check-prefix=CHECK2 22 23#ifdef MODULES 24@import DebugObjC; 25#endif 26 27// CHECK: distinct !DICompileUnit(language: DW_LANG_ObjC, file: ![[FILE:[0-9]+]], 28// CHECK-SAME: isOptimized: false 29 30// CHECK: ![[FILE]] = !DIFile(filename: "{{DebugObjC|.*DebugObjC.h}}" 31 32// CHECK: !DICompositeType(tag: DW_TAG_enumeration_type, 33// CHECK-SAME: scope: ![[MODULE:[0-9]+]], 34// CHECK: ![[MODULE]] = !DIModule(scope: null, name: "DebugObjC 35 36// CHECK: ![[TD_ENUM:.*]] = !DICompositeType(tag: DW_TAG_enumeration_type, 37// CHECK-NOT: name: 38// CHECK-SAME: elements: 39 40// CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "FwdDecl", 41// CHECK-SAME: scope: ![[MODULE]], 42// CHECK-SAME: runtimeLang: DW_LANG_ObjC 43 44// CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "ObjCClass", 45// CHECK-SAME: scope: ![[MODULE]], 46// CHECK-SAME: elements 47 48// CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "ObjCClassWithPrivateIVars", 49// CHECK-SAME: scope: ![[MODULE]], 50// CHECK-SAME: elements 51 52// CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "FwdDeclared" 53// CHECK-SAME: elements: 54 55// CHECK: ![[TD_UNION:.*]] = distinct !DICompositeType(tag: DW_TAG_union_type, 56// CHECK-NOT: name: 57// CHECK-SAME: elements: 58 59// CHECK: !DIDerivedType(tag: DW_TAG_typedef, name: "TypedefUnion", 60// CHECK-SAME: baseType: ![[TD_UNION]]) 61 62// CHECK: !DIDerivedType(tag: DW_TAG_typedef, name: "TypedefEnum", 63// CHECK-SAME: baseType: ![[TD_ENUM:.*]]) 64 65// CHECK: ![[TD_STRUCT:.*]] = distinct !DICompositeType(tag: DW_TAG_structure_type, 66// CHECK-NOT: name: 67// CHECK-SAME: elements: 68// CHECK: !DIDerivedType(tag: DW_TAG_typedef, name: "TypedefStruct", 69// CHECK-SAME: baseType: ![[TD_STRUCT]]) 70 71// CHECK: !DICompositeType(tag: DW_TAG_union_type, 72// CHECK-NOT: name: 73// CHECK-SAME: ) 74 75// CHECK: !DICompositeType(tag: DW_TAG_structure_type, 76// CHECK-NOT: name: 77// CHECK-SAME: ) 78 79// CHECK-NEG-NOT: !DICompositeType(tag: DW_TAG_structure_type, name: "PureForwardDecl" 80 81// The output order is sublty different for module vs. pch, 82// so these are checked separately: 83// 84// CHECK2: !DICompositeType(tag: DW_TAG_structure_type, name: "FwdDecl", 85// CHECK2: !DICompositeType(tag: DW_TAG_structure_type, name: "ObjCClass", 86// CHECK2: !DIObjCProperty(name: "property", 87// CHECK2: !DIDerivedType(tag: DW_TAG_member, name: "ivar" 88// CHECK2: !DIDerivedType(tag: DW_TAG_typedef, name: "InnerEnum" 89