[Bug middle-end/83415] New: ICE during gimplification of assignment to read-only vector

kelvin at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Wed Dec 13 20:00:00 GMT 2017


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

            Bug ID: 83415
           Summary: ICE during gimplification of assignment to read-only
                    vector
           Product: gcc
           Version: 8.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: middle-end
          Assignee: unassigned at gcc dot gnu.org
          Reporter: kelvin at gcc dot gnu.org
  Target Milestone: ---

Created attachment 42876
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=42876&action=edit
Program to reproduce the problem

The following command line:

  gcc -S -O3 -o gimplification-error.s gimplification-error.c

results in an ICE, as shown in the capture of stderr below:

At top of rs6000_override_internal, global_init: 1
TARGET_DEFAULT                  = 0x1f07e05c09613f: -maltivec, -mcmpb,
-mcrypto, -mdirect-move, -mno-dlmzb, \
                                                    -mefficient-unaligned-vsx,
-mno-float128, -mno-float128-type, \
                                                    -mno-float128-hardware,
-mfprnd, -mhard-dfp, -mhtm, -mno-isel, \
                                                    -mmfcrf, -mno-mfpgpr,
-mno-modulo, -mno-mulhw, -mno-multiple, \
                                                    -mpopcntb, -mpopcntd,
-mpower8-fusion, -mno-power8-fusion-sign, \
                                                    -mpower8-vector,
-mno-power9-dform-scalar, \
                                                    -mno-power9-dform-vector,
-mno-power9-fusion, -mno-power9-minmax, \
                                                    -mno-power9-misc,
-mno-power9-vector, -mpowerpc-gfxopt, \
                                                    -mpowerpc-gpopt,
-mquad-memory, -mquad-memory-atomic, \
                                                    -mrecip-precision,
-mno-save-toc-indirect, -mno-string, \
                                                    -mno-toc-fusion, -mupdate,
-mupper-regs-di, -mupper-regs-df, \
                                                    -mupper-regs-sf, -mvsx,
-mvsx-small-integer, -mno-vsx-timode, -m64, \
                                                    -m32, -mno-eabi, -mlittle,
-mbig, -mno-relocatable, \
                                                    -mno-strict-align,
-mno-soft-float, -mno-string
x_rs6000_isa_flags              = <none>
rs6000_isa_flags_explicit       = <none>
rs6000_isa_flags                = 0x1f07e05c09613f: -maltivec, -mcmpb,
-mcrypto, -mdirect-move, -mno-dlmzb, \
                                                    -mefficient-unaligned-vsx,
-mno-float128, -mno-float128-type, \
                                                    -mno-float128-hardware,
-mfprnd, -mhard-dfp, -mhtm, -mno-isel, \
                                                    -mmfcrf, -mno-mfpgpr,
-mno-modulo, -mno-mulhw, -mno-multiple, \
                                                    -mpopcntb, -mpopcntd,
-mpower8-fusion, -mno-power8-fusion-sign, \
                                                    -mpower8-vector,
-mno-power9-dform-scalar, \
                                                    -mno-power9-dform-vector,
-mno-power9-fusion, -mno-power9-minmax, \
                                                    -mno-power9-misc,
-mno-power9-vector, -mpowerpc-gfxopt, \
                                                    -mpowerpc-gpopt,
-mquad-memory, -mquad-memory-atomic, \
                                                    -mrecip-precision,
-mno-save-toc-indirect, -mno-string, \
                                                    -mno-toc-fusion, -mupdate,
-mupper-regs-di, -mupper-regs-df, \
                                                    -mupper-regs-sf, -mvsx,
-mvsx-small-integer, -mno-vsx-timode, -m64, \
                                                    -m32, -mno-eabi, -mlittle,
-mbig, -mno-relocatable, \
                                                    -mno-strict-align,
-mno-soft-float, -mno-string
set_masks is POWERPC_MASKS
set_masks                       = 0x3fa7ffdedffb7a: -maltivec, -mcmpb,
-mcrypto, -mdirect-move, -mdlmzb, \
                                                    -mefficient-unaligned-vsx,
-mfloat128, -mfloat128-type, \
                                                    -mfloat128-hardware,
-mfprnd, -mhard-dfp, -mhtm, -misel, -mmfcrf, \
                                                    -mmfpgpr, -mmodulo,
-mmulhw, -mno-multiple, -mpopcntb, -mpopcntd, \
                                                    -mpower8-fusion,
