2011-10-13 04:06:09 +08:00
|
|
|
// RUN: %clang_cc1 -fsyntax-only %s -verify
|
|
|
|
#ifndef __has_warning
|
|
|
|
#error Should have __has_warning
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#if __has_warning("not valid") // expected-warning {{__has_warning expected option name}}
|
|
|
|
#endif
|
|
|
|
|
2012-07-12 03:58:23 +08:00
|
|
|
// expected-warning@+2 {{Should have -Wparentheses}}
|
2011-10-13 04:06:09 +08:00
|
|
|
#if __has_warning("-Wparentheses")
|
2012-07-12 03:58:23 +08:00
|
|
|
#warning Should have -Wparentheses
|
2011-10-13 04:06:09 +08:00
|
|
|
#endif
|
|
|
|
|
2012-11-18 03:16:52 +08:00
|
|
|
// expected-error@+2 {{expected string literal in '__has_warning'}}
|
2016-04-05 16:36:47 +08:00
|
|
|
// expected-error@+1 {{missing ')'}} expected-note@+1 {{match}}
|
2012-11-18 03:14:53 +08:00
|
|
|
#if __has_warning(-Wfoo)
|
2011-10-13 04:06:09 +08:00
|
|
|
#endif
|
|
|
|
|
2012-07-12 03:58:23 +08:00
|
|
|
// expected-warning@+3 {{Not a valid warning flag}}
|
2011-10-13 04:06:09 +08:00
|
|
|
#if __has_warning("-Wnot-a-valid-warning-flag-at-all")
|
|
|
|
#else
|
2012-07-12 03:58:23 +08:00
|
|
|
#warning Not a valid warning flag
|
|
|
|
#endif
|
2012-11-18 03:15:38 +08:00
|
|
|
|
2016-04-05 16:36:47 +08:00
|
|
|
// expected-error@+1 {{missing '(' after '__has_warning'}}
|
2012-11-18 03:15:38 +08:00
|
|
|
#if __has_warning "not valid"
|
|
|
|
#endif
|
|
|
|
|
|
|
|
// Macro expansion does not occur in the parameter to __has_warning
|
|
|
|
// (as is also expected behaviour for ordinary macros), so the
|
|
|
|
// following should not expand:
|
|
|
|
|
|
|
|
#define MY_ALIAS "-Wparentheses"
|
|
|
|
|
2016-04-05 16:36:47 +08:00
|
|
|
// expected-error@+1 {{expected}}
|
2012-11-18 03:15:38 +08:00
|
|
|
#if __has_warning(MY_ALIAS)
|
|
|
|
#error Alias expansion not allowed
|
|
|
|
#endif
|
|
|
|
|
|
|
|
// But deferring should expand:
|
|
|
|
#define HAS_WARNING(X) __has_warning(X)
|
|
|
|
|
|
|
|
#if !HAS_WARNING(MY_ALIAS)
|
|
|
|
#error Expansion should have occurred
|
|
|
|
#endif
|