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