diff --git a/src/libs/cplusplus/ResolveExpression.cpp b/src/libs/cplusplus/ResolveExpression.cpp
index e965c4053a922f9fd78f281684fa6896dd87e71a..2425fef422607dcea3663609adf9b201dbc5e052 100644
--- a/src/libs/cplusplus/ResolveExpression.cpp
+++ b/src/libs/cplusplus/ResolveExpression.cpp
@@ -322,11 +322,6 @@ bool ResolveExpression::visit(ThrowExpressionAST *)
     return false;
 }
 
-bool ResolveExpression::visit(ObjCThrowExpressionAST *)
-{
-    return false;
-}
-
 bool ResolveExpression::visit(TypeIdAST *)
 {
     return false;
diff --git a/src/libs/cplusplus/ResolveExpression.h b/src/libs/cplusplus/ResolveExpression.h
index 25d1caefe5f40da5ea146f86a3791bf7b650c34a..3a367964223b1ed7b5fa3a5d17607fcb69ba33e6 100644
--- a/src/libs/cplusplus/ResolveExpression.h
+++ b/src/libs/cplusplus/ResolveExpression.h
@@ -90,7 +90,6 @@ protected:
     virtual bool visit(NestedExpressionAST *ast);
     virtual bool visit(StringLiteralAST *ast);
     virtual bool visit(ThrowExpressionAST *ast);
-    virtual bool visit(ObjCThrowExpressionAST *ast);
     virtual bool visit(TypeIdAST *ast);
     virtual bool visit(UnaryExpressionAST *ast);
     virtual bool visit(CompoundLiteralAST *ast);
diff --git a/src/shared/cplusplus/AST.cpp b/src/shared/cplusplus/AST.cpp
index 40893f4ca59c162656848faf313e85dab90c3730..51f5ce0a5fcbcac1029d248b8bb28b81fc937be2 100644
--- a/src/shared/cplusplus/AST.cpp
+++ b/src/shared/cplusplus/AST.cpp
@@ -1691,6 +1691,7 @@ unsigned ThisExpressionAST::lastToken() const
     return this_token + 1;
 }
 
+
 unsigned ThrowExpressionAST::firstToken() const
 {
     return throw_token;
@@ -1703,20 +1704,6 @@ unsigned ThrowExpressionAST::lastToken() const
     return throw_token + 1;
 }
 
-unsigned ObjCThrowExpressionAST::firstToken() const
-{
-    return at_token;
-}
-
-unsigned ObjCThrowExpressionAST::lastToken() const
-{
-    if (expression)
-        return expression->lastToken();
-    if (throw_token)
-        return throw_token + 1;
-    return at_token + 1;
-}
-
 unsigned TranslationUnitAST::firstToken() const
 {
     if(declaration_list)
@@ -2405,49 +2392,3 @@ unsigned ObjCSynchronizedStatementAST::lastToken() const
     if (synchronized_token) return synchronized_token + 1;
     return at_token + 1;
 }
-
-unsigned ObjCTryBlockStatementAST::firstToken() const
-{ return at_token; }
-
-unsigned ObjCTryBlockStatementAST::lastToken() const
-{
-    if (finally_clause)
-        return finally_clause->lastToken();
-    if (catch_clause_list)
-        return catch_clause_list->lastToken();
-    if (statement)
-        return statement->lastToken();
-    if (try_token)
-        return try_token + 1;
-    return at_token + 1;
-}
-
-unsigned ObjCCatchClauseAST::firstToken() const
-{ return at_token; }
-
-unsigned ObjCCatchClauseAST::lastToken() const
-{
-    if (statement)
-        return statement->lastToken();
-    if (rparen_token)
-        return rparen_token + 1;
-    if (exception_declaration)
-        return exception_declaration->lastToken();
-    if (lparen_token)
-        return lparen_token + 1;
-    if (catch_token)
-        return catch_token + 1;
-    return at_token + 1;
-}
-
-unsigned ObjCFinallyClauseAST::firstToken() const
-{ return at_token; }
-
-unsigned ObjCFinallyClauseAST::lastToken() const
-{
-    if (statement)
-        return statement->lastToken();
-    if (finally_token)
-        return finally_token + 1;
-    return at_token + 1;
-}
diff --git a/src/shared/cplusplus/AST.h b/src/shared/cplusplus/AST.h
index 52498c7da54caeb4fefe42e9fcdf296f1b46a6cf..76ec773226ef7f619cf148b2a85421c072a839bb 100644
--- a/src/shared/cplusplus/AST.h
+++ b/src/shared/cplusplus/AST.h
@@ -218,13 +218,11 @@ public:
     virtual NewPlacementAST *asNewPlacement() { return 0; }
     virtual NewTypeIdAST *asNewTypeId() { return 0; }
     virtual NumericLiteralAST *asNumericLiteral() { return 0; }
