зеркало из https://github.com/microsoft/clang.git
Fix rdar://6480479 - [parser] infinite loop on invalid input
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@61975 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
4e174f1b1e
Коммит
1fd80116b4
|
@ -255,6 +255,12 @@ void Parser::ParseObjCInterfaceDeclList(DeclTy *interfaceDecl,
|
|||
|
||||
// If we don't have an @ directive, parse it as a function definition.
|
||||
if (Tok.isNot(tok::at)) {
|
||||
// The code below does not consume '}'s because it is afraid of eating the
|
||||
// end of a namespace. Because of the way this code is structured, an
|
||||
// erroneous r_brace would cause an infinite loop if not handled here.
|
||||
if (Tok.is(tok::r_brace))
|
||||
break;
|
||||
|
||||
// FIXME: as the name implies, this rule allows function definitions.
|
||||
// We could pass a flag or check for functions during semantic analysis.
|
||||
ParseDeclarationOrFunctionDefinition();
|
||||
|
|
|
@ -2,3 +2,9 @@
|
|||
|
||||
// FIXME: This is a horrible error message here. Fix.
|
||||
int @"s" = 5; // expected-error {{prefix attribute must be}}
|
||||
|
||||
|
||||
// rdar://6480479
|
||||
@interface A
|
||||
}; // expected-error {{missing @end}} expected-error {{expected external declaration}}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче