| // 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 |
| |
| // expected-warning@+2 {{Should have -Wparentheses}} |
| #if __has_warning("-Wparentheses") |
| #warning Should have -Wparentheses |
| #endif |
| |
| // expected-error@+2 {{expected string literal in '__has_warning'}} |
| // expected-error@+1 {{expected value in expression}} |
| #if __has_warning(-Wfoo) |
| #endif |
| |
| // expected-warning@+3 {{Not a valid warning flag}} |
| #if __has_warning("-Wnot-a-valid-warning-flag-at-all") |
| #else |
| #warning Not a valid warning flag |
| #endif |
| |
| // expected-error@+2 {{builtin warning check macro requires a parenthesized string}} |
| // expected-error@+1 {{invalid token}} |
| #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" |
| |
| // expected-error@+1 2{{expected}} |
| #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 |