On Wed, Sep 21, 2016 at 3:52 PM, Bernd Edlinger <bernd.edlin...@hotmail.de> wrote: > On 09/21/16 21:03, Jason Merrill wrote: >> On Wed, Sep 21, 2016 at 11:43 AM, Bernd Edlinger >> <bernd.edlin...@hotmail.de> wrote: >>> 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. >> >> Indeed, that was too simplistic. This patch adds a >> from_macro_definition_at test that ought to do what you want: >> > > Yes, this works for me as well. > > Here is an updated warning patch, using the new > from_macro_definition_at.
OK. Jason