1 // RUN: %clang_cc1 %s -E -verify -DOPERATOR_NAMES 2 // RUN: %clang_cc1 %s -E -verify -fno-operator-names 3 4 #ifndef OPERATOR_NAMES 5 //expected-error@+3 {{token is not a valid binary operator in a preprocessor subexpression}} 6 #endif 7 // Valid because 'and' is a spelling of '&&' 8 #if defined foo and bar 9 #endif 10 11 // Not valid in C++ unless -fno-operator-names is passed: 12 13 #ifdef OPERATOR_NAMES 14 //expected-error@+2 {{C++ operator 'and' (aka '&&') used as a macro name}} 15 #endif 16 #define and foo 17 18 #ifdef OPERATOR_NAMES 19 //expected-error@+2 {{C++ operator 'xor' (aka '^') used as a macro name}} 20 #endif 21 #if defined xor 22 #endif 23 24 // For error recovery we continue as though the identifier was a macro name regardless of -fno-operator-names. 25 #ifdef OPERATOR_NAMES 26 //expected-error@+3 {{C++ operator 'and' (aka '&&') used as a macro name}} 27 #endif 28 //expected-warning@+2 {{and is defined}} 29 #ifdef and 30 #warning and is defined 31 #endif 32