|  |  | 
|  | // CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "PR16214",{{.*}} line: [[@LINE+2]],{{.*}} | 
|  | // CHECK-NOT: DIFlagFwdDecl | 
|  | struct PR16214 { | 
|  | int i; | 
|  | }; | 
|  |  | 
|  | typedef PR16214 bar; | 
|  |  | 
|  | bar *a; | 
|  | bar b; | 
|  |  | 
|  | namespace PR14467 { | 
|  | // CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "foo",{{.*}} line: [[@LINE+2]],{{.*}} | 
|  | // CHECK-NOT: DIFlagFwdDecl | 
|  | struct foo { | 
|  | }; | 
|  |  | 
|  | foo *bar(foo *a) { | 
|  | foo *b = new foo(*a); | 
|  | return b; | 
|  | } | 
|  | } | 
|  |  | 
|  | namespace test1 { | 
|  | // CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "foo",{{.*}} line: [[@LINE+1]],{{.*}} flags: DIFlagFwdDecl | 
|  | struct foo { | 
|  | }; | 
|  |  | 
|  | extern int bar(foo *a); | 
|  | int baz(foo *a) { | 
|  | return bar(a); | 
|  | } | 
|  | } | 
|  |  | 
|  | namespace test2 { | 
|  | // FIXME: if we were a bit fancier, we could realize that the 'foo' type is only | 
|  | // required because of the 'bar' type which is not required at all (or might | 
|  | // only be required to be declared) | 
|  | // CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "foo",{{.*}} line: [[@LINE+2]],{{.*}} | 
|  | // CHECK-NOT: DIFlagFwdDecl | 
|  | struct foo { | 
|  | }; | 
|  |  | 
|  | struct bar { | 
|  | foo f; | 
|  | }; | 
|  |  | 
|  | void func() { | 
|  | foo *f; | 
|  | } | 
|  | } |