-mno-power8-fusion-sign, -mpower8-vector, \
                                                    -mpower9-dform-scalar,
-mpower9-dform-vector, -mpower9-fusion, \
                                                    -mpower9-minmax,
-mpower9-misc, -mpower9-vector, -mpowerpc-gfxopt, \
                                                    -mpowerpc-gpopt,
-mquad-memory, -mquad-memory-atomic, \
                                                    -mrecip-precision,
-mno-save-toc-indirect, -mno-string, \
                                                    -mtoc-fusion, -mno-update,
-mupper-regs-di, -mupper-regs-df, \
                                                    -mupper-regs-sf, -mvsx,
-mvsx-small-integer, -mvsx-timode, -mno-64, \
                                                    -m32, -mno-eabi,
-mno-little, -mbig, -mno-relocatable, \
                                                    -mstrict-align,
-msoft-float, -mno-string
Before adjusting set_masks
set_masks                       = 0x3fa7ffdedffb7a: -maltivec, -mcmpb,
-mcrypto, -mdirect-move, -mdlmzb, \
                                                    -mefficient-unaligned-vsx,
-mfloat128, -mfloat128-type, \
                                                    -mfloat128-hardware,
-mfprnd, -mhard-dfp, -mhtm, -misel, -mmfcrf, \
                                                    -mmfpgpr, -mmodulo,
-mmulhw, -mno-multiple, -mpopcntb, -mpopcntd, \
                                                    -mpower8-fusion,
-mno-power8-fusion-sign, -mpower8-vector, \
                                                    -mpower9-dform-scalar,
-mpower9-dform-vector, -mpower9-fusion, \
                                                    -mpower9-minmax,
-mpower9-misc, -mpower9-vector, -mpowerpc-gfxopt, \
                                                    -mpowerpc-gpopt,
-mquad-memory, -mquad-memory-atomic, \
                                                    -mrecip-precision,
-mno-save-toc-indirect, -mno-string, \
                                                    -mtoc-fusion, -mno-update,
-mupper-regs-di, -mupper-regs-df, \
                                                    -mupper-regs-sf, -mvsx,
-mvsx-small-integer, -mvsx-timode, -mno-64, \
                                                    -m32, -mno-eabi,
-mno-little, -mbig, -mno-relocatable, \
                                                    -mstrict-align,
-msoft-float, -mno-string
rs6000_isa_flags_explicit       = <none>
After taking care of set_masks:
set_masks                       = 0x3fa7ffdedffb7a: -maltivec, -mcmpb,
-mcrypto, -mdirect-move, -mdlmzb, \
                                                    -mefficient-unaligned-vsx,
-mfloat128, -mfloat128-type, \
                                                    -mfloat128-hardware,
-mfprnd, -mhard-dfp, -mhtm, -misel, -mmfcrf, \
                                                    -mmfpgpr, -mmodulo,
-mmulhw, -mno-multiple, -mpopcntb, -mpopcntd, \
                                                    -mpower8-fusion,
-mno-power8-fusion-sign, -mpower8-vector, \
                                                    -mpower9-dform-scalar,
-mpower9-dform-vector, -mpower9-fusion, \
                                                    -mpower9-minmax,
-mpower9-misc, -mpower9-vector, -mpowerpc-gfxopt, \
                                                    -mpowerpc-gpopt,
-mquad-memory, -mquad-memory-atomic, \
                                                    -mrecip-precision,
-mno-save-toc-indirect, -mno-string, \
                                                    -mtoc-fusion, -mno-update,
-mupper-regs-di, -mupper-regs-df, \
                                                    -mupper-regs-sf, -mvsx,
-mvsx-small-integer, -mvsx-timode, -mno-64, \
                                                    -m32, -mno-eabi,
-mno-little, -mbig, -mno-relocatable, \
                                                    -mstrict-align,
-msoft-float, -mno-string
Before checking have_cpu
rs6000_isa_flags                = 0x1f07e05c09613f: -maltivec, -mcmpb,
-mcrypto, -mdirect-move, -mno-dlmzb, \
                                                    -mefficient-unaligned-vsx,
-mno-float128, -mno-float128-type, \
                                                    -mno-float128-hardware,
-mfprnd, -mhard-dfp, -mhtm, -mno-isel, \
                                                    -mmfcrf, -mno-mfpgpr,
-mno-modulo, -mno-mulhw, -mno-multiple, \
                                                    -mpopcntb, -mpopcntd,
-mpower8-fusion, -mno-power8-fusion-sign, \
                                                    -mpower8-vector,
