@@ -4614,6 +4614,64 @@ class TestSymbolDatabase: public TestFixture {
46144614 ASSERT (db && vartok && vartok->variable () && vartok->variable ()->isPointer () && vartok->variable ()->type () && vartok->variable ()->type ()->name () == " E" );
46154615 }
46164616
4617+ void auto4 () {
4618+ GET_SYMBOL_DB (" struct S { int i; };\n "
4619+ " int foo() {\n "
4620+ " S array[10];\n "
4621+ " for (auto a : array)\n "
4622+ " a.i = 0;\n "
4623+ " for (auto & b : array)\n "
4624+ " b.i = 1;\n "
4625+ " for (const auto & c : array)\n "
4626+ " auto ci = c.i;\n "
4627+ " for (auto * d : array)\n "
4628+ " d->i = 0;\n "
4629+ " for (const auto * e : array)\n "
4630+ " auto ei = e->i;\n "
4631+ " return array[0].i;\n "
4632+ " }" );
4633+ const Token *autotok = Token::findsimplematch (tokenizer.tokens (), " auto a" );
4634+ ASSERT (db && autotok && autotok->valueType () && autotok->valueType ()->pointer == 0 && autotok->valueType ()->constness == 0 && autotok->valueType ()->typeScope && autotok->valueType ()->typeScope ->definedType && autotok->valueType ()->typeScope ->definedType ->name () == " S" );
4635+ ASSERT (db && autotok && autotok->type () && autotok->type ()->name () == " S" );
4636+
4637+ autotok = Token::findsimplematch (autotok->next (), " auto & b" );
4638+ ASSERT (db && autotok && autotok->valueType () && autotok->valueType ()->pointer == 0 && autotok->valueType ()->constness == 0 && autotok->valueType ()->typeScope && autotok->valueType ()->typeScope ->definedType && autotok->valueType ()->typeScope ->definedType ->name () == " S" );
4639+ ASSERT (db && autotok && autotok->type () && autotok->type ()->name () == " S" );
4640+
4641+ autotok = Token::findsimplematch (autotok->next (), " auto & c" );
4642+ ASSERT (db && autotok && autotok->valueType () && autotok->valueType ()->pointer == 0 && autotok->valueType ()->constness == 0 && autotok->valueType ()->typeScope && autotok->valueType ()->typeScope ->definedType && autotok->valueType ()->typeScope ->definedType ->name () == " S" );
4643+ ASSERT (db && autotok && autotok->type () && autotok->type ()->name () == " S" );
4644+
4645+ autotok = Token::findsimplematch (autotok->next (), " auto * d" );
4646+ ASSERT (db && autotok && autotok->valueType () && autotok->valueType ()->pointer == 0 && autotok->valueType ()->constness == 0 && autotok->valueType ()->typeScope && autotok->valueType ()->typeScope ->definedType && autotok->valueType ()->typeScope ->definedType ->name () == " S" );
4647+ ASSERT (db && autotok && autotok->type () && autotok->type ()->name () == " S" );
4648+
4649+ autotok = Token::findsimplematch (autotok->next (), " auto * e" );
4650+ ASSERT (db && autotok && autotok->valueType () && autotok->valueType ()->pointer == 0 && autotok->valueType ()->constness == 0 && autotok->valueType ()->typeScope && autotok->valueType ()->typeScope ->definedType && autotok->valueType ()->typeScope ->definedType ->name () == " S" );
4651+ ASSERT (db && autotok && autotok->type () && autotok->type ()->name () == " S" );
4652+
4653+ vartok = Token::findsimplematch (tokenizer.tokens (), " a :" );
4654+ ASSERT (db && vartok && vartok->valueType () && vartok->valueType ()->typeScope && vartok->valueType ()->typeScope ->definedType && vartok->valueType ()->typeScope ->definedType ->name () == " S" );
4655+ ASSERT (db && vartok && vartok->variable () && !vartok->variable ()->isReference () && !vartok->variable ()->isPointer ());
4656+ ASSERT (db && vartok && vartok->variable () && vartok->variable ()->type () && vartok->variable ()->type ()->name () == " S" );
4657+
4658+ vartok = Token::findsimplematch (vartok->next (), " b :" );
4659+ ASSERT (db && vartok && vartok->valueType () && vartok->valueType ()->typeScope && vartok->valueType ()->typeScope ->definedType && vartok->valueType ()->typeScope ->definedType ->name () == " S" );
4660+ ASSERT (db && vartok && vartok->variable () && vartok->variable ()->isReference () && !vartok->variable ()->isPointer () && !vartok->variable ()->isConst ());
4661+
4662+ vartok = Token::findsimplematch (vartok->next (), " c :" );
4663+ ASSERT (db && vartok && vartok->valueType () && vartok->valueType ()->typeScope && vartok->valueType ()->typeScope ->definedType && vartok->valueType ()->typeScope ->definedType ->name () == " S" );
4664+ ASSERT (db && vartok && vartok->variable () && vartok->variable ()->isReference () && !vartok->variable ()->isPointer () && vartok->variable ()->isConst ());
4665+
4666+ vartok = Token::findsimplematch (vartok->next (), " d :" );
4667+ ASSERT (db && vartok && vartok->valueType () && vartok->valueType ()->typeScope && vartok->valueType ()->typeScope ->definedType && vartok->valueType ()->typeScope ->definedType ->name () == " S" );
4668+ ASSERT (db && vartok && vartok->variable () && !vartok->variable ()->isReference () && vartok->variable ()->isPointer () && !vartok->variable ()->isConst ());
4669+
4670+ vartok = Token::findsimplematch (vartok->next (), " e :" );
4671+ ASSERT (db && vartok && vartok->valueType () && vartok->valueType ()->typeScope && vartok->valueType ()->typeScope ->definedType && vartok->valueType ()->typeScope ->definedType ->name () == " S" );
4672+ ASSERT (db && vartok && vartok->variable () && !vartok->variable ()->isReference () && vartok->variable ()->isPointer () && vartok->variable ()->isConst ());
4673+ }
4674+
46174675};
46184676
46194677REGISTER_TEST (TestSymbolDatabase)
0 commit comments