// CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "PR16214",{{.*}} line: [[@LINE+2]],{{.*}}
// CHECK-NOT: DIFlagFwdDecl
structPR16214{int i;};typedef PR16214 bar;
bar *a;
bar b;namespacePR14467{// CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "foo",{{.*}} line: [[@LINE+2]],{{.*}}
// CHECK-NOT: DIFlagFwdDecl
structfoo{};
foo *bar(foo *a){
foo *b =newfoo(*a);return b;}}namespacetest1{// CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "foo",{{.*}} line: [[@LINE+1]],{{.*}} flags: DIFlagFwdDecl
structfoo{};externintbar(foo *a);intbaz(foo *a){returnbar(a);}}namespacetest2{// 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
structfoo{};structbar{
foo f;};voidfunc(){
foo *f;}}