Files
clang-p2996/clang/test/Parser/cxx0x-condition.cpp
Richard Smith 03a4aa3d00 Re-commit r273548, reverted in r273589, with a fix to not produce
-Wfor-loop-analysis warnings for a for-loop with a condition variable. In such
a case, the loop condition variable is modified on each iteration of the loop
by definition.

Original commit message:

Rearrange condition handling so that semantic checks on a condition variable
are performed before the other substatements of the construct are parsed,
rather than deferring them until the end. This allows better error recovery
from semantic errors in the condition, improves diagnostic order, and is a
prerequisite for C++17 constexpr if.

llvm-svn: 273600
2016-06-23 19:02:52 +00:00

39 lines
1.2 KiB
C++

// RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s
struct S { S(int); operator bool(); };
void f() {
int a;
typedef int n;
while (a) ;
while (int x) ; // expected-error {{variable declaration in condition must have an initializer}}
while (float x = 0) ;
if (const int x = a) ; // expected-warning{{empty body}} expected-note{{put the semicolon on a separate line to silence this warning}}
switch (int x = a+10) {}
for (; int x = ++a; ) ;
if (S(a)) {} // ok
if (S(a) = 0) {} // ok
if (S(a) == 0) {} // ok
if (S(n)) {} // expected-error {{unexpected type name 'n': expected expression}}
if (S(n) = 0) {} // ok
if (S(n) == 0) {} // expected-error {{unexpected type name 'n': expected expression}}
if (S b(a)) {} // expected-error {{variable declaration in condition cannot have a parenthesized initializer}}
if (S b(n)) {} // expected-error {{a function type is not allowed here}}
if (S b(n) = 0) {} // expected-error {{a function type is not allowed here}}
if (S b(n) == 0) {} // expected-error {{a function type is not allowed here}}
S s(a);
if (S{s}) {} // ok
if (S a{s}) {} // ok
if (S a = {s}) {} // ok
if (S a == {s}) {} // expected-error {{did you mean '='?}}
if (S(b){a}) {} // ok
if (S(b) = {a}) {} // ok
}