diff --git a/Parse/ParseExpr.cpp b/Parse/ParseExpr.cpp
index 4608898..1b261aa 100644
--- a/Parse/ParseExpr.cpp
+++ b/Parse/ParseExpr.cpp
@@ -177,7 +177,7 @@
 /// routine is necessary to disambiguate @try-statement from,
 /// for example, @encode-expression.
 ///
-Parser::ExprResult Parser::ParseExpressionWithLeadingAt(SourceLocation &AtLoc) {
+Parser::ExprResult Parser::ParseExpressionWithLeadingAt(SourceLocation AtLoc) {
   ExprResult LHS = ParseObjCExpression(AtLoc);
   if (LHS.isInvalid) return LHS;
  
diff --git a/Parse/ParseObjc.cpp b/Parse/ParseObjc.cpp
index c557687..dff6e0c 100644
--- a/Parse/ParseObjc.cpp
+++ b/Parse/ParseObjc.cpp
@@ -1067,10 +1067,10 @@
 ///  objc-throw-statement:
 ///    throw expression[opt];
 ///
-Parser::DeclTy *Parser::ParseObjCThrowStmt(SourceLocation &atLoc) {
+Parser::DeclTy *Parser::ParseObjCThrowStmt(SourceLocation atLoc) {
   ConsumeToken(); // consume throw
   if (Tok.getKind() != tok::semi) {
-    ExprResult Res = ParseAssignmentExpression();
+    ExprResult Res = ParseExpression();
     if (Res.isInvalid) {
       SkipUntil(tok::semi);
       return 0;
@@ -1090,7 +1090,7 @@
 ///     parameter-declaration
 ///     '...' [OBJC2]
 ///
-Parser::DeclTy *Parser::ParseObjCTryStmt(SourceLocation &atLoc) {
+Parser::DeclTy *Parser::ParseObjCTryStmt(SourceLocation atLoc) {
   bool catch_or_finally_seen = false;
   ConsumeToken(); // consume try
   if (Tok.getKind() != tok::l_brace) {
@@ -1172,21 +1172,21 @@
   StmtResult FnBody = ParseCompoundStatementBody();
 }
 
-Parser::ExprResult Parser::ParseObjCExpression(SourceLocation &AtLoc) {
+Parser::ExprResult Parser::ParseObjCExpression(SourceLocation AtLoc) {
 
   switch (Tok.getKind()) {
     case tok::string_literal:    // primary-expression: string-literal
     case tok::wide_string_literal:
-      return ParseObjCStringLiteral();
+      return ParsePostfixExpressionSuffix(ParseObjCStringLiteral());
     default:
       break;
   }
   
   switch (Tok.getIdentifierInfo()->getObjCKeywordID()) {
     case tok::objc_encode:
-      return ParseObjCEncodeExpression();
+      return ParsePostfixExpressionSuffix(ParseObjCEncodeExpression());
     case tok::objc_protocol:
-      return ParseObjCProtocolExpression();
+      return ParsePostfixExpressionSuffix(ParseObjCProtocolExpression());
     default:
       Diag(AtLoc, diag::err_unexpected_at);
       SkipUntil(tok::semi);
diff --git a/Parse/ParseStmt.cpp b/Parse/ParseStmt.cpp
index d37973b..7dc6a62 100644
--- a/Parse/ParseStmt.cpp
+++ b/Parse/ParseStmt.cpp
@@ -34,8 +34,8 @@
 ///         selection-statement
 ///         iteration-statement
 ///         jump-statement
-/// [OBC]   objc-throw-statement         [TODO]
-/// [OBC]   objc-try-catch-statement     [TODO]
+/// [OBC]   objc-throw-statement
+/// [OBC]   objc-try-catch-statement
 /// [OBC]   objc-synchronized-statement  [TODO]
 /// [GNU]   asm-statement
 /// [OMP]   openmp-construct             [TODO]
@@ -64,9 +64,9 @@
 ///         'return' expression[opt] ';'
 /// [GNU]   'goto' '*' expression ';'
 ///
-/// [OBC] objc-throw-statement:           [TODO]
-/// [OBC]   '@' 'throw' expression ';'    [TODO]
-/// [OBC]   '@' 'throw' ';'               [TODO]
+/// [OBC] objc-throw-statement:
+/// [OBC]   '@' 'throw' expression ';'
+/// [OBC]   '@' 'throw' ';' 
 /// 
 Parser::StmtResult Parser::ParseStatementOrDeclaration(bool OnlyStatement) {
   const char *SemiError = 0;
@@ -91,19 +91,28 @@
         return ParseObjCTryStmt(AtLoc);
       else if (Tok.getIdentifierInfo()->getObjCKeywordID() == tok::objc_throw)
         return ParseObjCThrowStmt(AtLoc);
+      ExprResult Res = ParseExpressionWithLeadingAt(AtLoc);
+      if (Res.isInvalid) {
+        // If the expression is invalid, skip ahead to the next semicolon. Not
+        // doing this opens us up to the possibility of infinite loops if
+        // ParseExpression does not consume any tokens.
+        SkipUntil(tok::semi);
+        return true;
+      }
+      // Otherwise, eat the semicolon.
+      ExpectAndConsume(tok::semi, diag::err_expected_semi_after_expr);
+      return Actions.ActOnExprStmt(Res.Val);
     }
-    // Fall thru.
 
   default:
-    if (Kind != tok::at && !OnlyStatement && isDeclarationSpecifier()) {
+    if (!OnlyStatement && isDeclarationSpecifier()) {
       return Actions.ActOnDeclStmt(ParseDeclaration(Declarator::BlockContext));
     } else if (Tok.getKind() == tok::r_brace) {
       Diag(Tok, diag::err_expected_statement);
       return true;
     } else {
       // expression[opt] ';'
-      ExprResult Res = (Kind == tok::at) ? ParseExpressionWithLeadingAt(AtLoc) 
-				         : ParseExpression();
+      ExprResult Res = ParseExpression();
       if (Res.isInvalid) {
         // If the expression is invalid, skip ahead to the next semicolon.  Not
         // doing this opens us up to the possibility of infinite loops if
diff --git a/Sema/SemaDecl.cpp b/Sema/SemaDecl.cpp
index 2c7554b..25dd0c9 100644
--- a/Sema/SemaDecl.cpp
+++ b/Sema/SemaDecl.cpp
@@ -1729,27 +1729,28 @@
     if (IDecl)
       ImplMethodsVsClassMethods(ImplClass, IDecl);
   }
-  else if (isa<ObjcCategoryImplDecl>(static_cast<Decl *>(ClassDecl))) {
-    ObjcCategoryImplDecl* CatImplClass = cast<ObjcCategoryImplDecl>(
+  else {
+    ObjcCategoryImplDecl* CatImplClass = dyn_cast<ObjcCategoryImplDecl>(
                                           static_cast<Decl*>(ClassDecl));
-    CatImplClass->ObjcAddCatImplMethods(&insMethods[0], insMethods.size(),
-                                        &clsMethods[0], clsMethods.size());
-    ObjcInterfaceDecl* IDecl = CatImplClass->getClassInterface();
-    // Find category interface decl and then check that all methods declared
-    // in this interface is implemented in the category @implementation.
-    if (IDecl) {
-      for (ObjcCategoryDecl *Categories = IDecl->getListCategories();
-           Categories; Categories = Categories->getNextClassCategory()) {
-        if (Categories->getCatName() == CatImplClass->getObjcCatName()) {
-          ImplCategoryMethodsVsIntfMethods(CatImplClass, Categories);
-          break;
+    if (CatImplClass) {
+      CatImplClass->ObjcAddCatImplMethods(&insMethods[0], insMethods.size(),
+                                          &clsMethods[0], clsMethods.size());
+      ObjcInterfaceDecl* IDecl = CatImplClass->getClassInterface();
+      // Find category interface decl and then check that all methods declared
+      // in this interface is implemented in the category @implementation.
+      if (IDecl) {
+        for (ObjcCategoryDecl *Categories = IDecl->getListCategories();
+             Categories; Categories = Categories->getNextClassCategory()) {
+          if (Categories->getCatName() == CatImplClass->getObjcCatName()) {
+            ImplCategoryMethodsVsIntfMethods(CatImplClass, Categories);
+            break;
+          }
         }
       }
     }
+    else
+      assert(0 && "Sema::ActOnAddMethodsToObjcDecl(): Unknown DeclTy");
   }
-  else
-    assert(0 && "Sema::ActOnAddMethodsToObjcDecl(): Unknown DeclTy");
-  return;
 }
 
 Sema::DeclTy *Sema::ActOnMethodDeclaration(SourceLocation MethodLoc, 
diff --git a/include/clang/Parse/Parser.h b/include/clang/Parse/Parser.h
index db83443..ce98d9d 100644
--- a/include/clang/Parse/Parser.h
+++ b/include/clang/Parse/Parser.h
@@ -272,8 +272,8 @@
   DeclTy *ParseObjCAtAliasDeclaration(SourceLocation atLoc);
   DeclTy *ParseObjCPropertySynthesize(SourceLocation atLoc);
   DeclTy *ParseObjCPropertyDynamic(SourceLocation atLoc);
-  DeclTy *ParseObjCTryStmt(SourceLocation &atLoc);
-  DeclTy *ParseObjCThrowStmt(SourceLocation &atLoc);
+  DeclTy *ParseObjCTryStmt(SourceLocation atLoc);
+  DeclTy *ParseObjCThrowStmt(SourceLocation atLoc);
   
   IdentifierInfo *ParseObjCSelector();
   // Definitions for Objective-c context sensitive keywords recognition.
@@ -317,7 +317,7 @@
   ExprResult ParseAssignmentExpression();  // Expr that doesn't include commas.
   
   ExprResult ParseExpressionWithLeadingIdentifier(const Token &Tok);
-  ExprResult ParseExpressionWithLeadingAt(SourceLocation &AtLoc);
+  ExprResult ParseExpressionWithLeadingAt(SourceLocation AtLoc);
   ExprResult ParseAssignmentExprWithLeadingIdentifier(const Token &Tok);
   ExprResult ParseAssignmentExpressionWithLeadingStar(const Token &Tok);
 
@@ -363,7 +363,7 @@
   
   //===--------------------------------------------------------------------===//
   // Objective-C Expressions
-  ExprResult ParseObjCExpression(SourceLocation &AtLocation);
+  ExprResult ParseObjCExpression(SourceLocation AtLocation);
   ExprResult ParseObjCStringLiteral();
   ExprResult ParseObjCEncodeExpression();
   ExprResult ParseObjCProtocolExpression();
diff --git a/test/Parser/encode.m b/test/Parser/encode.m
new file mode 100644
index 0000000..ce12882
--- /dev/null
+++ b/test/Parser/encode.m
@@ -0,0 +1,8 @@
+// RUN: clang -fsyntax-only -verify %s
+
+int main(void) {
+  const char ch = @encode(char *)[2];
+  char c = @encode(char *)[2] + 4;
+  return c;
+}
+
diff --git a/test/Parser/objc-try-catch-1.m b/test/Parser/objc-try-catch-1.m
index f4a1201..6a0acd1 100644
--- a/test/Parser/objc-try-catch-1.m
+++ b/test/Parser/objc-try-catch-1.m
@@ -1,3 +1,5 @@
+// RUN: clang -fsyntax-only -verify %s
+
 void * proc();
 
 @interface Frob
@@ -22,7 +24,7 @@
                 return proc();
           }
           @catch (Frob* ex) {
-                @throw;
+                @throw 1,2;
           }
 	  @catch(...) {
 	    @throw (4,3,proc());
