1 | // RUN: %clang_cc1 -verify -fsyntax-only -Wstring-conversion %s |
2 | |
3 | void do_nothing(); |
4 | void assert_error(); |
5 | |
6 | #define assert1(expr) \ |
7 | if (expr) \ |
8 | do_nothing(); \ |
9 | else \ |
10 | assert_error() |
11 | |
12 | #define assert2(expr) \ |
13 | ((expr) ? do_nothing() : assert_error()) |
14 | |
15 | // Exception for common assert form. |
16 | void test1() { |
17 | assert1(0 && "foo"); |
18 | assert1("foo" && 0); |
19 | assert1(0 || "foo"); // expected-warning {{string literal}} |
20 | assert1("foo"); // expected-warning {{string literal}} |
21 | |
22 | assert2(0 && "foo"); |
23 | assert2("foo" && 0); |
24 | assert2(0 || "foo"); // expected-warning {{string literal}} |
25 | assert2("foo"); // expected-warning {{string literal}} |
26 | } |
27 | |
28 | void test2() { |
29 | if ("hi") {} // expected-warning {{string literal}} |
30 | while ("hello") {} // expected-warning {{string literal}} |
31 | for (;"howdy";) {} // expected-warning {{string literal}} |
32 | do { } while ("hey"); // expected-warning {{string literal}} |
33 | int x = "hey" ? 1 : 2; // expected-warning {{string literal}} |
34 | } |
35 | |