diff --git a/src/plugins/cpptools/cppcodeformatter.cpp b/src/plugins/cpptools/cppcodeformatter.cpp
index 3a7462be9b6b355b54ec59ca0820b90a24059408..3c13d10f58983d6689d1b2ee6ee8ae660d951153 100644
--- a/src/plugins/cpptools/cppcodeformatter.cpp
+++ b/src/plugins/cpptools/cppcodeformatter.cpp
@@ -317,12 +317,14 @@ void CodeFormatter::recalculateStateAfter(const QTextBlock &block)
             switch (kind) {
             case T_SEMICOLON:   turnInto(for_statement_condition); break;
             case T_LPAREN:      enter(condition_paren_open); break;
+            case T_RPAREN:      turnInto(for_statement_expression); continue;
             } break;
 
         case for_statement_condition:
             switch (kind) {
             case T_SEMICOLON:   turnInto(for_statement_expression); break;
             case T_LPAREN:      enter(condition_paren_open); break;
+            case T_RPAREN:      turnInto(for_statement_expression); continue;
             } break;
 
         case for_statement_expression:
diff --git a/tests/auto/cplusplus/codeformatter/tst_codeformatter.cpp b/tests/auto/cplusplus/codeformatter/tst_codeformatter.cpp
index 155a28810a4eaf6b972315145d335b31e498f7fe..0b240fa107c848ea08ade7ac06894d057c1136fd 100644
--- a/tests/auto/cplusplus/codeformatter/tst_codeformatter.cpp
+++ b/tests/auto/cplusplus/codeformatter/tst_codeformatter.cpp
@@ -33,6 +33,7 @@ private Q_SLOTS:
     void classAccess();
     void ternary();
     void objcAtDeclarations();
+    void objcCallAndFor();
     void braceList();
     void bug1();
     void bug2();
@@ -666,6 +667,24 @@ void tst_CodeFormatter::objcAtDeclarations()
     checkIndent(data);
 }
 
+void tst_CodeFormatter::objcCallAndFor()
+{
+    QList<Line> data;
+    data << Line("void foo() {")
+         << Line("    NSArray *windows = [NSApp windows];")
+         << Line("    for (NSWindow *window in windows) {")
+         << Line("        NSArray *drawers = [window drawers];")
+         << Line("        for (NSDrawer *drawer in drawers) {")
+         << Line("            NSArray *views = [[drawer contentView] subviews];")
+         << Line("            int x;")
+         << Line("        }")
+         << Line("    }")
+         << Line("}")
+         << Line("int y;")
+         ;
+    checkIndent(data);
+}
+
 void tst_CodeFormatter::switch1()
 {
     QList<Line> data;