-    virtual ObjCCatchClauseAST *asObjCCatchClause() { return 0; }
     virtual ObjCClassDeclarationAST *asObjCClassDeclaration() { return 0; }
     virtual ObjCClassForwardDeclarationAST *asObjCClassForwardDeclaration() { return 0; }
     virtual ObjCDynamicPropertiesDeclarationAST *asObjCDynamicPropertiesDeclaration() { return 0; }
     virtual ObjCEncodeExpressionAST *asObjCEncodeExpression() { return 0; }
     virtual ObjCFastEnumerationAST *asObjCFastEnumeration() { return 0; }
-    virtual ObjCFinallyClauseAST *asObjCFinallyClause() { return 0; }
     virtual ObjCInstanceVariablesDeclarationAST *asObjCInstanceVariablesDeclaration() { return 0; }
     virtual ObjCMessageArgumentAST *asObjCMessageArgument() { return 0; }
     virtual ObjCMessageArgumentDeclarationAST *asObjCMessageArgumentDeclaration() { return 0; }
@@ -245,8 +243,6 @@ public:
     virtual ObjCSynchronizedStatementAST *asObjCSynchronizedStatement() { return 0; }
     virtual ObjCSynthesizedPropertiesDeclarationAST *asObjCSynthesizedPropertiesDeclaration() { return 0; }
     virtual ObjCSynthesizedPropertyAST *asObjCSynthesizedProperty() { return 0; }
-    virtual ObjCThrowExpressionAST *asObjCThrowExpression() { return 0; }
-    virtual ObjCTryBlockStatementAST *asObjCTryBlockStatement() { return 0; }
     virtual ObjCTypeNameAST *asObjCTypeName() { return 0; }
     virtual ObjCVisibilityDeclarationAST *asObjCVisibilityDeclaration() { return 0; }
     virtual OperatorAST *asOperator() { return 0; }
@@ -2363,26 +2359,6 @@ protected:
     virtual bool match0(AST *, ASTMatcher *);
 };
 
-class CPLUSPLUS_EXPORT ObjCThrowExpressionAST: public ExpressionAST
-{
-public:
-    unsigned at_token;
-    unsigned throw_token;
-    ExpressionAST *expression;
-
-public:
-    virtual ObjCThrowExpressionAST *asObjCThrowExpression() { return this; }
-
-    virtual unsigned firstToken() const;
-    virtual unsigned lastToken() const;
-
-    virtual ObjCThrowExpressionAST *clone(MemoryPool *pool) const;
-
-protected:
-    virtual void accept0(ASTVisitor *visitor);
-    virtual bool match0(AST *, ASTMatcher *);
-};
-
 class CPLUSPLUS_EXPORT TranslationUnitAST: public AST
 {
 public:
@@ -3193,74 +3169,6 @@ protected:
     virtual bool match0(AST *, ASTMatcher *);
 };
 
-class CPLUSPLUS_EXPORT ObjCTryBlockStatementAST: public StatementAST
-{
-public:
-    unsigned at_token;
-    unsigned try_token;
-    StatementAST *statement;
-    ObjCCatchClauseListAST *catch_clause_list;
-    ObjCFinallyClauseAST *finally_clause;
-
-public:
-    virtual ObjCTryBlockStatementAST *asObjCTryBlockStatement() { return this; }
-
-    virtual unsigned firstToken() const;
-    virtual unsigned lastToken() const;
-
-    virtual ObjCTryBlockStatementAST *clone(MemoryPool *pool) const;
-
-protected:
-    virtual void accept0(ASTVisitor *visitor);
-    virtual bool match0(AST *, ASTMatcher *);
-};
-
-class CPLUSPLUS_EXPORT ObjCCatchClauseAST: public StatementAST
-{
-public:
-    unsigned at_token;
-    unsigned catch_token;
-    unsigned lparen_token;
-    ExceptionDeclarationAST *exception_declaration;
-    unsigned rparen_token;
-    StatementAST *statement;
-
-public: // annotations
-    Block *symbol;
-
-public:
-    virtual ObjCCatchClauseAST *asObjCCatchClause() { return this; }
-
-    virtual unsigned firstToken() const;
-    virtual unsigned lastToken() const;
-
-    virtual ObjCCatchClauseAST *clone(MemoryPool *pool) const;
-
-protected:
-    virtual void accept0(ASTVisitor *visitor);
-    virtual bool match0(AST *, ASTMatcher *);
-};
-
-class CPLUSPLUS_EXPORT ObjCFinallyClauseAST: public StatementAST
-{
-public:
-    unsigned at_token;
-    unsigned finally_token;
-    StatementAST *statement;
-
-public:
-    virtual ObjCFinallyClauseAST *asObjCFinallyClause() { return this; }
-
-    virtual unsigned firstToken() const;
-    virtual unsigned lastToken() const;
-
-    virtual ObjCFinallyClauseAST *clone(MemoryPool *pool) const;
-
-protected:
-    virtual void accept0(ASTVisitor *visitor);
-    virtual bool match0(AST *, ASTMatcher *);
-};
-
 } // end of namespace CPlusPlus
 
 
