
Add a check for bool-like conversions for the condition expression of conditional operators. This is similiar to the checking of condition expressions of if statements, for-loops, while-loops, and do-while loops. Specificially, this is to fix the problem of assert("message") not triggering -Wstring-conversion when the assert macro uses a conditional operator. llvm-svn: 237856
35 lines
1011 B
C
35 lines
1011 B
C
// RUN: %clang_cc1 -verify -fsyntax-only -Wstring-conversion %s
|
|
|
|
void do_nothing();
|
|
void assert_error();
|
|
|
|
#define assert1(expr) \
|
|
if (expr) \
|
|
do_nothing(); \
|
|
else \
|
|
assert_error()
|
|
|
|
#define assert2(expr) \
|
|
((expr) ? do_nothing() : assert_error())
|
|
|
|
// Expection for common assert form.
|
|
void test1() {
|
|
assert1(0 && "foo");
|
|
assert1("foo" && 0);
|
|
assert1(0 || "foo"); // expected-warning {{string literal}}
|
|
assert1("foo"); // expected-warning {{string literal}}
|
|
|
|
assert2(0 && "foo");
|
|
assert2("foo" && 0);
|
|
assert2(0 || "foo"); // expected-warning {{string literal}}
|
|
assert2("foo"); // expected-warning {{string literal}}
|
|
}
|
|
|
|
void test2() {
|
|
if ("hi") {} // expected-warning {{string literal}}
|
|
while ("hello") {} // expected-warning {{string literal}}
|
|
for (;"howdy";) {} // expected-warning {{string literal}}
|
|
do { } while ("hey"); // expected-warning {{string literal}}
|
|
int x = "hey" ? 1 : 2; // expected-warning {{string literal}}
|
|
}
|