@@ -130,6 +130,7 @@ class TestSymbolDatabase : public TestFixture {
130130 TEST_CASE (array_ptr);
131131 TEST_CASE (stlarray1);
132132 TEST_CASE (stlarray2);
133+ TEST_CASE (stlarray3);
133134
134135 TEST_CASE (test_isVariableDeclarationCanHandleNull);
135136 TEST_CASE (test_isVariableDeclarationIdentifiesSimpleDeclaration);
@@ -573,6 +574,56 @@ class TestSymbolDatabase : public TestFixture {
573574 ASSERT_EQUALS (20U , v->dimension (0 ));
574575 }
575576
577+ void stlarray3 () {
578+ GET_SYMBOL_DB (" std::array<int, 4> a;\n "
579+ " std::array<int, 4> b[2];\n "
580+ " const std::array<int, 4>& r = a;\n " );
581+ ASSERT (db != nullptr );
582+
583+ ASSERT_EQUALS (4 , db->variableList ().size ()); // the first one is not used
584+ auto it = db->variableList ().begin () + 1 ;
585+
586+ ASSERT ((*it)->isArray ());
587+ ASSERT (!(*it)->isPointer ());
588+ ASSERT (!(*it)->isReference ());
589+ ASSERT_EQUALS (1U , (*it)->dimensions ().size ());
590+ ASSERT_EQUALS (4U , (*it)->dimension (0 ));
591+ const ValueType* vt = (*it)->valueType ();
592+ ASSERT (vt && vt->container );
593+ ASSERT_EQUALS (vt->pointer , 0 );
594+ const Token* tok = (*it)->nameToken ();
595+ ASSERT (tok && (vt = tok->valueType ()));
596+ ASSERT_EQUALS (vt->pointer , 0 );
597+
598+ ++it;
599+ ASSERT ((*it)->isArray ());
600+ ASSERT (!(*it)->isPointer ());
601+ ASSERT (!(*it)->isReference ());
602+ ASSERT_EQUALS (1U , (*it)->dimensions ().size ());
603+ ASSERT_EQUALS (4U , (*it)->dimension (0 ));
604+ vt = (*it)->valueType ();
605+ ASSERT_EQUALS (vt->pointer , 0 );
606+ tok = (*it)->nameToken ();
607+ ASSERT (tok && (vt = tok->valueType ()));
608+ ASSERT_EQUALS (vt->pointer , 1 );
609+
610+ ++it;
611+ ASSERT ((*it)->isArray ());
612+ ASSERT (!(*it)->isPointer ());
613+ ASSERT ((*it)->isReference ());
614+ ASSERT ((*it)->isConst ());
615+ ASSERT_EQUALS (1U , (*it)->dimensions ().size ());
616+ ASSERT_EQUALS (4U , (*it)->dimension (0 ));
617+ vt = (*it)->valueType ();
618+ ASSERT_EQUALS (vt->pointer , 0 );
619+ ASSERT (vt->reference == Reference::LValue);
620+ tok = (*it)->nameToken ();
621+ ASSERT (tok && (vt = tok->valueType ()));
622+ ASSERT_EQUALS (vt->pointer , 0 );
623+ ASSERT_EQUALS (vt->constness , 1 );
624+ ASSERT (vt->reference == Reference::LValue);
625+ }
626+
576627 void test_isVariableDeclarationCanHandleNull () {
577628 reset ();
578629 GET_SYMBOL_DB (" void main(){}" );
0 commit comments