diff options
| author | Steve Naroff <snaroff@apple.com> | 2009-04-07 22:56:58 +0000 |
|---|---|---|
| committer | Steve Naroff <snaroff@apple.com> | 2009-04-07 22:56:58 +0000 |
| commit | 65a0089eb786cb8c3da95bb5dda3cf9fe033f97c (patch) | |
| tree | 302f027875ac1713abf04221a4bcf763780bb185 | |
| parent | ea10ab668f8b6cdaa17723b37af32f1a7cb36e46 (diff) | |
| download | bcm5719-llvm-65a0089eb786cb8c3da95bb5dda3cf9fe033f97c.tar.gz bcm5719-llvm-65a0089eb786cb8c3da95bb5dda3cf9fe033f97c.zip | |
Fix <rdar://problem/6764172> [sema] crash on invalid.
llvm-svn: 68568
| -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}} + } +} + |

