Anders Carlsson | 1040f2e | 2009-10-09 23:58:25 +0000 | [diff] [blame] | 1 | // RUN: clang-cc -fsyntax-only -verify %s |
Anders Carlsson | e4f4b5e | 2009-10-13 22:43:21 +0000 | [diff] [blame^] | 2 | struct A; // expected-note 13 {{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 | 3d5829c | 2009-10-13 21:49:31 +0000 | [diff] [blame] | 8 | A operator()(); // expected-note 2 {{'operator()' declared here}} |
Anders Carlsson | 8523d20 | 2009-10-13 21:02:07 +0000 | [diff] [blame] | 9 | operator A(); // expected-note {{'operator A' declared here}} |
Anders Carlsson | f64a3da | 2009-10-13 21:19:37 +0000 | [diff] [blame] | 10 | A operator!(); // expected-note 2 {{'operator!' declared here}} |
Anders Carlsson | 3d5829c | 2009-10-13 21:49:31 +0000 | [diff] [blame] | 11 | A operator++(int); // expected-note {{'operator++' declared here}} |
Anders Carlsson | 834facc | 2009-10-13 22:22:09 +0000 | [diff] [blame] | 12 | A operator[](int); // expected-note {{'operator[]' declared here}} |
Anders Carlsson | e4f4b5e | 2009-10-13 22:43:21 +0000 | [diff] [blame^] | 13 | A operator+(int); // expected-note {{'operator+' declared here}} |
| 14 | A operator->(); // expected-note {{'operator->' declared here}} |
Anders Carlsson | 1040f2e | 2009-10-09 23:58:25 +0000 | [diff] [blame] | 15 | }; |
| 16 | |
| 17 | void g() { |
| 18 | f(); // expected-error {{calling 'f' with incomplete return type 'struct A'}} |
| 19 | |
| 20 | typedef A (*Func)(); |
| 21 | Func fp; |
| 22 | fp(); // expected-error {{calling function with incomplete return type 'struct A'}} |
| 23 | ((Func)0)(); // expected-error {{calling function with incomplete return type 'struct A'}} |
Anders Carlsson | c4859ba | 2009-10-10 00:06:20 +0000 | [diff] [blame] | 24 | |
| 25 | B b; |
| 26 | b.f(); // expected-error {{calling 'f' with incomplete return type 'struct A'}} |
Anders Carlsson | 8523d20 | 2009-10-13 21:02:07 +0000 | [diff] [blame] | 27 | |
| 28 | b.operator()(); // expected-error {{calling 'operator()' with incomplete return type 'struct A'}} |
| 29 | b.operator A(); // expected-error {{calling 'operator A' with incomplete return type 'struct A'}} |
Anders Carlsson | f64a3da | 2009-10-13 21:19:37 +0000 | [diff] [blame] | 30 | b.operator!(); // expected-error {{calling 'operator!' with incomplete return type 'struct A'}} |
| 31 | |
| 32 | !b; // expected-error {{calling 'operator!' with incomplete return type 'struct A'}} |
Anders Carlsson | 3d5829c | 2009-10-13 21:49:31 +0000 | [diff] [blame] | 33 | b(); // expected-error {{calling 'operator()' with incomplete return type 'struct A'}} |
| 34 | b++; // expected-error {{calling 'operator++' with incomplete return type 'struct A'}} |
Anders Carlsson | 834facc | 2009-10-13 22:22:09 +0000 | [diff] [blame] | 35 | b[0]; // expected-error {{calling 'operator[]' with incomplete return type 'struct A'}} |
Anders Carlsson | e4f4b5e | 2009-10-13 22:43:21 +0000 | [diff] [blame^] | 36 | b + 1; // expected-error {{calling 'operator+' with incomplete return type 'struct A'}} |
| 37 | b->f(); // expected-error {{calling 'operator->' with incomplete return type 'struct A'}} |
Anders Carlsson | 1040f2e | 2009-10-09 23:58:25 +0000 | [diff] [blame] | 38 | } |