Summary: | ICE: in maybe_record_trace_start, at dwarf2cfi.c:2439 | ||
---|---|---|---|
Product: | gcc | Reporter: | Georg-Johann Lay <gjl> |
Component: | debug | Assignee: | Richard Henderson <rth> |
Status: | RESOLVED FIXED | ||
Severity: | normal | CC: | eric.weddington, rth |
Priority: | P3 | Keywords: | ice-on-valid-code |
Version: | 4.7.0 | ||
Target Milestone: | --- | ||
Host: | Target: | avr | |
Build: | Known to work: | ||
Known to fail: | Last reconfirmed: | 2011-07-27 16:49:56 | |
Bug Depends on: | |||
Bug Blocks: | 34888, 49879, 49881 | ||
Attachments: |
proposed patch
assert-i.c followup patch |
Description
Georg-Johann Lay
2011-07-27 10:48:35 UTC
Mine. Created attachment 24847 [details]
proposed patch
This appears to fix the problem for this testcase.
Please run through a complete regression test to
see how it fares elsewhere.
Hum, this patch is too hacky and likely to fail for other targets for different reasons. We need a more comprehensive solution. Consider it withdrawn. Current patch: http://gcc.gnu.org/ml/gcc-patches/2011-08/msg00075.html Author: rth Date: Tue Aug 2 22:18:35 2011 New Revision: 177218 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=177218 Log: PR target/49864 * reg-notes.def (REG_ARGS_SIZE): New. * calls.c (emit_call_1): Emit REG_ARGS_SIZE for call_pop. (expand_call): Add REG_ARGS_SIZE to emit_stack_restore. * cfgcleanup.c (old_insns_match_p): Don't allow cross-jumping to different stack levels. * combine-stack-adj.c (adjust_frame_related_expr): Remove. (maybe_move_args_size_note): New. (combine_stack_adjustments_for_block): Use it. * combine.c (distribute_notes): Place REG_ARGS_SIZE. * dwarf2cfi.c (dw_cfi_row_struct): Remove args_size member. (dw_trace_info): Add beg_true_args_size, end_true_args_size, beg_delay_args_size, end_delay_args_size, eh_head, args_size_undefined. (cur_cfa): New. (queued_args_size): Remove. (add_cfi_args_size): Assert size is non-negative. (stack_adjust_offset, dwarf2out_args_size): Remove. (dwarf2out_stack_adjust, dwarf2out_notice_stack_adjust): Remove. (notice_args_size, notice_eh_throw): New. (dwarf2out_frame_debug_def_cfa): Use cur_cfa. (dwarf2out_frame_debug_adjust_cfa): Likewise. (dwarf2out_frame_debug_cfa_offset): Likewise. (dwarf2out_frame_debug_expr): Likewise. Don't stack_adjust_offset. (dwarf2out_frame_debug): Don't handle non-frame-related-p insns. (change_cfi_row): Don't emit args_size. (maybe_record_trace_start_abnormal): Split out from ... (maybe_record_trace_start): Here. Set args_size_undefined. (create_trace_edges): Update to match. (scan_trace): Handle REG_ARGS_SIZE. (connect_traces): Connect args_size between EH insns. * emit-rtl.c (try_split): Handle REG_ARGS_SIZE. * explow.c (suppress_reg_args_size): New. (adjust_stack_1): Split out from ... (adjust_stack): ... here. (anti_adjust_stack): Use it. (allocate_dynamic_stack_space): Suppress REG_ARGS_SIZE. * expr.c (mem_autoinc_base): New. (fixup_args_size_notes): New. (emit_single_push_insn_1): Rename from emit_single_push_insn. (emit_single_push_insn): New. Generate REG_ARGS_SIZE. * recog.c (peep2_attempt): Handle REG_ARGS_SIZE. * reload1.c (reload_as_needed): Likewise. * rtl.h (fixup_args_size_notes): Declare. Modified: trunk/gcc/ChangeLog trunk/gcc/calls.c trunk/gcc/cfgcleanup.c trunk/gcc/combine-stack-adj.c trunk/gcc/combine.c trunk/gcc/dwarf2cfi.c trunk/gcc/emit-rtl.c trunk/gcc/explow.c trunk/gcc/expr.c trunk/gcc/recog.c trunk/gcc/reg-notes.def trunk/gcc/reload1.c trunk/gcc/rtl.h Fixed. Created attachment 25087 [details] assert-i.c Set to REOPENED: This bug is still not dead; I see it with r178035 from trunk for the attached, precompiled file from avr-libc. There are similar PRs PR49994, PR49879 which all are fixed. I chose to reopen this one because it occurs for the same target and similar message. == Command line == avr-gcc assert-i.c -S -Os -g -v Using built-in specs. COLLECT_GCC=avr-gcc COLLECT_LTO_WRAPPER=/local/gnu/install/gcc-4.7/libexec/gcc/avr/4.7.0/lto-wrapper Target: avr Configured with: ../../gcc.gnu.org/trunk/configure --target=avr --prefix=/local/gnu/install/gcc-4.7 --disable-nls --disable-shared --enable-languages=c,c++ --with-dwarf2 --disable-lto Thread model: single gcc version 4.7.0 20110824 (experimental) (GCC) COLLECT_GCC_OPTIONS='-S' '-Os' '-g' '-v' /local/gnu/install/gcc-4.7/libexec/gcc/avr/4.7.0/cc1 -quiet -v assert-i.c -quiet -dumpbase assert-i.c -auxbase assert-i -g -Os -version -o assert-i.s GNU C (GCC) version 4.7.0 20110824 (experimental) (avr) compiled by GNU C version 4.3.2 [gcc-4_3-branch revision 141291], GMP version 5.0.1, MPFR version 3.0.0-p8, MPC version 0.8.2 ... assert-i.c: In function '__assert': assert-i.c:36:1: internal compiler error: in maybe_record_trace_start, at dwarf2cfi.c:2234 Please submit a full bug report, with preprocessed source if appropriate. See <http://gcc.gnu.org/bugs.html> for instructions. Reopened, changing status from attachement dialog seems to ignore it... Created attachment 25091 [details]
followup patch
I think you'd have been better off opening a new bug.
That said, the cross-jumping code needs a bit more restriction to
prevent the introduction of a region with inconsistent stack depth.
This works for the given test case, anyway.
Author: rth Date: Thu Aug 25 18:57:48 2011 New Revision: 178084 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=178084 Log: PR 50132 PR 49864 * cfgcleanup.c (old_insns_match_p): Don't allow cross-jump for non-constant stack adjutment. * expr.c (find_args_size_adjust): Break out from ... (fixup_args_size_notes): ... here. * rtl.h (find_args_size_adjust): Declare. Added: trunk/gcc/testsuite/gcc.dg/pr50132.c Modified: trunk/gcc/ChangeLog trunk/gcc/cfgcleanup.c trunk/gcc/expr.c trunk/gcc/rtl.h Thanks Richard. It works again. |