On 09/21/16 17:00, Jason Merrill wrote: > On 09/20/2016 02:40 PM, Bernd Edlinger wrote: >> On 09/20/16 16:51, Jason Merrill wrote: >>> On Tue, Sep 20, 2016 at 10:11 AM, Bernd Edlinger >>> <bernd.edlin...@hotmail.de> wrote: >>>> I think I will have to suppress the warning if the conditional is in >>>> a macro somehow. >>> >>> from_macro_expansion_at will help with that. >>> >>> Though it seems to me that the issue here is more that (TARGET_FP16 ? >>> 14 : 12) is not in a boolean context, it's in an integer context; only >>> the outer ?: is in a boolean context. >>> >> + if (warn_int_in_bool_context >> + && !from_macro_expansion_at (EXPR_LOCATION (expr))) >> >> But this seems to suppress all such warnings from an assert >> macro too. Like for instance "assert(a?1:2)". >> >> Sure, we would not be interested in a ?: that is part of the assert >> macro itself, but the expression that is evaluated by the macro should >> be checked, but that is no longer done, because the macro parameter is >> now also from the macro expansion. But it is initially from the >> macro invocation point. Ideas? > > This should fix that, though I haven't run regression tests yet: >
Yes. I think that goes in the right direction, but it does not work yet. #define XXX (a ? 2 : 3) if (XXX) // prints a warning, but it should not. Bernd.