From 0bdf1dc4069d62dbd3348b9ed1a42a6b468e0070 Mon Sep 17 00:00:00 2001
From: Christian Kamm <christian.d.kamm@nokia.com>
Date: Wed, 12 Sep 2012 14:35:49 +0200
Subject: [PATCH] C++11: Allow brace initializers in return statements.

Like return {1, 2};

Change-Id: I7442da1866b0106bc075783653c95c16ebedb51a
Reviewed-by: hjk <qthjk@ovi.com>
---
 src/libs/3rdparty/cplusplus/Parser.cpp                  | 5 ++++-
 tests/auto/cplusplus/cxx11/data/braceInitializers.1.cpp | 4 ++++
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/src/libs/3rdparty/cplusplus/Parser.cpp b/src/libs/3rdparty/cplusplus/Parser.cpp
index 187ba24f351..150b8c055f4 100644
--- a/src/libs/3rdparty/cplusplus/Parser.cpp
+++ b/src/libs/3rdparty/cplusplus/Parser.cpp
@@ -3102,7 +3102,10 @@ bool Parser::parseReturnStatement(StatementAST *&node)
     if (LA() == T_RETURN) {
         ReturnStatementAST *ast = new (_pool) ReturnStatementAST;
         ast->return_token = consumeToken();
-        parseExpression(ast->expression);
+        if (_cxx0xEnabled && LA() == T_LBRACE)
+            parseBracedInitList0x(ast->expression);
+        else
+            parseExpression(ast->expression);
         match(T_SEMICOLON, &ast->semicolon_token);
         node = ast;
         return true;
diff --git a/tests/auto/cplusplus/cxx11/data/braceInitializers.1.cpp b/tests/auto/cplusplus/cxx11/data/braceInitializers.1.cpp
index f3a0675f384..94e8fae2419 100644
--- a/tests/auto/cplusplus/cxx11/data/braceInitializers.1.cpp
+++ b/tests/auto/cplusplus/cxx11/data/braceInitializers.1.cpp
@@ -12,3 +12,7 @@ void main() {
     Type var2{{1, 2, 3}, 4};
     var3 += {1, 2};
 }
+
+T foo() {
+    return {1, 2, {"foo", 7}};
+}
-- 
GitLab