diff --git a/lib/symboldatabase.cpp b/lib/symboldatabase.cpp index ca6899066..8d7545efe 100644 --- a/lib/symboldatabase.cpp +++ b/lib/symboldatabase.cpp @@ -5858,7 +5858,7 @@ void SymbolDatabase::setValueType(Token *tok, const ValueType &valuetype) Token *autoTok = nullptr; if (Token::Match(var1Tok->tokAt(-2), ";|{|}|(|const|constexpr auto")) autoTok = var1Tok->previous(); - else if (Token::Match(var1Tok->tokAt(-3), ";|{|}|(|const|constexpr auto *")) + else if (Token::Match(var1Tok->tokAt(-3), ";|{|}|(|const|constexpr auto *|&|&&")) autoTok = var1Tok->tokAt(-2); if (autoTok) { ValueType vt(*vt2); diff --git a/test/teststl.cpp b/test/teststl.cpp index 17a45d270..568fbacbf 100644 --- a/test/teststl.cpp +++ b/test/teststl.cpp @@ -5481,6 +5481,15 @@ private: "}\n", true); ASSERT_EQUALS("", errout.str()); + + check("void f() {\n" + " std::vector v;\n" + " auto& rv = v;\n" + " rv.push_back(42);\n" + " for (auto i : v) {}\n" + "}\n", + true); + ASSERT_EQUALS("", errout.str()); } void checkMutexes() {