diff --git a/src/shared/cplusplus/ASTClone.cpp b/src/shared/cplusplus/ASTClone.cpp
index a909db03b7c984a7ba8128fd743a612fa25ff36d..d4247ad1160e8a61879cd3ce3f230717bde16ae3 100644
--- a/src/shared/cplusplus/ASTClone.cpp
+++ b/src/shared/cplusplus/ASTClone.cpp
@@ -1108,16 +1108,6 @@ ThrowExpressionAST *ThrowExpressionAST::clone(MemoryPool *pool) const
     return ast;
 }
 
-ObjCThrowExpressionAST *ObjCThrowExpressionAST::clone(MemoryPool *pool) const
-{
-    ObjCThrowExpressionAST *ast = new (pool) ObjCThrowExpressionAST;
-    ast->at_token = at_token;
-    ast->throw_token = throw_token;
-    if (expression)
-        ast->expression = expression->clone(pool);
-    return ast;
-}
-
 TranslationUnitAST *TranslationUnitAST::clone(MemoryPool *pool) const
 {
     TranslationUnitAST *ast = new (pool) TranslationUnitAST;
@@ -1574,42 +1564,3 @@ ObjCSynchronizedStatementAST *ObjCSynchronizedStatementAST::clone(MemoryPool *po
     return ast;
 }
 
-ObjCTryBlockStatementAST *ObjCTryBlockStatementAST::clone(MemoryPool *pool) const
-{
-    ObjCTryBlockStatementAST *ast = new (pool) ObjCTryBlockStatementAST;
-    ast->at_token = at_token;
-    ast->try_token = try_token;
-    if (statement)
-        ast->statement = statement->clone(pool);
-    for (ObjCCatchClauseListAST *iter = catch_clause_list, **ast_iter = &ast->catch_clause_list;
-         iter; iter = iter->next, ast_iter = &(*ast_iter)->next)
-        *ast_iter = new (pool) ObjCCatchClauseListAST((iter->value) ? iter->value->clone(pool) : 0);
-    if (finally_clause)
-        ast->finally_clause = finally_clause->clone(pool);
-    return ast;
-}
-
-ObjCCatchClauseAST *ObjCCatchClauseAST::clone(MemoryPool *pool) const
-{
-    ObjCCatchClauseAST *ast = new (pool) ObjCCatchClauseAST;
-    ast->at_token = at_token;
-    ast->catch_token = catch_token;
-    ast->lparen_token = lparen_token;
-    if (exception_declaration)
-        ast->exception_declaration = exception_declaration->clone(pool);
-    ast->rparen_token = rparen_token;
-    if (statement)
-        ast->statement = statement->clone(pool);
-    return ast;
-}
-
-ObjCFinallyClauseAST *ObjCFinallyClauseAST::clone(MemoryPool *pool) const
-{
-    ObjCFinallyClauseAST *ast = new (pool) ObjCFinallyClauseAST;
-    ast->at_token = at_token;
-    ast->finally_token = finally_token;
-    if (statement)
-        ast->statement = statement->clone(pool);
-    return ast;
-}
-
diff --git a/src/shared/cplusplus/ASTMatch0.cpp b/src/shared/cplusplus/ASTMatch0.cpp
index 26a485a6c15ecd00bca363d458137a01814ec6b1..a2fcf8e0b96d4f4457a68b8386023b234aa55510 100644
--- a/src/shared/cplusplus/ASTMatch0.cpp
+++ b/src/shared/cplusplus/ASTMatch0.cpp
@@ -793,14 +793,6 @@ bool ThrowExpressionAST::match0(AST *pattern, ASTMatcher *matcher)
     return false;
 }
 
-bool ObjCThrowExpressionAST::match0(AST *pattern, ASTMatcher *matcher)
-{
-    if (ObjCThrowExpressionAST *_other = pattern->asObjCThrowExpression())
-        return matcher->match(this, _other);
-
-    return false;
-}
-
 bool TranslationUnitAST::match0(AST *pattern, ASTMatcher *matcher)
 {
     if (TranslationUnitAST *_other = pattern->asTranslationUnit())
@@ -1089,27 +1081,3 @@ bool ObjCSynchronizedStatementAST::match0(AST *pattern, ASTMatcher *matcher)
     return false;
 }
 
