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

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |jakub at gcc dot gnu.org

--- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
This is on
_gfortran_spread_char_scalar (&atmp.0, _1, &a, &C.4290, &C.4292, _1);
and ipa_compute_jump_functions_for_edge on the _1 arg, which is
 <ssa_name 0x7fffea134ab0
    type <integer_type 0x7fffea146738 integer(kind=8) public DI
        size <integer_cst 0x7fffea12cc48 constant 64>
        unit-size <integer_cst 0x7fffea12cc60 constant 8>
        align:64 warn_if_not_align:0 symtab:0 alias-set 6 canonical-type
0x7fffea146738 precision:64 min <integer_cst 0x7fffea12ced0
-9223372036854775808> max <integer_cst 0x7fffea12cee8 9223372036854775807>
        pointer_to_this <pointer_type 0x7fffea17c738> reference_to_this
<reference_type 0x7fffe9f02498>>
    visited
    def_stmt _1 = MAX_EXPR <_20, 0>;
    version:1
    ptr-info 0x7fffe9f186e0>
but somehow
       tree param_type = ipa_get_callee_param_type (cs, n);
returns VOID_TYPE.  So, either it is a bug that parm_type can be some
completely unrelated type to the argument's type, or if it has some special
meaning,
          if (TREE_CODE (arg) == SSA_NAME
              && param_type
              /* Limit the ranger query to integral types as the rest
                 of this file uses value_range's, which only hold
                 integers and pointers.  */
              && irange::supports_p (TREE_TYPE (arg))
              && get_range_query (cfun)->range_of_expr (vr, arg)
              && !vr.undefined_p ())
should also check that irange::supports_p (param_type) or something similar.
The exact ICE is trying to compute wide_int -1 with precision 0.

Reply via email to