• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 
2 // CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "PR16214",{{.*}} line: [[@LINE+2]],{{.*}}
3 // CHECK-NOT: DIFlagFwdDecl
4 struct PR16214 {
5   int i;
6 };
7 
8 typedef PR16214 bar;
9 
10 bar *a;
11 bar b;
12 
13 namespace PR14467 {
14 // CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "foo",{{.*}} line: [[@LINE+2]],{{.*}}
15 // CHECK-NOT: DIFlagFwdDecl
16 struct foo {
17 };
18 
bar(foo * a)19 foo *bar(foo *a) {
20   foo *b = new foo(*a);
21   return b;
22 }
23 }
24 
25 namespace test1 {
26 // CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "foo",{{.*}} line: [[@LINE+1]],{{.*}} flags: DIFlagFwdDecl
27 struct foo {
28 };
29 
30 extern int bar(foo *a);
baz(foo * a)31 int baz(foo *a) {
32   return bar(a);
33 }
34 }
35 
36 namespace test2 {
37 // FIXME: if we were a bit fancier, we could realize that the 'foo' type is only
38 // required because of the 'bar' type which is not required at all (or might
39 // only be required to be declared)
40 // CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "foo",{{.*}} line: [[@LINE+2]],{{.*}}
41 // CHECK-NOT: DIFlagFwdDecl
42 struct foo {
43 };
44 
45 struct bar {
46   foo f;
47 };
48 
func()49 void func() {
50   foo *f;
51 }
52 }
53