-bool ObjCTryBlockStatementAST::match0(AST *pattern, ASTMatcher *matcher)
-{
-    if (ObjCTryBlockStatementAST *_other = pattern->asObjCTryBlockStatement())
-        return matcher->match(this, _other);
-
-    return false;
-}
-
-bool ObjCCatchClauseAST::match0(AST *pattern, ASTMatcher *matcher)
-{
-    if (ObjCCatchClauseAST *_other = pattern->asObjCCatchClause())
-        return matcher->match(this, _other);
-
-    return false;
-}
-
-bool ObjCFinallyClauseAST::match0(AST *pattern, ASTMatcher *matcher)
-{
-    if (ObjCFinallyClauseAST *_other = pattern->asObjCFinallyClause())
-        return matcher->match(this, _other);
-
-    return false;
-}
-
diff --git a/src/shared/cplusplus/ASTMatcher.cpp b/src/shared/cplusplus/ASTMatcher.cpp
index 137b973e565db1fe99c6c73f31f7278fb2ca1f86..627fe3abf85a5f7f3551ec8830cff0a80c95ca94 100644
--- a/src/shared/cplusplus/ASTMatcher.cpp
+++ b/src/shared/cplusplus/ASTMatcher.cpp
@@ -1848,23 +1848,6 @@ bool ASTMatcher::match(ThrowExpressionAST *node, ThrowExpressionAST *pattern)
     return true;
 }
 
-bool ASTMatcher::match(ObjCThrowExpressionAST *node, ObjCThrowExpressionAST *pattern)
-{
-    (void) node;
-    (void) pattern;
-
-    pattern->at_token = node->at_token;
-
-    pattern->throw_token = node->throw_token;
-
-    if (! pattern->expression)
-        pattern->expression = node->expression;
-    else if (! AST::match(node->expression, pattern->expression, this))
-        return false;
-
-    return true;
-}
-
 bool ASTMatcher::match(TranslationUnitAST *node, TranslationUnitAST *pattern)
 {
     (void) node;
@@ -2649,73 +2632,3 @@ bool ASTMatcher::match(ObjCSynchronizedStatementAST *node, ObjCSynchronizedState
     return true;
 }
 
-bool ASTMatcher::match(ObjCTryBlockStatementAST *node, ObjCTryBlockStatementAST *pattern)
-{
-    (void) node;
-    (void) pattern;
-
-    pattern->at_token = node->at_token;
-
-    pattern->try_token = node->try_token;
-
-    if (! pattern->statement)
-        pattern->statement = node->statement;
-    else if (! AST::match(node->statement, pattern->statement, this))
-        return false;
-
-    if (! pattern->catch_clause_list)
-        pattern->catch_clause_list = node->catch_clause_list;
-    else if (! AST::match(node->catch_clause_list, pattern->catch_clause_list, this))
-        return false;
-
-    if (! pattern->finally_clause)
-        pattern->finally_clause = node->finally_clause;
-    else if (! AST::match(node->finally_clause, pattern->finally_clause, this))
-        return false;
-
-    return true;
-}
-
-bool ASTMatcher::match(ObjCCatchClauseAST *node, ObjCCatchClauseAST *pattern)
-{
-    (void) node;
-    (void) pattern;
-
-    pattern->at_token = node->at_token;
-
-    pattern->catch_token = node->catch_token;
-
-    pattern->lparen_token = node->lparen_token;
-
-    if (! pattern->exception_declaration)
-        pattern->exception_declaration = node->exception_declaration;
-    else if (! AST::match(node->exception_declaration, pattern->exception_declaration, this))
-        return false;
-
-    pattern->rparen_token = node->rparen_token;
-
-    if (! pattern->statement)
-        pattern->statement = node->statement;
-    else if (! AST::match(node->statement, pattern->statement, this))
-        return false;
-
-    return true;
-}
-
-bool ASTMatcher::match(ObjCFinallyClauseAST *node, ObjCFinallyClauseAST *pattern)
-{
-    (void) node;
-    (void) pattern;
-
-    pattern->at_token = node->at_token;
-
-    pattern->finally_token = node->finally_token;
-
-    if (! pattern->statement)
-        pattern->statement = node->statement;
-    else if (! AST::match(node->statement, pattern->statement, this))
-        return false;
-
-    return true;
-}
-
diff --git a/src/shared/cplusplus/ASTMatcher.h b/src/shared/cplusplus/ASTMatcher.h
index 38331077fb0aceec4fb552add994c8367563c3cc..c6466a4919f6b171d202b48c36f9ab6e6f0322f7 100644
--- a/src/shared/cplusplus/ASTMatcher.h
+++ b/src/shared/cplusplus/ASTMatcher.h
@@ -126,7 +126,6 @@ public:
     virtual bool match(TemplateTypeParameterAST *node, TemplateTypeParameterAST *pattern);
     virtual bool match(ThisExpressionAST *node, ThisExpressionAST *pattern);
     virtual bool match(ThrowExpressionAST *node, ThrowExpressionAST *pattern);
-    virtual bool match(ObjCThrowExpressionAST *node, ObjCThrowExpressionAST *pattern);
     virtual bool match(TranslationUnitAST *node, TranslationUnitAST *pattern);
     virtual bool match(TryBlockStatementAST *node, TryBlockStatementAST *pattern);
     virtual bool match(TypeConstructorCallAST *node, TypeConstructorCallAST *pattern);
@@ -170,9 +169,6 @@ public:
     virtual bool match(ObjCDynamicPropertiesDeclarationAST *node, ObjCDynamicPropertiesDeclarationAST *pattern);
     virtual bool match(ObjCFastEnumerationAST *node, ObjCFastEnumerationAST *pattern);
     virtual bool match(ObjCSynchronizedStatementAST *node, ObjCSynchronizedStatementAST *pattern);
-    virtual bool match(ObjCTryBlockStatementAST *node, ObjCTryBlockStatementAST *pattern);
-    virtual bool match(ObjCCatchClauseAST *node, ObjCCatchClauseAST *pattern);
-    virtual bool match(ObjCFinallyClauseAST *node, ObjCFinallyClauseAST *pattern);
 };
 
 } // end of namespace CPlusPlus
