diff options
author | Przemyslaw Gorszkowski <pgorszkowski@gmail.com> | 2015-02-02 15:13:00 +0100 |
---|---|---|
committer | Przemyslaw Gorszkowski <pgorszkowski@gmail.com> | 2015-02-04 11:55:04 +0000 |
commit | 955e28f954746a6a7242fe8fa67dd7c53b8e2430 (patch) | |
tree | f403719446176b281accb95f84e34d4b5be90fec /src/libs/3rdparty/cplusplus/Bind.cpp | |
parent | 7d4b9c4ba0936adf8ad1fcaf0093d15f394e3023 (diff) |
C++: fix auto declaration in if condition
Fix for auto completion in case of auto declaration inside if condition:
struct Foo { int bar; };
void func()
{
if (auto s = new Foo)
s->; // auto completion does not work
}
Task-number: QTCREATORBUG-13805
Change-Id: Ia1776e8cc04e6040a6bf5f43cf82cfd6ce6dde7a
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
Diffstat (limited to 'src/libs/3rdparty/cplusplus/Bind.cpp')
-rw-r--r-- | src/libs/3rdparty/cplusplus/Bind.cpp | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/src/libs/3rdparty/cplusplus/Bind.cpp b/src/libs/3rdparty/cplusplus/Bind.cpp index ccd04dcb6f..58e3815a8f 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); } |