-mno-power9-dform-scalar, \
                                                    -mno-power9-dform-vector,
-mno-power9-fusion, -mno-power9-minmax, \
                                                    -mno-power9-misc,
-mno-power9-vector, -mpowerpc-gfxopt, \
                                                    -mpowerpc-gpopt,
-mquad-memory, -mquad-memory-atomic, \
                                                    -mrecip-precision,
-mno-save-toc-indirect, -mno-string, \
                                                    -mno-toc-fusion, -mupdate,
-mupper-regs-di, -mupper-regs-df, \
                                                    -mupper-regs-sf, -mvsx,
-mvsx-small-integer, -mno-vsx-timode, -m64, \
                                                    -m32, -mno-eabi, -mlittle,
-mbig, -mno-relocatable, \
                                                    -mno-strict-align,
-mno-soft-float, -mno-string
Since we have_cpu, we mask off set_masks bits
rs6000_isa_flags                = 0x000000000005: -mno-altivec, -mno-cmpb,
-mno-crypto, -mno-direct-move, -mno-dlmzb, \
                                                  -mno-efficient-unaligned-vsx,
-mno-float128, -mno-float128-type, \
                                                  -mno-float128-hardware,
-mno-fprnd, -mno-hard-dfp, -mno-htm, \
                                                  -mno-isel, -mno-mfcrf,
-mno-mfpgpr, -mno-modulo, -mno-mulhw, \
                                                  -mno-multiple, -mno-popcntb,
-mno-popcntd, -mno-power8-fusion, \
                                                  -mno-power8-fusion-sign,
-mno-power8-vector, \
                                                  -mno-power9-dform-scalar,
-mno-power9-dform-vector, \
                                                  -mno-power9-fusion,
-mno-power9-minmax, -mno-power9-misc, \
                                                  -mno-power9-vector,
-mno-powerpc-gfxopt, -mno-powerpc-gpopt, \
                                                  -mno-quad-memory,
-mno-quad-memory-atomic, -mno-recip-precision, \
                                                  -mno-save-toc-indirect,
-mno-string, -mno-toc-fusion, -mupdate, \
                                                  -mno-upper-regs-di,
-mno-upper-regs-df, -mno-upper-regs-sf, -mno-vsx, \
                                                  -mno-vsx-small-integer,
-mno-vsx-timode, -m64, -m32, -mno-eabi, \
                                                  -mlittle, -mbig,
-mno-relocatable, -mno-strict-align, \
                                                  -mno-soft-float, -mno-string
After setting flags to [cpu_index].target_enable
rs6000_isa_flags                = 0x1f07e05c09613f: -maltivec, -mcmpb,
-mcrypto, -mdirect-move, -mno-dlmzb, \
                                                    -mefficient-unaligned-vsx,
-mno-float128, -mno-float128-type, \
                                                    -mno-float128-hardware,
-mfprnd, -mhard-dfp, -mhtm, -mno-isel, \
                                                    -mmfcrf, -mno-mfpgpr,
-mno-modulo, -mno-mulhw, -mno-multiple, \
                                                    -mpopcntb, -mpopcntd,
-mpower8-fusion, -mno-power8-fusion-sign, \
                                                    -mpower8-vector,
-mno-power9-dform-scalar, \
                                                    -mno-power9-dform-vector,
-mno-power9-fusion, -mno-power9-minmax, \
                                                    -mno-power9-misc,
-mno-power9-vector, -mpowerpc-gfxopt, \
                                                    -mpowerpc-gpopt,
-mquad-memory, -mquad-memory-atomic, \
                                                    -mrecip-precision,
-mno-save-toc-indirect, -mno-string, \
                                                    -mno-toc-fusion, -mupdate,
-mupper-regs-di, -mupper-regs-df, \
                                                    -mupper-regs-sf, -mvsx,
-mvsx-small-integer, -mno-vsx-timode, -m64, \
                                                    -m32, -mno-eabi, -mlittle,
-mbig, -mno-relocatable, \
                                                    -mno-strict-align,
-mno-soft-float, -mno-string
Before defaults, rs6000_isa_flags= 0x1f07e05c09613f: -maltivec, -mcmpb,
-mcrypto, -mdirect-move, -mno-dlmzb, \
                                                     -mefficient-unaligned-vsx,
-mno-float128, -mno-float128-type, \
                                                     -mno-float128-hardware,
