89 lines · plain
1// UNSUPPORTED: target={{.*}}-zos{{.*}}, target={{.*}}-aix{{.*}}2// Test that debug info is emitted for an Objective-C module and3// a precompiled header.4 5// REQUIRES: asserts6 7// Modules:8// RUN: rm -rf %t9// 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.ll13// RUN: cat %t-mod.ll | FileCheck %s14// RUN: cat %t-mod.ll | FileCheck %s --check-prefix=CHECK215 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.ll20// RUN: cat %t-pch.ll | FileCheck %s21// RUN: cat %t-pch.ll | FileCheck %s --check-prefix=CHECK222 23#ifdef MODULES24@import DebugObjC;25#endif26 27// CHECK: distinct !DICompileUnit(language: DW_LANG_ObjC, file: ![[FILE:[0-9]+]],28// CHECK-SAME: isOptimized: false29 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: "DebugObjC35 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_ObjC43 44// CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "ObjCClass",45// CHECK-SAME: scope: ![[MODULE]],46// CHECK-SAME: elements47 48// CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "ObjCClassWithPrivateIVars",49// CHECK-SAME: scope: ![[MODULE]],50// CHECK-SAME: elements51 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