forked from OSchip/llvm-project
Fix handling of invalid uses of the __has_warning builtin macro
llvm-svn: 168265
This commit is contained in:
parent
2794fcd611
commit
f591982bb2
|
@ -1291,7 +1291,10 @@ void Preprocessor::ExpandBuiltinMacro(Token &Tok) {
|
|||
StartLoc = Tok.getLocation();
|
||||
IsValid = false;
|
||||
// Eat tokens until ')'.
|
||||
do Lex(Tok); while (!(Tok.is(tok::r_paren) || Tok.is(tok::eod)));
|
||||
while (Tok.isNot(tok::r_paren)
|
||||
&& Tok.isNot(tok::eod)
|
||||
&& Tok.isNot(tok::eof))
|
||||
Lex(Tok);
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -1342,7 +1345,8 @@ void Preprocessor::ExpandBuiltinMacro(Token &Tok) {
|
|||
Diag(StartLoc, diag::err_warning_check_malformed);
|
||||
|
||||
OS << (int)Value;
|
||||
Tok.setKind(tok::numeric_constant);
|
||||
if (IsValid)
|
||||
Tok.setKind(tok::numeric_constant);
|
||||
} else if (II == Ident__building_module) {
|
||||
// The argument to this builtin should be an identifier. The
|
||||
// builtin evaluates to 1 when that identifier names the module we are
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
// RUN: %clang_cc1 -verify %s
|
||||
|
||||
// These must be the last lines in this test.
|
||||
// expected-error@+1{{requires a parenthesized string}} expected-error@+1 2{{expected}}
|
||||
int i = __has_warning(
|
|
@ -0,0 +1,5 @@
|
|||
// RUN: %clang_cc1 -verify %s
|
||||
|
||||
// These must be the last lines in this test.
|
||||
// expected-error@+1{{requires a parenthesized string}} expected-error@+1{{expected}}
|
||||
int i = __has_warning();
|
|
@ -11,7 +11,9 @@
|
|||
#warning Should have -Wparentheses
|
||||
#endif
|
||||
|
||||
#if __has_warning(-Wfoo) // expected-error {{builtin warning check macro requires a parenthesized string}}
|
||||
// expected-error@+2 {{builtin warning check macro requires a parenthesized string}}
|
||||
// expected-error@+1 {{expected value in expression}}
|
||||
#if __has_warning(-Wfoo)
|
||||
#endif
|
||||
|
||||
// expected-warning@+3 {{Not a valid warning flag}}
|
||||
|
|
Loading…
Reference in New Issue