diff options
-rw-r--r-- | clang/lib/Parse/ParseObjc.cpp | 8 | ||||
-rw-r--r-- | clang/test/SemaObjC/exception-go-boom.m | 9 |
2 files changed, 16 insertions, 1 deletions
diff --git a/clang/lib/Parse/ParseObjc.cpp b/clang/lib/Parse/ParseObjc.cpp index 05c919cbea9..8a942c77027 100644 --- a/clang/lib/Parse/ParseObjc.cpp +++ b/clang/lib/Parse/ParseObjc.cpp @@ -1294,8 +1294,14 @@ Parser::OwningStmtResult Parser::ParseObjCTryStmt(SourceLocation atLoc) { FirstPart = Actions.ActOnParamDeclarator(CurScope, ParmDecl); } else ConsumeToken(); // consume '...' - SourceLocation RParenLoc = ConsumeParen(); + + SourceLocation RParenLoc; + if (Tok.is(tok::r_paren)) + RParenLoc = ConsumeParen(); + else // Skip over garbage, until we get to ')'. Eat the ')'. + SkipUntil(tok::r_paren, true, false); + OwningStmtResult CatchBody(Actions, true); if (Tok.is(tok::l_brace)) CatchBody = ParseCompoundStatementBody(); diff --git a/clang/test/SemaObjC/exception-go-boom.m b/clang/test/SemaObjC/exception-go-boom.m new file mode 100644 index 00000000000..32dc82dba03 --- /dev/null +++ b/clang/test/SemaObjC/exception-go-boom.m @@ -0,0 +1,9 @@ +// RUN: clang-cc %s -verify -fsyntax-only + +// Note: NSException is not declared. +void f0(id x) { + @try { + } @catch (NSException *x) { // expected-warning{{type specifier missing, defaults to 'int'}} expected-error{{@catch parameter is not an Objective-C class type}} + } +} + |