From 6d544bc2cad7dec084aa80c9e14a22ba3122166f Mon Sep 17 00:00:00 2001
From: Erik Verbruggen <erik.verbruggen@me.com>
Date: Mon, 27 May 2013 11:54:50 +0200
Subject: [PATCH] C++: handle braced return statements in indenter.

Task-number: QTCREATORBUG-9314

Change-Id: I59c026cce02b85eeb54f4d10d5c9fb0c59bfe28a
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@digia.com>
---
 src/plugins/cpptools/cppcodeformatter.cpp          |  2 ++
 .../cplusplus/codeformatter/tst_codeformatter.cpp  | 14 ++++++++++++++
 2 files changed, 16 insertions(+)

diff --git a/src/plugins/cpptools/cppcodeformatter.cpp b/src/plugins/cpptools/cppcodeformatter.cpp
index 1ad33ca0265..967bc9321c0 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 ba0eb2dfff8..b132e3c9ba7 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"
-- 
GitLab