Anders Carlsson | 1040f2e | 2009-10-09 23:58:25 +0000 | [diff] [blame] | 1 | // RUN: clang-cc -fsyntax-only -verify %s |
Anders Carlsson | 8523d20 | 2009-10-13 21:02:07 +0000 | [diff] [blame^] | 2 | struct A; // expected-note 6 {{forward declaration of 'struct A'}} |
Anders Carlsson | 1040f2e | 2009-10-09 23:58:25 +0000 | [diff] [blame] | 3 | |
| 4 | A f(); // expected-note {{note: 'f' declared here}} |
| 5 | |
| 6 | struct B { |
Anders Carlsson | c4859ba | 2009-10-10 00:06:20 +0000 | [diff] [blame] | 7 | A f(); // expected-note {{'f' declared here}} |
Anders Carlsson | 8523d20 | 2009-10-13 21:02:07 +0000 | [diff] [blame^] | 8 | A operator()(); // expected-note {{'operator()' declared here}} |
| 9 | operator A(); // expected-note {{'operator A' declared here}} |
Anders Carlsson | 1040f2e | 2009-10-09 23:58:25 +0000 | [diff] [blame] | 10 | }; |
| 11 | |
| 12 | void g() { |
| 13 | f(); // expected-error {{calling 'f' with incomplete return type 'struct A'}} |
| 14 | |
| 15 | typedef A (*Func)(); |
| 16 | Func fp; |
| 17 | fp(); // expected-error {{calling function with incomplete return type 'struct A'}} |
| 18 | ((Func)0)(); // expected-error {{calling function with incomplete return type 'struct A'}} |
Anders Carlsson | c4859ba | 2009-10-10 00:06:20 +0000 | [diff] [blame] | 19 | |
| 20 | B b; |
| 21 | b.f(); // expected-error {{calling 'f' with incomplete return type 'struct A'}} |
Anders Carlsson | 8523d20 | 2009-10-13 21:02:07 +0000 | [diff] [blame^] | 22 | |
| 23 | b.operator()(); // expected-error {{calling 'operator()' with incomplete return type 'struct A'}} |
| 24 | b.operator A(); // expected-error {{calling 'operator A' with incomplete return type 'struct A'}} |
Anders Carlsson | 1040f2e | 2009-10-09 23:58:25 +0000 | [diff] [blame] | 25 | } |