Home | History | Annotate | Download | only in Preprocessor
      1 // 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 
      9 // expected-warning@+2 {{Should have -Wparentheses}}
     10 #if __has_warning("-Wparentheses")
     11 #warning Should have -Wparentheses
     12 #endif
     13 
     14 // expected-error@+2 {{expected string literal in '__has_warning'}}
     15 // expected-error@+1 {{expected value in expression}}
     16 #if __has_warning(-Wfoo)
     17 #endif
     18 
     19 // expected-warning@+3 {{Not a valid warning flag}}
     20 #if __has_warning("-Wnot-a-valid-warning-flag-at-all")
     21 #else
     22 #warning Not a valid warning flag
     23 #endif
     24 
     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
     47