From 9a8cba372b9b5877dbce2740a9d6845e4738f7b9 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Wed, 7 Aug 2024 14:01:50 +0200 Subject: [PATCH] CPlusPlus: Allow empty initializer lists in placement new Fixes: QTCREATORBUG-30798 Change-Id: Ib9945e4e721aca5f88665bd8a289ae3c54c69e65 Reviewed-by: Christian Stenger --- src/libs/3rdparty/cplusplus/Parser.cpp | 2 +- tests/auto/cplusplus/ast/tst_ast.cpp | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/libs/3rdparty/cplusplus/Parser.cpp b/src/libs/3rdparty/cplusplus/Parser.cpp index a9883267cc1..473090b8818 100644 --- a/src/libs/3rdparty/cplusplus/Parser.cpp +++ b/src/libs/3rdparty/cplusplus/Parser.cpp @@ -5838,7 +5838,7 @@ bool Parser::parseNewInitializer(ExpressionAST *&node) { DEBUG_THIS_RULE(); if (LA() == T_LPAREN) - return parseExpressionListParen(node, false); + return parseExpressionListParen(node, true); else if (_languageFeatures.cxx11Enabled && LA() == T_LBRACE) return parseBracedInitList0x(node); return false; diff --git a/tests/auto/cplusplus/ast/tst_ast.cpp b/tests/auto/cplusplus/ast/tst_ast.cpp index 3ded1a22003..497ececbcff 100644 --- a/tests/auto/cplusplus/ast/tst_ast.cpp +++ b/tests/auto/cplusplus/ast/tst_ast.cpp @@ -113,6 +113,7 @@ private slots: void templated_dtor_4(); void templated_dtor_5(); void emptyMemberInitialization(); + void placementNewWithEmptyConstructorArgs(); // possible declaration-or-expression statements void call_call_1(); @@ -2070,6 +2071,15 @@ void tst_AST::emptyMemberInitialization() QCOMPARE(diag.errorCount, 0); } +void tst_AST::placementNewWithEmptyConstructorArgs() +{ + const std::shared_ptr unit(parse( + "int main()\n{ int* i = new int;\n i = new(i) int();}", + TranslationUnit::ParseTranlationUnit)); + QVERIFY(unit->ast()); + QCOMPARE(diag.errorCount, 0); +} + void tst_AST::initTestCase() { control.setDiagnosticClient(&diag);