@@ -220,6 +220,7 @@ class TestSymbolDatabase : public TestFixture {
220220 TEST_CASE(VariableValueType4); // smart pointer type
221221 TEST_CASE(VariableValueType5); // smart pointer type
222222 TEST_CASE(VariableValueType6); // smart pointer type
223+ TEST_CASE(VariableValueType7);
223224 TEST_CASE(VariableValueTypeReferences);
224225 TEST_CASE(VariableValueTypeTemplate);
225226
@@ -1315,6 +1316,36 @@ class TestSymbolDatabase : public TestFixture {
13151316 ASSERT(check->valueType()->smartPointerTypeToken);
13161317 }
13171318
1319+ void VariableValueType7() {
1320+ GET_SYMBOL_DB("void f() {\n"
1321+ " auto x0 = 0;\n"
1322+ " auto &x1 = x0;\n"
1323+ " auto &x2 {x0};\n"
1324+ " auto &&x3 = 0;\n"
1325+ " auto &&x4 {0};\n"
1326+ "}\n");
1327+
1328+ const Token* x1 = Token::findsimplematch(tokenizer.tokens(), "x1");
1329+ const Token* x2 = Token::findsimplematch(tokenizer.tokens(), "x2");
1330+ const Token* x3 = Token::findsimplematch(tokenizer.tokens(), "x3");
1331+ const Token* x4 = Token::findsimplematch(tokenizer.tokens(), "x4");
1332+
1333+ ASSERT(x1);
1334+ ASSERT(x2);
1335+ ASSERT(x3);
1336+ ASSERT(x4);
1337+
1338+ ASSERT_EQUALS_ENUM(ValueType::INT, x1->valueType()->type);
1339+ ASSERT_EQUALS_ENUM(ValueType::INT, x2->valueType()->type);
1340+ ASSERT_EQUALS_ENUM(ValueType::INT, x3->valueType()->type);
1341+ ASSERT_EQUALS_ENUM(ValueType::INT, x4->valueType()->type);
1342+
1343+ ASSERT_EQUALS_ENUM(Reference::LValue, x1->valueType()->reference);
1344+ ASSERT_EQUALS_ENUM(Reference::LValue, x2->valueType()->reference);
1345+ ASSERT_EQUALS_ENUM(Reference::RValue, x3->valueType()->reference);
1346+ ASSERT_EQUALS_ENUM(Reference::RValue, x4->valueType()->reference);
1347+ }
1348+
13181349 void VariableValueTypeReferences() {
13191350 {
13201351 GET_SYMBOL_DB("void foo(int x) {}\n");
0 commit comments