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