mirror of
https://github.com/intel/llvm.git
synced 2026-01-27 06:06:34 +08:00
[preprocessor] For errors at a function macro invocation, also include
a note about where the macro is defined. llvm-svn: 170228
This commit is contained in:
@@ -517,6 +517,8 @@ MacroArgs *Preprocessor::ReadFunctionLikeMacroArgs(Token &MacroName,
|
||||
|
||||
if (Tok.is(tok::eof) || Tok.is(tok::eod)) { // "#if f(<eof>" & "#if f(\n"
|
||||
Diag(MacroName, diag::err_unterm_macro_invoc);
|
||||
Diag(MI->getDefinitionLoc(), diag::note_macro_here)
|
||||
<< MacroName.getIdentifierInfo();
|
||||
// Do not lose the EOF/EOD. Return it to the client.
|
||||
MacroName = Tok;
|
||||
return 0;
|
||||
@@ -575,6 +577,8 @@ MacroArgs *Preprocessor::ReadFunctionLikeMacroArgs(Token &MacroName,
|
||||
// Emit the diagnostic at the macro name in case there is a missing ).
|
||||
// Emitting it at the , could be far away from the macro name.
|
||||
Diag(ArgStartLoc, diag::err_too_many_args_in_macro_invoc);
|
||||
Diag(MI->getDefinitionLoc(), diag::note_macro_here)
|
||||
<< MacroName.getIdentifierInfo();
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -638,6 +642,8 @@ MacroArgs *Preprocessor::ReadFunctionLikeMacroArgs(Token &MacroName,
|
||||
} else {
|
||||
// Otherwise, emit the error.
|
||||
Diag(Tok, diag::err_too_few_args_in_macro_invoc);
|
||||
Diag(MI->getDefinitionLoc(), diag::note_macro_here)
|
||||
<< MacroName.getIdentifierInfo();
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -657,6 +663,8 @@ MacroArgs *Preprocessor::ReadFunctionLikeMacroArgs(Token &MacroName,
|
||||
// Emit the diagnostic at the macro name in case there is a missing ).
|
||||
// Emitting it at the , could be far away from the macro name.
|
||||
Diag(MacroName, diag::err_too_many_args_in_macro_invoc);
|
||||
Diag(MI->getDefinitionLoc(), diag::note_macro_here)
|
||||
<< MacroName.getIdentifierInfo();
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
/* RUN: %clang_cc1 %s -Eonly -std=c89 -pedantic -verify
|
||||
*/
|
||||
/* PR3937 */
|
||||
#define zero() 0
|
||||
#define one(x) 0
|
||||
#define two(x, y) 0
|
||||
#define zero() 0 /* expected-note 2 {{defined here}} */
|
||||
#define one(x) 0 /* expected-note 2 {{defined here}} */
|
||||
#define two(x, y) 0 /* expected-note 4 {{defined here}} */
|
||||
#define zero_dot(...) 0 /* expected-warning {{variadic macros are a C99 feature}} */
|
||||
#define one_dot(x, ...) 0 /* expected-warning {{variadic macros are a C99 feature}} expected-note 2{{macro 'one_dot' defined here}} */
|
||||
|
||||
|
||||
Reference in New Issue
Block a user