1 // RUN: %clang_cc1 -triple x86_64-apple-darwin -debug-info-kind=standalone -o - -emit-llvm %s | FileCheck %s 2 3 // We had a bug in -fstandalone-debug where UnicodeString would not be completed 4 // when it was required to be complete. This originally manifested as an 5 // assertion in CodeView emission on Windows with some dllexport stuff, but it's 6 // more general than that. 7 8 struct UnicodeString; 9 UnicodeString *force_fwd_decl; 10 struct UnicodeString { 11 private: 12 virtual ~UnicodeString(); 13 }; 14 struct UseCompleteType { 15 UseCompleteType(); 16 ~UseCompleteType(); 17 UnicodeString currencySpcAfterSym[1]; 18 }; 19 UseCompleteType require_complete; 20 // CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "UnicodeString" 21 // CHECK-NOT: DIFlagFwdDecl 22 // CHECK-SAME: ){{$}} 23 24 namespace rdar14101097_1 { // see also PR16214 25 // Check that we emit debug info for the definition of a struct if the 26 // definition is available, even if it's used via a pointer wrapped in a 27 // typedef. 28 // CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "foo" 29 // CHECK-NOT: DIFlagFwdDecl 30 // CHECK-SAME: ){{$}} 31 struct foo { 32 }; 33 34 typedef foo *foop; 35 bar()36void bar() { 37 foop f; 38 } 39 } 40 41 namespace rdar14101097_2 { 42 // As above, except trickier because we first encounter only a declaration of 43 // the type and no debug-info related use after we see the definition of the 44 // type. 45 // CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "foo" 46 // CHECK-NOT: DIFlagFwdDecl 47 // CHECK-SAME: ){{$}} 48 struct foo; bar()49void bar() { 50 foo *f; 51 } 52 struct foo { 53 }; 54 } 55