+++ /dev/null
-// RUN: clang-cc -Eonly %s 2>&1 | grep error | wc -l | grep 1 &&
-// RUN: clang-cc -Eonly %s 2>&1 | grep 7:4 | wc -l | grep 1
-
-#define BAR _Pragma ("GCC poison XYZW") XYZW /*NO ERROR*/
-XYZW // NO ERROR
-BAR
- XYZW // ERROR
-
XYZ
// GCC PR 20077
-// RUN: clang-cc -Eonly %s -verify
#define a a ## ## // expected-error {{'##' cannot appear at end of macro expansion}}
#define b() b ## ## // expected-error {{'##' cannot appear at end of macro expansion}}
#define i ## // expected-error {{'##' cannot appear at start of macro expansion}}
#define j() ## // expected-error {{'##' cannot appear at start of macro expansion}}
-
-// RUN: clang-cc %s -E 2>&1 | grep error
+// RUN: clang-cc %s -Eonly -verify
#pragma GCC poison rindex
-rindex(some_string, 'h');
+rindex(some_string, 'h'); // expected-error {{attempt to use a poisoned identifier}}
+
+#define BAR _Pragma ("GCC poison XYZW") XYZW /*NO ERROR*/
+ XYZW // ok
+BAR
+ XYZW // expected-error {{attempt to use a poisoned identifier}}
+
+// Pragma poison shouldn't warn from macro expansions defined before the token
+// is poisoned.
+
+#define strrchr rindex2
+#pragma GCC poison rindex2
+
+// Can poison multiple times.
+#pragma GCC poison rindex2
+
+strrchr(some_string, 'h'); // ok.
+++ /dev/null
-// RUN: clang-cc %s -E 2>&1 | not grep error
-
-#define strrchr rindex
-#pragma GCC poison rindex
-
-// Can poison multiple times.
-#pragma GCC poison rindex
-
-strrchr(some_string, 'h');