[Bug middle-end/55279] New: New pseudo registers aren't supported in CSE
hjl.tools at gmail dot com
gcc-bugzilla@gcc.gnu.org
Mon Nov 12 03:47:00 GMT 2012
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55279
Bug #: 55279
Summary: New pseudo registers aren't supported in CSE
Classification: Unclassified
Product: gcc
Version: 4.8.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: middle-end
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: hjl.tools@gmail.com
Since CSE allocates register table in init_cse_reg_info,
if a pseudo register is created to convert memory address,
we get
==23925==
==23925== Debugger has detached. Valgrind regains control. We continue.
==23925== Invalid write of size 4
==23925== at 0xF813E1: get_cse_reg_info_1(unsigned int) (cse.c:826)
==23925== by 0xF81473: get_cse_reg_info(unsigned int) (cse.c:841)
==23925== by 0xF84792: hash_rtx_cb(rtx_def const*, machine_mode, int*, int*,
bool, int (*)(rtx_def const*, machine_mode, rtx_def**, machine_mode*))
(cse.c:2312)
==23925== by 0xF85097: hash_rtx(rtx_def const*, machine_mode, int*, int*,
bool) (cse.c:2560)
==23925== by 0xF850C7: canon_hash(rtx_def*, machine_mode) (cse.c:2571)
==23925== by 0xF899F7: cse_insn(rtx_def*) (cse.c:4703)
==23925== by 0xF8EA8A: cse_extended_basic_block(cse_basic_block_data*)
(cse.c:6408)
==23925== by 0xF8F024: cse_main(rtx_def*, int) (cse.c:6585)
==23925== by 0xF90D40: rest_of_handle_cse() (cse.c:7435)
==23925== by 0x936857: execute_one_pass(opt_pass*) (passes.c:2337)
==23925== by 0x936ACE: execute_pass_list(opt_pass*) (passes.c:2398)
==23925== by 0x936AFF: execute_pass_list(opt_pass*) (passes.c:2399)
==23925== Address 0xb7611fc is 12 bytes after a block of size 2,560 alloc'd
==23925== at 0x4A0881C: malloc (vg_replace_malloc.c:270)
==23925== by 0x10E4F74: xmalloc (xmalloc.c:147)
==23925== by 0xF812FF: init_cse_reg_info(unsigned int) (cse.c:793)
==23925== by 0xF8EE57: cse_main(rtx_def*, int) (cse.c:6528)
==23925== by 0xF90D40: rest_of_handle_cse() (cse.c:7435)
==23925== by 0x936857: execute_one_pass(opt_pass*) (passes.c:2337)
==23925== by 0x936ACE: execute_pass_list(opt_pass*) (passes.c:2398)
==23925== by 0x936AFF: execute_pass_list(opt_pass*) (passes.c:2399)
==23925== by 0x666D1D: expand_function(cgraph_node*) (cgraphunit.c:1643)
==23925== by 0x6671D8: expand_all_functions() (cgraphunit.c:1747)
==23925== by 0x667C62: compile() (cgraphunit.c:2045)
==23925== by 0x667DE1: finalize_compilation_unit() (cgraphunit.c:2122)
==23925==
get_cse_reg_info_1 doesn't check if regno < cse_reg_info_table_size.
More information about the Gcc-bugs
mailing list