aboutsummaryrefslogtreecommitdiff
path: root/test/Preprocessor/cxx_oper_keyword.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/Preprocessor/cxx_oper_keyword.cpp')
-rw-r--r--test/Preprocessor/cxx_oper_keyword.cpp30
1 files changed, 27 insertions, 3 deletions
diff --git a/test/Preprocessor/cxx_oper_keyword.cpp b/test/Preprocessor/cxx_oper_keyword.cpp
index 3fc246dd6c2a..89a094d073ca 100644
--- a/test/Preprocessor/cxx_oper_keyword.cpp
+++ b/test/Preprocessor/cxx_oper_keyword.cpp
@@ -1,7 +1,31 @@
-// RUN: not %clang_cc1 %s -E
-// RUN: %clang_cc1 %s -E -fno-operator-names
+// RUN: %clang_cc1 %s -E -verify -DOPERATOR_NAMES
+// RUN: %clang_cc1 %s -E -verify -fno-operator-names
-// Not valid in C++ unless -fno-operator-names is passed.
+#ifndef OPERATOR_NAMES
+//expected-error@+3 {{token is not a valid binary operator in a preprocessor subexpression}}
+#endif
+// Valid because 'and' is a spelling of '&&'
+#if defined foo and bar
+#endif
+
+// Not valid in C++ unless -fno-operator-names is passed:
+
+#ifdef OPERATOR_NAMES
+//expected-error@+2 {{C++ operator 'and' (aka '&&') used as a macro name}}
+#endif
#define and foo
+#ifdef OPERATOR_NAMES
+//expected-error@+2 {{C++ operator 'xor' (aka '^') used as a macro name}}
+#endif
+#if defined xor
+#endif
+// For error recovery we continue as though the identifier was a macro name regardless of -fno-operator-names.
+#ifdef OPERATOR_NAMES
+//expected-error@+3 {{C++ operator 'and' (aka '&&') used as a macro name}}
+#endif
+//expected-warning@+2 {{and is defined}}
+#ifdef and
+#warning and is defined
+#endif