diff --git a/src/shared/cplusplus/ASTVisit.cpp b/src/shared/cplusplus/ASTVisit.cpp
index 6620551dfc8b6ae0e3a4ae076c230e04f5c3dbd9..8b53d99f7f3cd40263b6c184e7fcc0cfcfe8ac5a 100644
--- a/src/shared/cplusplus/ASTVisit.cpp
+++ b/src/shared/cplusplus/ASTVisit.cpp
@@ -831,14 +831,6 @@ void ThrowExpressionAST::accept0(ASTVisitor *visitor)
     visitor->endVisit(this);
 }
 
-void ObjCThrowExpressionAST::accept0(ASTVisitor *visitor)
-{
-    if (visitor->visit(this)) {
-        accept(expression, visitor);
-    }
-    visitor->endVisit(this);
-}
-
 void TranslationUnitAST::accept0(ASTVisitor *visitor)
 {
     if (visitor->visit(this)) {
@@ -1155,30 +1147,3 @@ void ObjCSynchronizedStatementAST::accept0(ASTVisitor *visitor)
     visitor->endVisit(this);
 }
 
-void ObjCTryBlockStatementAST::accept0(ASTVisitor *visitor)
-{
-    if (visitor->visit(this)) {
-        accept(statement, visitor);
-        accept(catch_clause_list, visitor);
-        accept(finally_clause, visitor);
-    }
-    visitor->endVisit(this);
-}
-
-void ObjCCatchClauseAST::accept0(ASTVisitor *visitor)
-{
-    if (visitor->visit(this)) {
-        accept(exception_declaration, visitor);
-        accept(statement, visitor);
-    }
-    visitor->endVisit(this);
-}
-
-void ObjCFinallyClauseAST::accept0(ASTVisitor *visitor)
-{
-    if (visitor->visit(this)) {
-        accept(statement, visitor);
-    }
-    visitor->endVisit(this);
-}
-
diff --git a/src/shared/cplusplus/ASTVisitor.h b/src/shared/cplusplus/ASTVisitor.h
index b07948f412772524b85e0d701fbf75e6364bb973..72a3f4b736e0ca2c45ee04e342ba2c499c8025ef 100644
--- a/src/shared/cplusplus/ASTVisitor.h
+++ b/src/shared/cplusplus/ASTVisitor.h
@@ -235,10 +235,6 @@ public:
     virtual bool visit(ObjCDynamicPropertiesDeclarationAST *) { return true; }
     virtual bool visit(ObjCFastEnumerationAST *) { return true; }
     virtual bool visit(ObjCSynchronizedStatementAST *) { return true; }
-    virtual bool visit(ObjCTryBlockStatementAST *) { return true; }
-    virtual bool visit(ObjCCatchClauseAST *) { return true; }
-    virtual bool visit(ObjCFinallyClauseAST *) { return true; }
-    virtual bool visit(ObjCThrowExpressionAST *) { return true; }
 
     virtual void endVisit(AccessDeclarationAST *) { }
     virtual void endVisit(QtPropertyDeclarationAST *) { }
@@ -373,10 +369,6 @@ public:
     virtual void endVisit(ObjCDynamicPropertiesDeclarationAST *) { }
     virtual void endVisit(ObjCFastEnumerationAST *) { }
     virtual void endVisit(ObjCSynchronizedStatementAST *) { }
-    virtual void endVisit(ObjCTryBlockStatementAST *) { }
-    virtual void endVisit(ObjCCatchClauseAST *) { }
-    virtual void endVisit(ObjCFinallyClauseAST *) { }
-    virtual void endVisit(ObjCThrowExpressionAST *) { }
 
 private:
     TranslationUnit *_translationUnit;
diff --git a/src/shared/cplusplus/ASTfwd.h b/src/shared/cplusplus/ASTfwd.h
index 97b74a0a02b469949e79559e7c1e1776422ddd15..d2a1d317d8111c4e9b802252084580f7f5047b38 100644
--- a/src/shared/cplusplus/ASTfwd.h
+++ b/src/shared/cplusplus/ASTfwd.h
@@ -125,13 +125,11 @@ class NewInitializerAST;
 class NewPlacementAST;
 class NewTypeIdAST;
 class NumericLiteralAST;
-class ObjCCatchClauseAST;
 class ObjCClassDeclarationAST;
 class ObjCClassForwardDeclarationAST;
 class ObjCDynamicPropertiesDeclarationAST;
 class ObjCEncodeExpressionAST;
 class ObjCFastEnumerationAST;
-class ObjCFinallyClauseAST;
 class ObjCInstanceVariablesDeclarationAST;
 class ObjCMessageArgumentAST;
 class ObjCMessageArgumentDeclarationAST;
@@ -152,8 +150,6 @@ class ObjCSelectorWithoutArgumentsAST;
 class ObjCSynchronizedStatementAST;
 class ObjCSynthesizedPropertiesDeclarationAST;
 class ObjCSynthesizedPropertyAST;
-class ObjCThrowExpressionAST;
-class ObjCTryBlockStatementAST;
 class ObjCTypeNameAST;
 class ObjCVisibilityDeclarationAST;
 class OperatorAST;
@@ -228,7 +224,6 @@ typedef List<ObjCSelectorArgumentAST *> ObjCSelectorArgumentListAST;
 typedef List<ObjCPropertyAttributeAST *> ObjCPropertyAttributeListAST;
 typedef List<ObjCMessageArgumentDeclarationAST *> ObjCMessageArgumentDeclarationListAST;
 typedef List<ObjCSynthesizedPropertyAST *> ObjCSynthesizedPropertyListAST;
-typedef List<ObjCCatchClauseAST *> ObjCCatchClauseListAST;
 
 typedef ExpressionListAST TemplateArgumentListAST;
 
diff --git a/src/shared/cplusplus/CheckExpression.cpp b/src/shared/cplusplus/CheckExpression.cpp
index 663f0c4f0bf1c5021b42ba70965c53505c0eb2ee..748fa9c9014a7abe9ee7bace53bc995965c72cc1 100644
--- a/src/shared/cplusplus/CheckExpression.cpp
+++ b/src/shared/cplusplus/CheckExpression.cpp
@@ -305,12 +305,6 @@ bool CheckExpression::visit(ThrowExpressionAST *ast)
     return false;
 }
 
