зеркало из https://github.com/microsoft/clang.git
Fix CheckEndOfDirective to diagnose lines that contain macros that expand to
zero tokens. This fixes PR2045, thanks to Neil for finding another incredibly subtle corner case :) git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@47203 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
6a24acbb3d
Коммит
e9ba32357c
|
@ -1498,11 +1498,14 @@ void Preprocessor::ReadMacroName(Token &MacroNameTok, char isDefineUndef) {
|
|||
/// not, emit a diagnostic and consume up until the eom.
|
||||
void Preprocessor::CheckEndOfDirective(const char *DirType) {
|
||||
Token Tmp;
|
||||
Lex(Tmp);
|
||||
// Lex unexpanded tokens: macros might expand to zero tokens, causing us to
|
||||
// miss diagnosing invalid lines.
|
||||
LexUnexpandedToken(Tmp);
|
||||
|
||||
// There should be no tokens after the directive, but we allow them as an
|
||||
// extension.
|
||||
while (Tmp.is(tok::comment)) // Skip comments in -C mode.
|
||||
Lex(Tmp);
|
||||
LexUnexpandedToken(Tmp);
|
||||
|
||||
if (Tmp.isNot(tok::eom)) {
|
||||
Diag(Tmp, diag::ext_pp_extra_tokens_at_eol, DirType);
|
||||
|
|
|
@ -1032,8 +1032,7 @@ Sema::DeclTy *Sema::ActOnStartOfFunctionDef(Scope *FnBodyScope, Declarator &D) {
|
|||
}
|
||||
}
|
||||
Decl *decl = static_cast<Decl*>(ActOnDeclarator(GlobalScope, D, 0));
|
||||
FunctionDecl *FD = dyn_cast<FunctionDecl>(decl);
|
||||
assert(FD != 0 && "ActOnDeclarator() didn't return a FunctionDecl");
|
||||
FunctionDecl *FD = cast<FunctionDecl>(decl);
|
||||
CurFunctionDecl = FD;
|
||||
|
||||
// Create Decl objects for each parameter, adding them to the FunctionDecl.
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
// RUN: not clang %s -pedantic-errors -E
|
||||
// PR2045
|
||||
|
||||
#define b
|
||||
#undef a b
|
Загрузка…
Ссылка в новой задаче