-mfprnd, -mhard-dfp, -mhtm, -mno-isel, \
                                                     -mmfcrf, -mno-mfpgpr,
-mno-modulo, -mno-mulhw, -mno-multiple, \
                                                     -mpopcntb, -mpopcntd,
-mpower8-fusion, -mno-power8-fusion-sign, \
                                                     -mpower8-vector,
-mno-power9-dform-scalar, \
                                                     -mno-power9-dform-vector,
-mno-power9-fusion, -mno-power9-minmax, \
                                                     -mno-power9-misc,
-mno-power9-vector, -mpowerpc-gfxopt, \
                                                     -mpowerpc-gpopt,
-mquad-memory, -mquad-memory-atomic, \
                                                     -mrecip-precision,
-mno-save-toc-indirect, -mno-string, \
                                                     -mno-toc-fusion, -mupdate,
-mupper-regs-di, -mupper-regs-df, \
                                                     -mupper-regs-sf, -mvsx,
-mvsx-small-integer, -mno-vsx-timode, \
                                                     -m64, -m32, -mno-eabi,
-mlittle, -mbig, -mno-relocatable, \
                                                     -mno-strict-align,
-mno-soft-float, -mno-string
At bottom of rs6000_override_internal
x_rs6000_isa_flags              = <none>
rs6000_isa_flags_explicit       = <none>
rs6000_isa_flags                = 0x3f06e07c0d713f: -maltivec, -mcmpb,
-mcrypto, -mdirect-move, -mno-dlmzb, \
                                                    -mefficient-unaligned-vsx,
-mno-float128, -mfloat128-type, \
                                                    -mno-float128-hardware,
-mfprnd, -mhard-dfp, -mhtm, -mno-isel, \
                                                    -mmfcrf, -mno-mfpgpr,
-mno-modulo, -mno-mulhw, -mno-multiple, \
                                                    -mpopcntb, -mpopcntd,
-mpower8-fusion, -mpower8-fusion-sign, \
                                                    -mpower8-vector,
-mno-power9-dform-scalar, \
                                                    -mno-power9-dform-vector,
-mno-power9-fusion, -mno-power9-minmax, \
                                                    -mno-power9-misc,
-mno-power9-vector, -mpowerpc-gfxopt, \
                                                    -mpowerpc-gpopt,
-mno-quad-memory, -mquad-memory-atomic, \
                                                    -mrecip-precision,
-mno-save-toc-indirect, -mno-string, \
                                                    -mno-toc-fusion, -mupdate,
-mupper-regs-di, -mupper-regs-df, \
                                                    -mupper-regs-sf, -mvsx,
-mvsx-small-integer, -mvsx-timode, -m64, \
                                                    -m32, -mno-eabi, -mlittle,
-mbig, -mno-relocatable, \
                                                    -mno-strict-align,
-mno-soft-float, -mno-string
builtin mask                    = 0x800204d01d013: altivec, vsx, no-spe,
no-paired, fre, fres, no-frsqrte, no-frsqrtes, \
                                                   popcntd, no-cell,
power8-vector, no-power9-vector, no-power9-misc, \
                                                   crypto, htm, hard-dfp,
hard-float, long-double-128, float128
gimplification-error.c: In function ‘main’:
gimplification-error.c:8:3: warning: assignment of read-only location ‘((short
int[8])y)[i]’
   y[i] = 7 - i;
   ^
gimplification failed:
{ 0, 1, 2, 3, 4, 5, 6, 7 } <vector_cst 0x3fff942cc940
    type <vector_type 0x3fff942b5940 __vector signed short
        type <integer_type 0x3fff941105e8 short int public HI
            size <integer_cst 0x3fff940d14b8 constant 16>
            unit size <integer_cst 0x3fff940d14d0 constant 2>
            align 16 symtab 0 alias set -1 canonical type 0x3fff941105e8
precision 16 min <integer_cst 0x3fff940d1470 -32768> max <integer_cst
0x3fff940d1488 32767>
            pointer_to_this <pointer_type 0x3fff942b59e8>>
        readonly V8HI
        size <integer_cst 0x3fff940d1350 constant 128>
        unit size <integer_cst 0x3fff940d1368 constant 16>
        align 128 symtab 0 alias set -1 canonical type 0x3fff942b5940 nunits 8>
    constant
    elt0:  <integer_cst 0x3fff940dc570 type <integer_type 0x3fff941105e8 short
int> constant 0>
    elt1:  <integer_cst 0x3fff940dc588 type <integer_type 0x3fff941105e8 short
