forked from OSchip/llvm-project
66 lines
2.6 KiB
C++
66 lines
2.6 KiB
C++
// RUN: clang-cc -fsyntax-only -Wparentheses -verify %s
|
|
|
|
struct A {
|
|
int foo();
|
|
friend A operator+(const A&, const A&);
|
|
operator bool();
|
|
};
|
|
|
|
void test() {
|
|
int x, *p;
|
|
A a, b;
|
|
|
|
// With scalars.
|
|
if (x = 7) {} // expected-warning {{using the result of an assignment as a condition without parentheses}}
|
|
if ((x = 7)) {}
|
|
do {
|
|
} while (x = 7); // expected-warning {{using the result of an assignment as a condition without parentheses}}
|
|
do {
|
|
} while ((x = 7));
|
|
while (x = 7) {} // expected-warning {{using the result of an assignment as a condition without parentheses}}
|
|
while ((x = 7)) {}
|
|
for (; x = 7; ) {} // expected-warning {{using the result of an assignment as a condition without parentheses}}
|
|
for (; (x = 7); ) {}
|
|
|
|
if (p = p) {} // expected-warning {{using the result of an assignment as a condition without parentheses}}
|
|
if ((p = p)) {}
|
|
do {
|
|
} while (p = p); // expected-warning {{using the result of an assignment as a condition without parentheses}}
|
|
do {
|
|
} while ((p = p));
|
|
while (p = p) {} // expected-warning {{using the result of an assignment as a condition without parentheses}}
|
|
while ((p = p)) {}
|
|
for (; p = p; ) {} // expected-warning {{using the result of an assignment as a condition without parentheses}}
|
|
for (; (p = p); ) {}
|
|
|
|
// Initializing variables (shouldn't warn).
|
|
if (int y = x) {}
|
|
while (int y = x) {}
|
|
if (A y = a) {}
|
|
while (A y = a) {}
|
|
|
|
// With temporaries.
|
|
if (x = (b+b).foo()) {} // expected-warning {{using the result of an assignment as a condition without parentheses}}
|
|
if ((x = (b+b).foo())) {}
|
|
do {
|
|
} while (x = (b+b).foo()); // expected-warning {{using the result of an assignment as a condition without parentheses}}
|
|
do {
|
|
} while ((x = (b+b).foo()));
|
|
while (x = (b+b).foo()) {} // expected-warning {{using the result of an assignment as a condition without parentheses}}
|
|
while ((x = (b+b).foo())) {}
|
|
for (; x = (b+b).foo(); ) {} // expected-warning {{using the result of an assignment as a condition without parentheses}}
|
|
for (; (x = (b+b).foo()); ) {}
|
|
|
|
// With a user-defined operator.
|
|
if (a = b + b) {} // expected-warning {{using the result of an assignment as a condition without parentheses}}
|
|
if ((a = b + b)) {}
|
|
do {
|
|
} while (a = b + b); // expected-warning {{using the result of an assignment as a condition without parentheses}}
|
|
do {
|
|
} while ((a = b + b));
|
|
while (a = b + b) {} // expected-warning {{using the result of an assignment as a condition without parentheses}}
|
|
while ((a = b + b)) {}
|
|
for (; a = b + b; ) {} // expected-warning {{using the result of an assignment as a condition without parentheses}}
|
|
for (; (a = b + b); ) {}
|
|
}
|