@@ -1981,8 +1981,9 @@ void Variable::evaluate(const Settings* settings)
19811981
19821982 const Library * const lib = &settings->library ;
19831983
1984+ bool isContainer = false ;
19841985 if (mNameToken )
1985- setFlag (fIsArray , arrayDimensions (settings));
1986+ setFlag (fIsArray , arrayDimensions (settings, &isContainer ));
19861987
19871988 if (mTypeStartToken )
19881989 setValueType (ValueType::parseDecl (mTypeStartToken ,settings));
@@ -2008,7 +2009,7 @@ void Variable::evaluate(const Settings* settings)
20082009 setFlag (fIsConst , true );
20092010 setFlag (fIsStatic , true );
20102011 } else if (tok->str () == " *" ) {
2011- setFlag (fIsPointer , !isArray () || Token::Match (tok->previous (), " ( * %name% )" ));
2012+ setFlag (fIsPointer , !isArray () || (isContainer && ! Token::Match (tok-> next (), " %name% [ " )) || Token::Match (tok->previous (), " ( * %name% )" ));
20122013 setFlag (fIsConst , false ); // Points to const, isn't necessarily const itself
20132014 } else if (tok->str () == " &" ) {
20142015 if (isReference ())
@@ -2053,7 +2054,7 @@ void Variable::evaluate(const Settings* settings)
20532054 tok = tok->link ()->previous ();
20542055 // add array dimensions if present
20552056 if (tok && tok->next ()->str () == " [" )
2056- setFlag (fIsArray , arrayDimensions (settings));
2057+ setFlag (fIsArray , arrayDimensions (settings, &isContainer ));
20572058 }
20582059 if (!tok)
20592060 return ;
@@ -3243,12 +3244,14 @@ bool Type::isDerivedFrom(const std::string & ancestor) const
32433244 return false ;
32443245}
32453246
3246- bool Variable::arrayDimensions (const Settings* settings)
3247+ bool Variable::arrayDimensions (const Settings* settings, bool * isContainer )
32473248{
3249+ *isContainer = false ;
32483250 const Library::Container* container = settings->library .detectContainer (mTypeStartToken );
32493251 if (container && container->arrayLike_indexOp && container->size_templateArgNo > 0 ) {
32503252 const Token* tok = Token::findsimplematch (mTypeStartToken , " <" );
32513253 if (tok) {
3254+ *isContainer = true ;
32523255 Dimension dimension_;
32533256 tok = tok->next ();
32543257 for (int i = 0 ; i < container->size_templateArgNo && tok; i++) {
0 commit comments