[Bug c++/70922] -Wparentheses warning should not complain about if-else from macro expansion

manu at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Wed May 4 18:55:00 GMT 2016


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70922

--- Comment #15 from Manuel López-Ibáñez <manu at gcc dot gnu.org> ---
Indeed, we also warn for

void bar(int x)
{
    if (x)
        for (int i = x; i < 5; i++) 
            if (i != 0)                                 
            {                                                                   
                /* Nothing.  */                                                 
            }                                                                   
            else
                if(!x)
                    return; 
}

Perhaps we should not warn if some other construct breaks the ambiguity (like
for, while, etc.). But I can see that one may wrongly write:

void bar(int x)
{
    if (x)
        MACRO_WITH_ELSE(x)
    if(!x)
       return; 
}

and not be aware that the macro changes the meaning of the following 'if'. The
extra braces may seem redundant, but they avoid such pitfalls:

void bar(int x)
{
    if (x)
    {
        MACRO_WITH_ELSE(x)
    if(!x)
       return; 
    }
}


More information about the Gcc-bugs mailing list