diff --git a/src/libs/3rdparty/cplusplus/Bind.cpp b/src/libs/3rdparty/cplusplus/Bind.cpp index ccd04dcb6ff..58e3815a8f6 100644 --- a/src/libs/3rdparty/cplusplus/Bind.cpp +++ b/src/libs/3rdparty/cplusplus/Bind.cpp @@ -1634,6 +1634,15 @@ bool Bind::visit(ConditionAST *ast) unsigned sourceLocation = location(declaratorId->name, ast->firstToken()); Declaration *decl = control()->newDeclaration(sourceLocation, declaratorId->name->name); decl->setType(type); + + if (type.isAuto() && translationUnit()->languageFeatures().cxx11Enabled) { + const ExpressionAST *initializer = ast->declarator->initializer; + + const unsigned startOfExpression = initializer->firstToken(); + const unsigned endOfExpression = initializer->lastToken(); + decl->setInitializer(asStringLiteral(startOfExpression, endOfExpression)); + } + _scope->addMember(decl); } diff --git a/src/plugins/cpptools/cppcompletion_test.cpp b/src/plugins/cpptools/cppcompletion_test.cpp index bf16f2e2198..717687b6a6a 100644 --- a/src/plugins/cpptools/cppcompletion_test.cpp +++ b/src/plugins/cpptools/cppcompletion_test.cpp @@ -2384,6 +2384,17 @@ void CppToolsPlugin::test_completion_data() "}\n" ) << _("s.") << (QStringList() << QLatin1String("S")); + + QTest::newRow("auto_declaration_in_if_condition") << _( + "struct Foo { int bar; };\n" + "void fun() {\n" + " if (auto s = new Foo) {\n" + " @\n" + " }\n" + "}\n" + ) << _("s->") << (QStringList() + << QLatin1String("Foo") + << QLatin1String("bar")); } void CppToolsPlugin::test_completion_member_access_operator()