Hi, While fixing PR 108354, I came across that ssa_name_has_boolean_range calls get_range_query with cfun as the argument but sometimes while in IPA passes cfun is currently nullptr. The question should we check the argument before calling get_range_query or is it a valid thing to call it with a nullptr (and have it return global_ranges in that case)?
I committed the patch (for PR 108354) with the workaround around the issue via having the match.pd pattern which was calling ssa_name_has_boolean_range only be invoked from the gimple simplifiers. Below is the patch which undones the workaround: ``` diff --git a/gcc/match.pd b/gcc/match.pd index e7b700349a6..e352bd422f5 100644 --- a/gcc/match.pd +++ b/gcc/match.pd @@ -1732,7 +1732,6 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) (if (!FIXED_POINT_TYPE_P (type)) (plus @0 (negate @1)))) -#if GIMPLE /* 1 - a is a ^ 1 if a had a bool range. */ /* This is only enabled for gimple as sometimes cfun is not set for the function which contains @@ -1743,7 +1742,6 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) (if (INTEGRAL_TYPE_P (type) && ssa_name_has_boolean_range (@1)) (bit_xor @1 @0))) -#endif /* Other simplifications of negation (c.f. fold_negate_expr_1). */ (simplify ``` Note I can only so far reproduce the call to ssa_name_has_boolean_range that causes an issue while building Ada tools (while bootstrapping) because the code that needs to hit this is related to variable sized type accesses. Thanks, Andrew Pinski