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.
test1()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 
test2()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