int> constant 1>
    elt2:  <integer_cst 0x3fff940dc5a0 type <integer_type 0x3fff941105e8 short
int> constant 2>
    elt3:  <integer_cst 0x3fff940dc5d0 type <integer_type 0x3fff941105e8 short
int> constant 3>
    elt4:  <integer_cst 0x3fff940dc5e8 type <integer_type 0x3fff941105e8 short
int> constant 4>
    elt5:  <integer_cst 0x3fff940dc618 type <integer_type 0x3fff941105e8 short
int> constant 5>
    elt6:  <integer_cst 0x3fff940dc648 type <integer_type 0x3fff941105e8 short
int> constant 6>
    elt7:  <integer_cst 0x3fff940dc678 type <integer_type 0x3fff941105e8 short
int> constant 7>>
gimplification-error.c:8:4: internal compiler error: gimplification failed
   y[i] = 7 - i;
   ~^~~
0x108e6dbb gimplify_expr(tree_node**, gimple**, gimple**, bool (*)(tree_node*),
int)
        /home/kelvin/gcc-root/gcc-trunk/gcc/gimplify.c:12155
0x108b2ebf gimplify_compound_lval
        /home/kelvin/gcc-root/gcc-trunk/gcc/gimplify.c:2845
0x108e2d07 gimplify_expr(tree_node**, gimple**, gimple**, bool (*)(tree_node*),
int)
        /home/kelvin/gcc-root/gcc-trunk/gcc/gimplify.c:11144
0x108c05db gimplify_modify_expr
        /home/kelvin/gcc-root/gcc-trunk/gcc/gimplify.c:5473
0x108e2eaf gimplify_expr(tree_node**, gimple**, gimple**, bool (*)(tree_node*),
int)
        /home/kelvin/gcc-root/gcc-trunk/gcc/gimplify.c:11192
0x108c590b gimplify_stmt(tree_node**, gimple**)
        /home/kelvin/gcc-root/gcc-trunk/gcc/gimplify.c:6478
0x108ae2d3 gimplify_statement_list
        /home/kelvin/gcc-root/gcc-trunk/gcc/gimplify.c:1716
0x108e50bb gimplify_expr(tree_node**, gimple**, gimple**, bool (*)(tree_node*),
int)
        /home/kelvin/gcc-root/gcc-trunk/gcc/gimplify.c:11619
0x108c590b gimplify_stmt(tree_node**, gimple**)
        /home/kelvin/gcc-root/gcc-trunk/gcc/gimplify.c:6478
0x108ac2ef gimplify_bind_expr
        /home/kelvin/gcc-root/gcc-trunk/gcc/gimplify.c:1290
0x108e3e1f gimplify_expr(tree_node**, gimple**, gimple**, bool (*)(tree_node*),
int)
        /home/kelvin/gcc-root/gcc-trunk/gcc/gimplify.c:11391
0x108c590b gimplify_stmt(tree_node**, gimple**)
        /home/kelvin/gcc-root/gcc-trunk/gcc/gimplify.c:6478
0x108ae2d3 gimplify_statement_list
        /home/kelvin/gcc-root/gcc-trunk/gcc/gimplify.c:1716
0x108e50bb gimplify_expr(tree_node**, gimple**, gimple**, bool (*)(tree_node*),
int)
        /home/kelvin/gcc-root/gcc-trunk/gcc/gimplify.c:11619
0x108c590b gimplify_stmt(tree_node**, gimple**)
        /home/kelvin/gcc-root/gcc-trunk/gcc/gimplify.c:6478
0x108e7f4b gimplify_body(tree_node*, bool)
        /home/kelvin/gcc-root/gcc-trunk/gcc/gimplify.c:12388
0x108e8b7b gimplify_function_tree(tree_node*)
        /home/kelvin/gcc-root/gcc-trunk/gcc/gimplify.c:12546
0x105dd1ef cgraph_node::analyze()
        /home/kelvin/gcc-root/gcc-trunk/gcc/cgraphunit.c:657
0x105df31f analyze_functions
        /home/kelvin/gcc-root/gcc-trunk/gcc/cgraphunit.c:1118
0x105e4e6f symbol_table::finalize_compilation_unit()
        /home/kelvin/gcc-root/gcc-trunk/gcc/cgraphunit.c:2599
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
See <https://gcc.gnu.org/bugs/> for instructions.
make: *** [gimplification-error.s] Error 1


More information about the Gcc-bugs mailing list