-bool CheckExpression::visit(ObjCThrowExpressionAST *ast)
-{
-    FullySpecifiedType exprTy = semantic()->check(ast->expression, _scope);
-    return false;
-}
-
 bool CheckExpression::visit(TypeIdAST *ast)
 {
     FullySpecifiedType typeSpecTy = semantic()->check(ast->type_specifier_list, _scope);
diff --git a/src/shared/cplusplus/CheckExpression.h b/src/shared/cplusplus/CheckExpression.h
index 25b0a470240e50bfc3a83fe43c6eee805b1b2b7d..9cc1722d7c2fc6ffccee251bd1b015c13df62235 100644
--- a/src/shared/cplusplus/CheckExpression.h
+++ b/src/shared/cplusplus/CheckExpression.h
@@ -90,7 +90,6 @@ protected:
     virtual bool visit(NestedExpressionAST *ast);
     virtual bool visit(StringLiteralAST *ast);
     virtual bool visit(ThrowExpressionAST *ast);
-    virtual bool visit(ObjCThrowExpressionAST *ast);
     virtual bool visit(TypeIdAST *ast);
     virtual bool visit(UnaryExpressionAST *ast);
     virtual bool visit(QtMethodAST *ast);
diff --git a/src/shared/cplusplus/CheckStatement.cpp b/src/shared/cplusplus/CheckStatement.cpp
index dac65892ecfa374c2a5aebd236238c74917ef652..26e4e7c835acebfdeb046dc10a3123171076ce4a 100644
--- a/src/shared/cplusplus/CheckStatement.cpp
+++ b/src/shared/cplusplus/CheckStatement.cpp
@@ -379,35 +379,3 @@ bool CheckStatement::visit(QtMemberDeclarationAST *ast)
     _exprType = FullySpecifiedType();
     return false;
 }
