Disambiguate between a declaration or an expression, in the 'for-init-statement'...
[clang.git] / test / SemaCXX / decl-expr-ambiguity.cpp
blob2e9514c054e7a2f2d219775ce3f4018943b67c31
1 // RUN: clang -fsyntax-only -verify %s
3 void f() {
4 int a;
5 struct S { int m; };
6 typedef S *T;
8 // Expressions.
9 T(a)->m = 7;
10 int(a)++; // expected-error {{invalid lvalue in increment/decrement expression}}
11 __extension__ int(a)++; // expected-error {{invalid lvalue in increment/decrement expression}}
12 typeof(int)(a,5)<<a; // expected-error {{function-style cast to a builtin type can only take one argument}}
13 void(a), ++a; // expected-warning {{statement was disambiguated as expression}} expected-warning {{expression result unused}}
14 if (int(a)+1) {}
15 for (int(a)+1;;) {}
17 // Declarations.
18 T(*d)(int(p)); // expected-warning {{statement was disambiguated as declaration}} expected-error {{previous definition is here}}
19 T(d)[5]; // expected-warning {{statement was disambiguated as declaration}} expected-error {{redefinition of 'd'}}
20 typeof(int[])(f) = { 1, 2 }; // expected-warning {{statement was disambiguated as declaration}}
21 void(b)(int);
22 int(d2) __attribute__(()); // expected-warning {{statement was disambiguated as declaration}}
23 if (int(a)=1) {}