diff --git a/src/plugins/cpptools/cppcodeformatter.cpp b/src/plugins/cpptools/cppcodeformatter.cpp
index 1ad33ca02659050bac123ea6ae537d5b82dd2fe1..967bc9321c0b539dc9915dc10b7ed44c10608e6e 100644
--- a/src/plugins/cpptools/cppcodeformatter.cpp
+++ b/src/plugins/cpptools/cppcodeformatter.cpp
@@ -207,6 +207,8 @@ void CodeFormatter::recalculateStateAfter(const QTextBlock &block)
                     // oops, the expression was a function declaration argument list, hand lbrace/colon to declaration_start
                     leave();
                     continue;
+                } else {
+                    turnInto(substatement_open);
                 }
                 break;
             default:            tryExpression(); break;
diff --git a/tests/auto/cplusplus/codeformatter/tst_codeformatter.cpp b/tests/auto/cplusplus/codeformatter/tst_codeformatter.cpp
index ba0eb2dfff8a8f1f19475160cc235db121ff74ea..b132e3c9ba75ae19d4b65965f9a0e5f8672cd644 100644
--- a/tests/auto/cplusplus/codeformatter/tst_codeformatter.cpp
+++ b/tests/auto/cplusplus/codeformatter/tst_codeformatter.cpp
@@ -126,6 +126,7 @@ private Q_SLOTS:
     void blockBraces1();
     void functionDefaultArgument();
     void attributeInAccessSpecifier();
+    void braceReturn();
 };
 
 struct Line {
@@ -2097,6 +2098,19 @@ void tst_CodeFormatter::attributeInAccessSpecifier()
     checkIndent(data);
 }
 
+void tst_CodeFormatter::braceReturn()
+{
+    QList<Line> data;
+    data << Line("class X {")
+         << Line("    void the_answer() {")
+         << Line("        return {42};")
+         << Line("    }")
+         << Line("    int x;")
+         << Line("};")
+         ;
+    checkIndent(data);
+}
+
 QTEST_MAIN(tst_CodeFormatter)
 
 #include "tst_codeformatter.moc"