|  | // RUN: %clang_cc1 -triple x86_64-apple-darwin -debug-info-kind=standalone -o - -emit-llvm %s | FileCheck %s | 
|  |  | 
|  | // We had a bug in -fstandalone-debug where UnicodeString would not be completed | 
|  | // when it was required to be complete. This originally manifested as an | 
|  | // assertion in CodeView emission on Windows with some dllexport stuff, but it's | 
|  | // more general than that. | 
|  |  | 
|  | struct UnicodeString; | 
|  | UnicodeString *force_fwd_decl; | 
|  | struct UnicodeString { | 
|  | private: | 
|  | virtual ~UnicodeString(); | 
|  | }; | 
|  | struct UseCompleteType { | 
|  | UseCompleteType(); | 
|  | ~UseCompleteType(); | 
|  | UnicodeString currencySpcAfterSym[1]; | 
|  | }; | 
|  | UseCompleteType require_complete; | 
|  | // CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "UnicodeString" | 
|  | // CHECK-NOT:              DIFlagFwdDecl | 
|  | // CHECK-SAME:             ){{$}} | 
|  |  | 
|  | namespace rdar14101097_1 { // see also PR16214 | 
|  | // Check that we emit debug info for the definition of a struct if the | 
|  | // definition is available, even if it's used via a pointer wrapped in a | 
|  | // typedef. | 
|  | // CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "foo" | 
|  | // CHECK-NOT:              DIFlagFwdDecl | 
|  | // CHECK-SAME:             ){{$}} | 
|  | struct foo { | 
|  | }; | 
|  |  | 
|  | typedef foo *foop; | 
|  |  | 
|  | void bar() { | 
|  | foop f; | 
|  | } | 
|  | } | 
|  |  | 
|  | namespace rdar14101097_2 { | 
|  | // As above, except trickier because we first encounter only a declaration of | 
|  | // the type and no debug-info related use after we see the definition of the | 
|  | // type. | 
|  | // CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "foo" | 
|  | // CHECK-NOT:              DIFlagFwdDecl | 
|  | // CHECK-SAME:             ){{$}} | 
|  | struct foo; | 
|  | void bar() { | 
|  | foo *f; | 
|  | } | 
|  | struct foo { | 
|  | }; | 
|  | } |