@@ -601,11 +601,11 @@ static bool iscpp11init_impl(const Token * const tok)
601601 return true ;
602602}
603603
604- static bool isRefQualifier (const Token* tok)
604+ static bool isQualifier (const Token* tok)
605605{
606- if (! Token::Match (tok, " &|&&" ))
607- return false ;
608- if (!Token::Match (tok-> next () , " {|;" ))
606+ while ( Token::Match (tok, " &|&&|* " ))
607+ tok = tok-> next () ;
608+ if (!Token::Match (tok, " {|;" ))
609609 return false ;
610610 return true ;
611611}
@@ -977,7 +977,7 @@ static void compileMulDiv(Token *&tok, AST_state& state)
977977{
978978 compilePointerToElem (tok, state);
979979 while (tok) {
980- if (Token::Match (tok, " [/%]" ) || (tok->str () == " *" && !tok->astOperand1 ())) {
980+ if (Token::Match (tok, " [/%]" ) || (tok->str () == " *" && !tok->astOperand1 () && ! isQualifier (tok) )) {
981981 if (Token::Match (tok, " * [*,)]" )) {
982982 Token* tok2 = tok->next ();
983983 while (tok2->next () && tok2->str () == " *" )
@@ -1036,7 +1036,7 @@ static void compileAnd(Token *&tok, AST_state& state)
10361036{
10371037 compileEqComp (tok, state);
10381038 while (tok) {
1039- if (tok->str () == " &" && !tok->astOperand1 () && !isRefQualifier (tok)) {
1039+ if (tok->str () == " &" && !tok->astOperand1 () && !isQualifier (tok)) {
10401040 Token* tok2 = tok->next ();
10411041 if (!tok2)
10421042 break ;
@@ -1075,7 +1075,7 @@ static void compileLogicAnd(Token *&tok, AST_state& state)
10751075{
10761076 compileOr (tok, state);
10771077 while (tok) {
1078- if (tok->str () == " &&" && !isRefQualifier (tok)) {
1078+ if (tok->str () == " &&" && !isQualifier (tok)) {
10791079 if (!tok->astOperand1 ()) {
10801080 Token* tok2 = tok->next ();
10811081 if (!tok2)
0 commit comments