https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85091
--- Comment #13 from Alexander Monakov <amonakov at gcc dot gnu.org> --- > (in the diffs, plus-lines correspond to -Wnonnull added to command line) No, sorry, it was the other way around. Here's the reverse diff with more context: if (0) { <<cleanup_point <<< Unknown tree: expr_stmt lmi_test::record_error () >>>>>; } - if (0) - { - <<cleanup_point <<< Unknown tree: expr_stmt + <<cleanup_point <<< Unknown tree: expr_stmt lmi_test::record_error () >>>>>; - } } It corresponds to if(!(!std::signbit(bourn_cast<To>( From(0))))) { lmi_test::record_error(); }; if(!(std::signbit(bourn_cast<To>(-From(0))))) { lmi_test::record_error(); }; in template instantiation test_floating_conversions<double, float>. Essentially, with -Wnonnull the second condition seems to be folded to truth value.