| |
| // 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; |
| } |
| } |