https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110308
Bug ID: 110308 Summary: [14 Regression] ICE on audiofile-0.3.6: RTL: vartrack: Segmentation fault in mode_to_precision(machine_mode) Product: gcc Version: 14.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: debug Assignee: unassigned at gcc dot gnu.org Reporter: slyfox at gcc dot gnu.org Target Milestone: --- Initially observed ICE on audiofile-0.3.6 when building with r14-1921-g7360cba833cd92. Reduced example: // $ cat bug.cpp.cpp int channelCount, decodeBlock_outputLength; struct BlockCodec { virtual int decodeBlock(const unsigned char *, short *); }; struct ms_adpcm_state { char predictorIndex; int sample1; ms_adpcm_state(); }; bool decodeBlock_ok; void encodeBlock() { ms_adpcm_state(); } struct MSADPCM : BlockCodec { int decodeBlock(const unsigned char *, short *); }; void decodeSample(ms_adpcm_state, bool *); int MSADPCM::decodeBlock(const unsigned char *, short *) { ms_adpcm_state decoderState[2]; ms_adpcm_state *state[2]; state[0] = &decoderState[0]; if (channelCount == 2) state[1] = &decoderState[0]; short m_coefficients[state[1]->predictorIndex]; for (int i = 0; i < channelCount; i++) ++state[i]->sample1; decodeSample(*state[1], &decodeBlock_ok); return decodeBlock_outputLength; } $ g++ -fvisibility=hidden -g2 -O2 -c bug.cpp.cpp -o bug.o during RTL pass: vartrack bug.cpp.cpp: In function 'void encodeBlock()': bug.cpp.cpp:11:40: internal compiler error: Segmentation fault 11 | void encodeBlock() { ms_adpcm_state(); } | ^ 0xe9ac7f crash_signal ../../source/gcc/toplev.cc:314 0x1155ea0 mode_to_precision(machine_mode) ../../source/gcc/machmode.h:585 0x1155ea0 GET_MODE_PRECISION(machine_mode) ../../source/gcc/machmode.h:702 0x1155ea0 paradoxical_subreg_p(machine_mode, machine_mode) ../../source/gcc/rtl.h:3211 0x1155ea0 track_loc_p ../../source/gcc/var-tracking.cc:5341 0x1157121 use_type ../../source/gcc/var-tracking.cc:5555 0x11574a1 add_stores ../../source/gcc/var-tracking.cc:5966 0xe3ef65 note_pattern_stores(rtx_def const*, void (*)(rtx_def*, rtx_def const*, void*), void*) ../../source/gcc/rtlanal.cc:1979 0x11567c0 add_with_sets ../../source/gcc/var-tracking.cc:6638 0xa666a8 cselib_record_sets ../../source/gcc/cselib.cc:3012 0xa67d5e cselib_process_insn(rtx_insn*) ../../source/gcc/cselib.cc:3174 0x1162fef vt_initialize ../../source/gcc/var-tracking.cc:10282 0x1167ca3 variable_tracking_main_1 ../../source/gcc/var-tracking.cc:10510 0x1167e6b variable_tracking_main() ../../source/gcc/var-tracking.cc:10563 0x1167e6b execute ../../source/gcc/var-tracking.cc:10600 $ g++ -v Using built-in specs. COLLECT_GCC=/<<NIX>>/gcc-14.0.0/bin/g++ COLLECT_LTO_WRAPPER=/<<NIX>>/gcc-14.0.0/libexec/gcc/x86_64-unknown-linux-gnu/14.0.0/lto-wrapper Target: x86_64-unknown-linux-gnu Configured with: Thread model: posix Supported LTO compression algorithms: zlib gcc version 14.0.0 99999999 (experimental) (GCC)