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

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Priority|P3                          |P1

--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> ---
(gdb) p debug_tree (name)
 <ssa_name 0x7ffff68ad948 nothrow
    def_stmt 
    version 2 in-free-list>
$2 = void

this seems to be again a missed DECL_EXPR:

;; Function fn1 (null)
;; enabled by -tree-original


{
  int a[0:(sizetype) ((long int) (1 / 0) + -1)];

  (void) 0;
    int a[0:(sizetype) ((long int) (1 / 0) + -1)];
}

and .gimple:

fn1 ()
{
  int[0:(sizetype) ((long int) (1 / 0) + -1)] * a.0;
  void * saved_stack.1;
  int a[0:(sizetype) ((long int) (1 / 0) + -1)] [value-expr: *a.0];

  saved_stack.1 = __builtin_stack_save ();
  try
    {
      _1 = 1 / 0;
      _2 = (sizetype) _1;
      _3 = _2 * 4;
      a.0 = __builtin_alloca_with_align (_3, 32);
    }
  finally
    {
      __builtin_stack_restore (saved_stack.1);
    }

notice the missed gimplification of type sizes above.  The inliner then sees:

(gdb) p debug_tree (type)
 <array_type 0x7ffff69c1540
    type <integer_type 0x7ffff68ba5e8 int sizes-gimplified public SI
        size <integer_cst 0x7ffff68a2f18 constant 32>
        unit size <integer_cst 0x7ffff68a2f30 constant 4>
        align 32 symtab 0 alias set -1 canonical type 0x7ffff68ba5e8 precision
32 min <integer_cst 0x7ffff68a2ed0 -2147483648> max <integer_cst 0x7ffff68a2ee8
2147483647>
        pointer_to_this <pointer_type 0x7ffff68c2a80>>
    sizes-gimplified type_1 BLK
    size <mult_expr 0x7ffff69c0bb8
        type <integer_type 0x7ffff68ba0a8 bitsizetype public unsigned TI
            size <integer_cst 0x7ffff68a2d20 constant 128>
            unit size <integer_cst 0x7ffff68a2d38 constant 16>
...
    unit size <mult_expr 0x7ffff69c0be0
        type <integer_type 0x7ffff68ba000 sizetype public unsigned DI
            size <integer_cst 0x7ffff68a2cd8 constant 64>
            unit size <integer_cst 0x7ffff68a2cf0 constant 8>
            align 64 symtab 0 alias set -1 canonical type 0x7ffff68ba000
precision 64 min <integer_cst 0x7ffff68a2d08 0> max <integer_cst 0x7ffff68a44c0
18446744073709551615>>
        readonly constant
        arg 0 <ssa_name 0x7ffff68ad948 nothrow
            def_stmt 
            version 2 in-free-list> arg 1 <integer_cst 0x7ffff68a2f30 4>
        t.c:3:24 start: t.c:3:24 finish: t.c:3:24>
    align 32 symtab 0 alias set -1 structural equality
...

note the bogus TYPE_SIZE_UNIT.

Reply via email to