]> granicus.if.org Git - clang/commitdiff
Fix crash on invalid code where a @throw statement is not followed by a ';'
authorTed Kremenek <kremenek@apple.com>
Tue, 20 Apr 2010 21:21:51 +0000 (21:21 +0000)
committerTed Kremenek <kremenek@apple.com>
Tue, 20 Apr 2010 21:21:51 +0000 (21:21 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@101941 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Parse/ParseObjc.cpp
test/SemaObjC/invalid-code.m

index 928ffb8afa620eb23aa7bc1cf7375fd95a3d2751..057907d1120f9c3ee4ecce9784e2b7088ba260cc 100644 (file)
@@ -1448,7 +1448,8 @@ Parser::OwningStmtResult Parser::ParseObjCThrowStmt(SourceLocation atLoc) {
       return StmtError();
     }
   }
-  ConsumeToken(); // consume ';'
+  // consume ';'
+  ExpectAndConsume(tok::semi, diag::err_expected_semi_after, "@throw");
   return Actions.ActOnObjCAtThrowStmt(atLoc, move(Res), CurScope);
 }
 
index 2f297cf6e659552c793fa24179b2303129ca0b83..7a642fb10784767099b2f157f7d847c15e68c132 100644 (file)
@@ -12,3 +12,10 @@ void test1() {
   __PRETTY_FUNCTION__; // expected-warning{{expression result unused}}
 }
 @end
+
+// <rdar://problem/7881045>
+// This previously triggered a crash because a ';' was expected after the @throw statement.
+void foo() {
+  @throw (id)0 // expected-error{{expected ';' after @throw}}
+}
+