1*1ff1bcabSJake Egan// UNSUPPORTED: -zos, -aix 2748a6cd1SAdrian Prantl// Test that debug info is emitted for an Objective-C module and 3748a6cd1SAdrian Prantl// a precompiled header. 4748a6cd1SAdrian Prantl 52e1538f2SReid Kleckner// REQUIRES: asserts 6748a6cd1SAdrian Prantl 7748a6cd1SAdrian Prantl// Modules: 8748a6cd1SAdrian Prantl// RUN: rm -rf %t 9992d820eSAdrian Prantl// RUN: %clang_cc1 -x objective-c -fmodules -fmodule-format=obj \ 10992d820eSAdrian Prantl// RUN: -fimplicit-module-maps -DMODULES -fmodules-cache-path=%t %s \ 11992d820eSAdrian Prantl// RUN: -I %S/Inputs -I %t -emit-llvm -o %t.ll \ 12992d820eSAdrian Prantl// RUN: -mllvm -debug-only=pchcontainer &>%t-mod.ll 13748a6cd1SAdrian Prantl// RUN: cat %t-mod.ll | FileCheck %s 14aa5d08d0SAdrian Prantl// RUN: cat %t-mod.ll | FileCheck %s --check-prefix=CHECK2 15748a6cd1SAdrian Prantl 16748a6cd1SAdrian Prantl// PCH: 17992d820eSAdrian Prantl// RUN: %clang_cc1 -x objective-c -emit-pch -fmodule-format=obj -I %S/Inputs \ 18992d820eSAdrian Prantl// RUN: -o %t.pch %S/Inputs/DebugObjC.h \ 19992d820eSAdrian Prantl// RUN: -mllvm -debug-only=pchcontainer &>%t-pch.ll 20748a6cd1SAdrian Prantl// RUN: cat %t-pch.ll | FileCheck %s 21aa5d08d0SAdrian Prantl// RUN: cat %t-pch.ll | FileCheck %s --check-prefix=CHECK2 22748a6cd1SAdrian Prantl 23748a6cd1SAdrian Prantl#ifdef MODULES 24748a6cd1SAdrian Prantl@import DebugObjC; 25748a6cd1SAdrian Prantl#endif 26748a6cd1SAdrian Prantl 279a1a1aa2SAdrian Prantl// CHECK: distinct !DICompileUnit(language: DW_LANG_ObjC, file: ![[FILE:[0-9]+]], 289a1a1aa2SAdrian Prantl// CHECK-SAME: isOptimized: false 299a1a1aa2SAdrian Prantl 309a1a1aa2SAdrian Prantl// CHECK: ![[FILE]] = !DIFile(filename: "{{DebugObjC|.*DebugObjC.h}}" 31aa5d08d0SAdrian Prantl 32aa5d08d0SAdrian Prantl// CHECK: !DICompositeType(tag: DW_TAG_enumeration_type, 33aa5d08d0SAdrian Prantl// CHECK-SAME: scope: ![[MODULE:[0-9]+]], 343a2d4947SAdrian Prantl// CHECK: ![[MODULE]] = !DIModule(scope: null, name: "DebugObjC 35aa5d08d0SAdrian Prantl 36aa5d08d0SAdrian Prantl// CHECK: ![[TD_ENUM:.*]] = !DICompositeType(tag: DW_TAG_enumeration_type, 37ae06ca0cSJustin Lebar// CHECK-NOT: name: 38aa5d08d0SAdrian Prantl// CHECK-SAME: elements: 39aa5d08d0SAdrian Prantl 4040a3fcb0SDjordje Todorovic// CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "FwdDecl", 41aa5d08d0SAdrian Prantl// CHECK-SAME: scope: ![[MODULE]], 42e76bda54SAdrian Prantl 43e76bda54SAdrian Prantl// CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "ObjCClass", 44e76bda54SAdrian Prantl// CHECK-SAME: scope: ![[MODULE]], 4550fd1a87SAdrian Prantl// CHECK-SAME: elements 46e76bda54SAdrian Prantl 4750fd1a87SAdrian Prantl// CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "ObjCClassWithPrivateIVars", 4850fd1a87SAdrian Prantl// CHECK-SAME: scope: ![[MODULE]], 4950fd1a87SAdrian Prantl// CHECK-SAME: elements 5050fd1a87SAdrian Prantl 51aa5d08d0SAdrian Prantl// CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "FwdDeclared" 52aa5d08d0SAdrian Prantl// CHECK-SAME: elements: 538c0e5051SAdrian Prantl 54f9521b0bSDuncan P. N. Exon Smith// CHECK: ![[TD_UNION:.*]] = distinct !DICompositeType(tag: DW_TAG_union_type, 55ae06ca0cSJustin Lebar// CHECK-NOT: name: 56aa5d08d0SAdrian Prantl// CHECK-SAME: elements: 578c0e5051SAdrian Prantl 58aa5d08d0SAdrian Prantl// CHECK: !DIDerivedType(tag: DW_TAG_typedef, name: "TypedefUnion", 59aa5d08d0SAdrian Prantl// CHECK-SAME: baseType: ![[TD_UNION]]) 608c0e5051SAdrian Prantl 61aa5d08d0SAdrian Prantl// CHECK: !DIDerivedType(tag: DW_TAG_typedef, name: "TypedefEnum", 62aa5d08d0SAdrian Prantl// CHECK-SAME: baseType: ![[TD_ENUM:.*]]) 638c0e5051SAdrian Prantl 64f9521b0bSDuncan P. N. Exon Smith// CHECK: ![[TD_STRUCT:.*]] = distinct !DICompositeType(tag: DW_TAG_structure_type, 65ae06ca0cSJustin Lebar// CHECK-NOT: name: 66aa5d08d0SAdrian Prantl// CHECK-SAME: elements: 67aa5d08d0SAdrian Prantl// CHECK: !DIDerivedType(tag: DW_TAG_typedef, name: "TypedefStruct", 68aa5d08d0SAdrian Prantl// CHECK-SAME: baseType: ![[TD_STRUCT]]) 698c0e5051SAdrian Prantl 70aa5d08d0SAdrian Prantl// CHECK: !DICompositeType(tag: DW_TAG_union_type, 71ae06ca0cSJustin Lebar// CHECK-NOT: name: 72ae06ca0cSJustin Lebar// CHECK-SAME: ) 738c0e5051SAdrian Prantl 74aa5d08d0SAdrian Prantl// CHECK: !DICompositeType(tag: DW_TAG_structure_type, 75ae06ca0cSJustin Lebar// CHECK-NOT: name: 76ae06ca0cSJustin Lebar// CHECK-SAME: ) 778c0e5051SAdrian Prantl 78aa5d08d0SAdrian Prantl// CHECK-NEG-NOT: !DICompositeType(tag: DW_TAG_structure_type, name: "PureForwardDecl" 79aa5d08d0SAdrian Prantl 80aa5d08d0SAdrian Prantl// The output order is sublty different for module vs. pch, 81aa5d08d0SAdrian Prantl// so these are checked separately: 82aa5d08d0SAdrian Prantl// 8340a3fcb0SDjordje Todorovic// CHECK2: !DICompositeType(tag: DW_TAG_structure_type, name: "FwdDecl", 84e76bda54SAdrian Prantl// CHECK2: !DICompositeType(tag: DW_TAG_structure_type, name: "ObjCClass", 85e76bda54SAdrian Prantl// CHECK2: !DIObjCProperty(name: "property", 86e76bda54SAdrian Prantl// CHECK2: !DIDerivedType(tag: DW_TAG_member, name: "ivar" 87e76bda54SAdrian Prantl// CHECK2: !DIDerivedType(tag: DW_TAG_typedef, name: "InnerEnum" 88