blob: 77b84562694eb8db3d567bc8a6533168a9a9f546 [file] [log] [blame]
Ted Kremenek183a8de2011-10-12 20:06:09 +00001// RUN: %clang_cc1 -fsyntax-only %s -verify
2#ifndef __has_warning
3#error Should have __has_warning
4#endif
5
6#if __has_warning("not valid") // expected-warning {{__has_warning expected option name}}
7#endif
8
Jordan Rose78541c42012-07-11 19:58:23 +00009// expected-warning@+2 {{Should have -Wparentheses}}
Ted Kremenek183a8de2011-10-12 20:06:09 +000010#if __has_warning("-Wparentheses")
Jordan Rose78541c42012-07-11 19:58:23 +000011#warning Should have -Wparentheses
Ted Kremenek183a8de2011-10-12 20:06:09 +000012#endif
13
Andy Gibbs02a17682012-11-17 19:15:38 +000014// expected-error@+2 {{expected string literal}}
Andy Gibbsb9971ba2012-11-17 19:14:53 +000015// expected-error@+1 {{expected value in expression}}
16#if __has_warning(-Wfoo)
Ted Kremenek183a8de2011-10-12 20:06:09 +000017#endif
18
Jordan Rose78541c42012-07-11 19:58:23 +000019// expected-warning@+3 {{Not a valid warning flag}}
Ted Kremenek183a8de2011-10-12 20:06:09 +000020#if __has_warning("-Wnot-a-valid-warning-flag-at-all")
21#else
Jordan Rose78541c42012-07-11 19:58:23 +000022#warning Not a valid warning flag
23#endif
Andy Gibbs02a17682012-11-17 19:15:38 +000024
25// expected-error@+2 {{builtin warning check macro requires a parenthesized string}}
26// expected-error@+1 {{invalid token}}
27#if __has_warning "not valid"
28#endif
29
30// Macro expansion does not occur in the parameter to __has_warning
31// (as is also expected behaviour for ordinary macros), so the
32// following should not expand:
33
34#define MY_ALIAS "-Wparentheses"
35
36// expected-error@+1 2{{expected}}
37#if __has_warning(MY_ALIAS)
38#error Alias expansion not allowed
39#endif
40
41// But deferring should expand:
42#define HAS_WARNING(X) __has_warning(X)
43
44#if !HAS_WARNING(MY_ALIAS)
45#error Expansion should have occurred
46#endif