@@ -500,6 +500,7 @@ class TestSymbolDatabase : public TestFixture {
500500 TEST_CASE (auto15); // C++17 auto deduction from braced-init-list
501501 TEST_CASE (auto16);
502502 TEST_CASE (auto17); // #11163
503+ TEST_CASE (auto18);
503504
504505 TEST_CASE (unionWithConstructor);
505506
@@ -8469,14 +8470,14 @@ class TestSymbolDatabase : public TestFixture {
84698470 autotok = Token::findsimplematch (autotok, " auto v4" );
84708471 ASSERT (autotok);
84718472 ASSERT (autotok->valueType ());
8472- TODO_ASSERT_EQUALS ( 0 , 1 , autotok->valueType ()->constness );
8473+ ASSERT_EQUALS ( 3 , autotok->valueType ()->constness );
84738474 ASSERT_EQUALS (1 , autotok->valueType ()->pointer );
84748475 ASSERT_EQUALS (ValueType::SIGNED, autotok->valueType ()->sign );
84758476 ASSERT_EQUALS (ValueType::INT, autotok->valueType ()->type );
84768477 vartok = Token::findsimplematch (autotok, " v4 =" );
84778478 ASSERT (autotok);
84788479 ASSERT (autotok->valueType ());
8479- ASSERT_EQUALS (1 , vartok->valueType ()->constness );
8480+ ASSERT_EQUALS (3 , vartok->valueType ()->constness );
84808481 ASSERT_EQUALS (1 , vartok->valueType ()->pointer );
84818482 ASSERT_EQUALS (ValueType::SIGNED, vartok->valueType ()->sign );
84828483 ASSERT_EQUALS (ValueType::INT, vartok->valueType ()->type );
@@ -8549,14 +8550,14 @@ class TestSymbolDatabase : public TestFixture {
85498550 autotok = Token::findsimplematch (autotok, " auto v9" );
85508551 ASSERT (autotok);
85518552 ASSERT (autotok->valueType ());
8552- TODO_ASSERT_EQUALS ( 0 , 1 , autotok->valueType ()->constness );
8553+ ASSERT_EQUALS ( 3 , autotok->valueType ()->constness );
85538554 ASSERT_EQUALS (1 , autotok->valueType ()->pointer );
85548555 ASSERT_EQUALS (ValueType::SIGNED, autotok->valueType ()->sign );
85558556 ASSERT_EQUALS (ValueType::INT, autotok->valueType ()->type );
85568557 vartok = Token::findsimplematch (autotok, " v9 =" );
85578558 ASSERT (autotok);
85588559 ASSERT (autotok->valueType ());
8559- ASSERT_EQUALS (1 , vartok->valueType ()->constness );
8560+ ASSERT_EQUALS (3 , vartok->valueType ()->constness );
85608561 ASSERT_EQUALS (1 , vartok->valueType ()->pointer );
85618562 ASSERT_EQUALS (ValueType::SIGNED, vartok->valueType ()->sign );
85628563 ASSERT_EQUALS (ValueType::INT, vartok->valueType ()->type );
@@ -8750,6 +8751,34 @@ class TestSymbolDatabase : public TestFixture {
87508751 ASSERT_EQUALS (5 , db->variableList ().size ());
87518752 }
87528753
8754+ void auto18 () {
8755+ GET_SYMBOL_DB (" void f(const int* p) {\n "
8756+ " const int* const& r = p;\n "
8757+ " const auto& s = p;\n "
8758+ " }\n " );
8759+ ASSERT_EQUALS (4 , db->variableList ().size ());
8760+
8761+ const Variable* r = db->variableList ()[2 ];
8762+ ASSERT (r->isReference ());
8763+ ASSERT (r->isConst ());
8764+ ASSERT (r->isPointer ());
8765+ const Token* varTok = Token::findsimplematch (tokenizer.tokens (), " r" );
8766+ ASSERT (varTok && varTok->valueType ());
8767+ ASSERT_EQUALS (varTok->valueType ()->constness , 3 );
8768+ ASSERT_EQUALS (varTok->valueType ()->pointer , 1 );
8769+ ASSERT (varTok->valueType ()->reference == Reference::LValue);
8770+
8771+ const Variable* s = db->variableList ()[3 ];
8772+ ASSERT (s->isReference ());
8773+ ASSERT (s->isConst ());
8774+ ASSERT (s->isPointer ());
8775+ const Token* autoTok = Token::findsimplematch (tokenizer.tokens (), " auto" );
8776+ ASSERT (autoTok && autoTok->valueType ());
8777+ ASSERT_EQUALS (autoTok->valueType ()->constness , 3 );
8778+ ASSERT_EQUALS (autoTok->valueType ()->pointer , 1 );
8779+ TODO_ASSERT (autoTok->valueType ()->reference == Reference::LValue);
8780+ }
8781+
87538782 void unionWithConstructor () {
87548783 GET_SYMBOL_DB (" union Fred {\n "
87558784 " Fred(int x) : i(x) { }\n "
0 commit comments