teak-llvm/clang/test/Preprocessor/_Pragma.c
Hubert Tong 0deb694d94 Improved error recovery for _Pragma
Summary:
Currently, if the argument to _Pragma is not a parenthesised string
literal, the bad token will be consumed, as well as the ')', if present.
If additional bad tokens are passed to the _Pragma, this results in
extra error messages which may distract from the true problem.

The proposed patch causes all tokens to be consumed until the closing
')' or a new line, whichever is reached first.

Reviewers: hfinkel, rsmith

Subscribers: hubert.reinterpretcast, fraggamuffin, rnk, cfe-commits

Differential Revision: http://reviews.llvm.org/D8308

Patch by Rachel Craik!

llvm-svn: 243692
2015-07-30 21:30:00 +00:00

20 lines
659 B
C

// RUN: %clang_cc1 %s -verify -Wall
_Pragma ("GCC system_header") // expected-warning {{system_header ignored in main file}}
// rdar://6880630
_Pragma("#define macro") // expected-warning {{unknown pragma ignored}}
_Pragma("") // expected-warning {{unknown pragma ignored}}
_Pragma("message(\"foo \\\\\\\\ bar\")") // expected-warning {{foo \\ bar}}
#ifdef macro
#error #define invalid
#endif
_Pragma(unroll 1 // expected-error{{_Pragma takes a parenthesized string literal}}
_Pragma(clang diagnostic push) // expected-error{{_Pragma takes a parenthesized string literal}}
_Pragma( // expected-error{{_Pragma takes a parenthesized string literal}}