@@ -220,6 +220,8 @@ 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);
224+ TEST_CASE(VariableValueType8);
223225 TEST_CASE(VariableValueTypeReferences);
224226 TEST_CASE(VariableValueTypeTemplate);
225227
@@ -1316,6 +1318,71 @@ class TestSymbolDatabase : public TestFixture {
13161318 ASSERT(check->valueType()->smartPointerTypeToken);
13171319 }
13181320
1321+ void VariableValueType7() {
1322+ GET_SYMBOL_DB("void f() {\n"
1323+ " auto x0 = 0;\n"
1324+ " auto &x1 = x0;\n"
1325+ " auto &x2 {x0};\n"
1326+ " auto &&x3 = 0;\n"
1327+ " auto &&x4 {0};\n"
1328+ "}\n");
1329+
1330+ const Token* x1 = Token::findsimplematch(tokenizer.tokens(), "x1");
1331+ const Token* x2 = Token::findsimplematch(tokenizer.tokens(), "x2");
1332+ const Token* x3 = Token::findsimplematch(tokenizer.tokens(), "x3");
1333+ const Token* x4 = Token::findsimplematch(tokenizer.tokens(), "x4");
1334+
1335+ ASSERT(x1);
1336+ ASSERT(x2);
1337+ ASSERT(x3);
1338+ ASSERT(x4);
1339+
1340+ ASSERT_EQUALS_ENUM(ValueType::INT, x1->valueType()->type);
1341+ ASSERT_EQUALS_ENUM(ValueType::INT, x2->valueType()->type);
1342+ ASSERT_EQUALS_ENUM(ValueType::INT, x3->valueType()->type);
1343+ ASSERT_EQUALS_ENUM(ValueType::INT, x4->valueType()->type);
1344+
1345+ ASSERT_EQUALS_ENUM(Reference::LValue, x1->valueType()->reference);
1346+ ASSERT_EQUALS_ENUM(Reference::LValue, x2->valueType()->reference);
1347+ ASSERT_EQUALS_ENUM(Reference::RValue, x3->valueType()->reference);
1348+ ASSERT_EQUALS_ENUM(Reference::RValue, x4->valueType()->reference);
1349+ }
1350+
1351+ void VariableValueType8() {
1352+ GET_SYMBOL_DB("void f() {\n"
1353+ " char buf[128];\n"
1354+ " const auto *const x0 {buf};\n"
1355+ " auto *const x1 {buf};\n"
1356+ " const auto *x2 {buf};\n"
1357+ " auto x3 {buf};\n"
1358+ "}\n");
1359+
1360+ const Token* x0 = Token::findsimplematch(tokenizer.tokens(), "x0");
1361+ const Token* x1 = Token::findsimplematch(tokenizer.tokens(), "x1");
1362+ const Token* x2 = Token::findsimplematch(tokenizer.tokens(), "x2");
1363+ const Token* x3 = Token::findsimplematch(tokenizer.tokens(), "x3");
1364+
1365+ ASSERT(x0);
1366+ ASSERT(x1);
1367+ ASSERT(x2);
1368+ ASSERT(x3);
1369+
1370+ ASSERT_EQUALS_ENUM(ValueType::CHAR, x0->valueType()->type);
1371+ ASSERT_EQUALS_ENUM(ValueType::CHAR, x1->valueType()->type);
1372+ ASSERT_EQUALS_ENUM(ValueType::CHAR, x2->valueType()->type);
1373+ ASSERT_EQUALS_ENUM(ValueType::CHAR, x3->valueType()->type);
1374+
1375+ ASSERT_EQUALS(3, x0->valueType()->constness);
1376+ ASSERT_EQUALS(1, x1->valueType()->constness);
1377+ ASSERT_EQUALS(2, x2->valueType()->constness);
1378+ ASSERT_EQUALS(0, x3->valueType()->constness);
1379+
1380+ ASSERT_EQUALS(1, x0->valueType()->pointer);
1381+ ASSERT_EQUALS(1, x1->valueType()->pointer);
1382+ ASSERT_EQUALS(1, x2->valueType()->pointer);
1383+ ASSERT_EQUALS(1, x3->valueType()->pointer);
1384+ }
1385+
13191386 void VariableValueTypeReferences() {
13201387 {
13211388 GET_SYMBOL_DB("void foo(int x) {}\n");
0 commit comments