-
-bool CheckStatement::visit(ObjCTryBlockStatementAST *ast)
-{
-    semantic()->check(ast->statement, _scope);
-    for (ObjCCatchClauseListAST *it = ast->catch_clause_list; it; it = it->next) {
-        semantic()->check(it->value, _scope);
-    }
-    _exprType = FullySpecifiedType();
-    return false;
-}
-
-bool CheckStatement::visit(ObjCCatchClauseAST *ast)
-{
-    Block *block = control()->newBlock(ast->at_token);
-    block->setStartOffset(tokenAt(ast->firstToken()).offset);
-    block->setEndOffset(tokenAt(ast->lastToken()).offset);
-    ast->symbol = block;
-    _scope->enterSymbol(block);
-    Scope *previousScope = switchScope(block->members());
-    semantic()->check(ast->exception_declaration, _scope);
-    semantic()->check(ast->statement, _scope);
-    (void) switchScope(previousScope);
-    _exprType = FullySpecifiedType();
-    return false;
-}
-
-bool CheckStatement::visit(ObjCFinallyClauseAST *ast)
-{
-    semantic()->check(ast->statement, _scope);
-    _exprType = FullySpecifiedType();
-    return false;
-}
diff --git a/src/shared/cplusplus/CheckStatement.h b/src/shared/cplusplus/CheckStatement.h
index dd77d5ba87cb45e8efc33f43170683a7019df668..dc8447f37e4ac500ed5b7a2afee537fcf3b3a68b 100644
--- a/src/shared/cplusplus/CheckStatement.h
+++ b/src/shared/cplusplus/CheckStatement.h
@@ -90,9 +90,6 @@ protected:
     virtual bool visit(CatchClauseAST *ast);
     virtual bool visit(WhileStatementAST *ast);
     virtual bool visit(QtMemberDeclarationAST *ast);
-    virtual bool visit(ObjCTryBlockStatementAST *ast);
-    virtual bool visit(ObjCCatchClauseAST *ast);
-    virtual bool visit(ObjCFinallyClauseAST *ast);
 
     bool forEachFastEnum(unsigned firstToken,
                          unsigned lastToken,
diff --git a/src/shared/cplusplus/Parser.cpp b/src/shared/cplusplus/Parser.cpp
index 62354e330463e5fd62b42dc43a8bb1115955e207..a6b6e0b1c8190f490f5aa5f6c9aac05ecebda360 100644
--- a/src/shared/cplusplus/Parser.cpp
+++ b/src/shared/cplusplus/Parser.cpp
@@ -362,17 +362,8 @@ bool Parser::skipUntilStatement()
                 return true;
 
             case T_AT:
-                if (objCEnabled()) {
-                    switch (LA(2)) {
-                    case T_SYNCHRONIZED:
-                    case T_TRY:
-                    case T_THROW:
-                       return true;
-                    default: {
-                        // INTENTIONAL FALL-THROUGH!
-                    }
-                    }
-                }
+                if (objCEnabled() && LA(2) == T_SYNCHRONIZED)
+                    return true;
 
             default:
                 consumeToken();
@@ -2451,12 +2442,8 @@ bool Parser::parseStatement(StatementAST *&node)
     } return true;
 
     case T_AT:
-        if (objCEnabled()) {
-            if (LA(2) == T_SYNCHRONIZED)
-                return parseObjCSynchronizedStatement(node);
-            if (LA(2) == T_TRY)
-                return parseObjCTryBlockStatement(node);
-        }
+        return objCEnabled() && LA(2) == T_SYNCHRONIZED
+                && parseObjCSynchronizedStatement(node);
 
     default:
         if (LA() == T_IDENTIFIER && LA(2) == T_COLON)
@@ -3565,7 +3552,7 @@ bool Parser::parseObjCStringLiteral(ExpressionAST *&node)
     if (LA() != T_AT || LA(2) != T_STRING_LITERAL)
         return false;
 
-    StringLiteralAST **ast = reinterpret_cast<StringLiteralAST **> (&node);
+    StringLiteralAST **ast = 0;
     while (LA()) {
         if (LA() == T_AT && LA(2) == T_STRING_LITERAL) {
             *ast = new (_pool) StringLiteralAST;
@@ -4516,14 +4503,6 @@ bool Parser::parseThrowExpression(ExpressionAST *&node)
         node = ast;
         return true;
     }
-    if (LA() == T_AT && LA(2) == T_THROW) {
-        ObjCThrowExpressionAST *ast = new (_pool) ObjCThrowExpressionAST;
-        ast->at_token = consumeToken();
-        ast->throw_token = consumeToken();
-        parseAssignmentExpression(ast->expression);
-        node = ast;
-        return true;
-    }
     return false;
 }
 
@@ -5394,51 +5373,3 @@ int Parser::peekAtQtContextKeyword() const
     const Identifier *id = tok().identifier;
     return classifyQtContextKeyword(id->chars(), id->size());
 }
-
-bool Parser::parseObjCTryBlockStatement(StatementAST *&node)
-{
-    DEBUG_THIS_RULE();
-    if (LA() == T_AT && LA(2) == T_TRY) {
-        ObjCTryBlockStatementAST *ast = new (_pool) ObjCTryBlockStatementAST;
-        ast->at_token = consumeToken();
-        ast->try_token = consumeToken();
-        parseCompoundStatement(ast->statement);
-        ObjCCatchClauseListAST **catch_clause_ptr = &ast->catch_clause_list;
-        while (parseObjCCatchClause(*catch_clause_ptr))
-            catch_clause_ptr = &(*catch_clause_ptr)->next;
-        parseObjCFinallyClause(ast->finally_clause);
-        node = ast;
-        return true;
-    }
-    return false;
-}
-
-bool Parser::parseObjCCatchClause(ObjCCatchClauseListAST *&node)
-{
-    DEBUG_THIS_RULE();
-    if (LA() == T_AT && LA(2) == T_CATCH) {
-        ObjCCatchClauseAST *ast = new (_pool) ObjCCatchClauseAST;
-        ast->at_token = consumeToken();
-        ast->catch_token = consumeToken();
-        match(T_LPAREN, &ast->lparen_token);
-        parseExceptionDeclaration(ast->exception_declaration);
-        match(T_RPAREN, &ast->rparen_token);
-        parseCompoundStatement(ast->statement);
-        node = new (_pool) ObjCCatchClauseListAST(ast);
-        return true;
-    }
-    return false;
-}
-
-bool Parser::parseObjCFinallyClause(ObjCFinallyClauseAST *&node)
-{
-    DEBUG_THIS_RULE();
-    if (LA() == T_AT && LA(2) == T_FINALLY) {
-        node = new (_pool) ObjCFinallyClauseAST;
-        node->at_token = consumeToken();
-        node->finally_token = consumeToken();
-        parseCompoundStatement(node->statement);
-        return true;
-    }
-    return false;
-}
diff --git a/src/shared/cplusplus/Parser.h b/src/shared/cplusplus/Parser.h
index 4be9bdd903fe2c70a1af91c02e3eb0e5cecf6538..ab4449ee743b218427ff7c260896b53a00e38685 100644
--- a/src/shared/cplusplus/Parser.h
+++ b/src/shared/cplusplus/Parser.h
@@ -251,9 +251,6 @@ public:
     bool parseObjCTypeQualifiers(unsigned &type_qualifier);
     bool peekAtObjCContextKeyword(int kind);
     bool parseObjCContextKeyword(int kind, unsigned &in_token);
-    bool parseObjCTryBlockStatement(StatementAST *&node);
-    bool parseObjCCatchClause(ObjCCatchClauseListAST *&node);
-    bool parseObjCFinallyClause(ObjCFinallyClauseAST *&node);
 
     bool lookAtObjCSelector() const;
 
diff --git a/tests/auto/cplusplus/ast/tst_ast.cpp b/tests/auto/cplusplus/ast/tst_ast.cpp
index a97b3b29a81a9a0fd90392c4b32be488abcedfd2..14e82b6e8b025ae7cbf988d0db0055638bbdac35 100644
--- a/tests/auto/cplusplus/ast/tst_ast.cpp
+++ b/tests/auto/cplusplus/ast/tst_ast.cpp
@@ -79,7 +79,6 @@ private slots:
     void objc_protocol_forward_declaration_1();
     void objc_protocol_definition_1();
     void objc_method_attributes_1();
-    void objc_exceptions();
 
     // expressions with (square) brackets
     void normal_array_access();
@@ -785,22 +784,6 @@ void tst_AST::objc_method_attributes_1()
     QCOMPARE(unit->spell(unavailableAttr->identifier_token), "unavailable");
 }
 
-void tst_AST::objc_exceptions()
-{
-    const char *src = "\n"
-                      "@try {@throw [NSException exceptionWithName:@\"FileNotFoundException\" reason:@\"Disk went wild.\" userInfo:nil];}\n"
-                      "@catch (FileNotFoundException *e) { [e raise]; }\n"
-                      "@catch (NSException *e) { @throw; }\n"
-                      "@catch(...){}\n"
-                      "@finally { }\n"
-                      ;
-
-    QSharedPointer<TranslationUnit> unit(parseStatement(src));
-
-    AST *ast = unit->ast();
-    QVERIFY(ast);
-}
-
 void tst_AST::normal_array_access()
 {
     QSharedPointer<TranslationUnit> unit(parseDeclaration("\n"
@@ -984,7 +967,8 @@ void tst_AST::objc_msg_send_expression_without_selector()
                                                           "int f() {\n"
                                                           "  NSObject *obj = [[[NSObject alloc] init] autorelease];\n"
                                                           "  return [obj];\n"
-                                                          "}", true));
+                                                          "}",
+                                                          true));
     AST *ast = unit->ast();
     QVERIFY(ast);