[Bug target/84876] [8 Regression] ICE on invalid code in lra_assign at gcc/lra-assigns.c:1601 since r258504

jakub at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Thu Mar 15 11:34:00 GMT 2018


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

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |jakub at gcc dot gnu.org

--- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Perhaps it would help to catch this earlier if the pointers were cleared after
freeing.
And perhaps the clearing needs to be done in another function, and not done in
fails_p in lra_assign,
but left for the caller to clear it later after the lra_split_hard_reg_for
call.

==18696== Invalid read of size 4
==18696==    at 0xD87999: lra_split_hard_reg_for() (lra-assigns.c:1758)
==18696==    by 0xD80591: lra(_IO_FILE*) (lra.c:2507)
==18696==    by 0xD27C63: do_reload() (ira.c:5465)
==18696==    by 0xD28156: (anonymous
namespace)::pass_reload::execute(function*) (ira.c:5649)
==18696==    by 0xE7506C: execute_one_pass(opt_pass*) (passes.c:2497)
==18696==    by 0xE753BD: execute_pass_list_1(opt_pass*) (passes.c:2586)
==18696==    by 0xE753EE: execute_pass_list_1(opt_pass*) (passes.c:2587)
==18696==    by 0xE75446: execute_pass_list(function*, opt_pass*)
(passes.c:2597)
==18696==    by 0x9F7D3B: cgraph_node::expand() (cgraphunit.c:2139)
==18696==    by 0x9F8800: output_in_order() (cgraphunit.c:2381)
==18696==    by 0x9F8ED5: symbol_table::compile() (cgraphunit.c:2623)
==18696==    by 0x9F914E: symbol_table::finalize_compilation_unit()
(cgraphunit.c:2717)
==18696==  Address 0xd3fe27c is 380 bytes inside a block of size 396 free'd
==18696==    at 0x4C30D18: free (vg_replace_malloc.c:530)
==18696==    by 0xD87625: lra_assign(bool&) (lra-assigns.c:1655)
==18696==    by 0xD80516: lra(_IO_FILE*) (lra.c:2482)
==18696==    by 0xD27C63: do_reload() (ira.c:5465)
==18696==    by 0xD28156: (anonymous
namespace)::pass_reload::execute(function*) (ira.c:5649)
==18696==    by 0xE7506C: execute_one_pass(opt_pass*) (passes.c:2497)
==18696==    by 0xE753BD: execute_pass_list_1(opt_pass*) (passes.c:2586)
==18696==    by 0xE753EE: execute_pass_list_1(opt_pass*) (passes.c:2587)
==18696==    by 0xE75446: execute_pass_list(function*, opt_pass*)
(passes.c:2597)
==18696==    by 0x9F7D3B: cgraph_node::expand() (cgraphunit.c:2139)
==18696==    by 0x9F8800: output_in_order() (cgraphunit.c:2381)
==18696==    by 0x9F8ED5: symbol_table::compile() (cgraphunit.c:2623)
==18696==  Block was alloc'd at
==18696==    at 0x4C2FB6B: malloc (vg_replace_malloc.c:299)
==18696==    by 0x1D26807: xmalloc (xmalloc.c:147)
==18696==    by 0xD87229: lra_assign(bool&) (lra-assigns.c:1601)
==18696==    by 0xD80516: lra(_IO_FILE*) (lra.c:2482)
==18696==    by 0xD27C63: do_reload() (ira.c:5465)
==18696==    by 0xD28156: (anonymous
namespace)::pass_reload::execute(function*) (ira.c:5649)
==18696==    by 0xE7506C: execute_one_pass(opt_pass*) (passes.c:2497)
==18696==    by 0xE753BD: execute_pass_list_1(opt_pass*) (passes.c:2586)
==18696==    by 0xE753EE: execute_pass_list_1(opt_pass*) (passes.c:2587)
==18696==    by 0xE75446: execute_pass_list(function*, opt_pass*)
(passes.c:2597)
==18696==    by 0x9F7D3B: cgraph_node::expand() (cgraphunit.c:2139)
==18696==    by 0x9F8800: output_in_order() (cgraphunit.c:2381)
==18696== 
==18696== Invalid write of size 4
==18696==    at 0xD879DF: lra_split_hard_reg_for() (lra-assigns.c:1761)
==18696==    by 0xD80591: lra(_IO_FILE*) (lra.c:2507)
==18696==    by 0xD27C63: do_reload() (ira.c:5465)
==18696==    by 0xD28156: (anonymous
namespace)::pass_reload::execute(function*) (ira.c:5649)
==18696==    by 0xE7506C: execute_one_pass(opt_pass*) (passes.c:2497)
==18696==    by 0xE753BD: execute_pass_list_1(opt_pass*) (passes.c:2586)
==18696==    by 0xE753EE: execute_pass_list_1(opt_pass*) (passes.c:2587)
==18696==    by 0xE75446: execute_pass_list(function*, opt_pass*)
(passes.c:2597)
==18696==    by 0x9F7D3B: cgraph_node::expand() (cgraphunit.c:2139)
==18696==    by 0x9F8800: output_in_order() (cgraphunit.c:2381)
==18696==    by 0x9F8ED5: symbol_table::compile() (cgraphunit.c:2623)
==18696==    by 0x9F914E: symbol_table::finalize_compilation_unit()
(cgraphunit.c:2717)
==18696==  Address 0x65fec60 is 0 bytes inside a block of size 396 free'd
==18696==    at 0x4C30D18: free (vg_replace_malloc.c:530)
==18696==    by 0xD87634: lra_assign(bool&) (lra-assigns.c:1656)
==18696==    by 0xD80516: lra(_IO_FILE*) (lra.c:2482)
==18696==    by 0xD27C63: do_reload() (ira.c:5465)
==18696==    by 0xD28156: (anonymous
namespace)::pass_reload::execute(function*) (ira.c:5649)
==18696==    by 0xE7506C: execute_one_pass(opt_pass*) (passes.c:2497)
==18696==    by 0xE753BD: execute_pass_list_1(opt_pass*) (passes.c:2586)
==18696==    by 0xE753EE: execute_pass_list_1(opt_pass*) (passes.c:2587)
==18696==    by 0xE75446: execute_pass_list(function*, opt_pass*)
(passes.c:2597)
==18696==    by 0x9F7D3B: cgraph_node::expand() (cgraphunit.c:2139)
==18696==    by 0x9F8800: output_in_order() (cgraphunit.c:2381)
==18696==    by 0x9F8ED5: symbol_table::compile() (cgraphunit.c:2623)
==18696==  Block was alloc'd at
==18696==    at 0x4C2FB6B: malloc (vg_replace_malloc.c:299)
==18696==    by 0x1D26807: xmalloc (xmalloc.c:147)
==18696==    by 0xD871F9: lra_assign(bool&) (lra-assigns.c:1599)
==18696==    by 0xD80516: lra(_IO_FILE*) (lra.c:2482)
==18696==    by 0xD27C63: do_reload() (ira.c:5465)
==18696==    by 0xD28156: (anonymous
namespace)::pass_reload::execute(function*) (ira.c:5649)
==18696==    by 0xE7506C: execute_one_pass(opt_pass*) (passes.c:2497)
==18696==    by 0xE753BD: execute_pass_list_1(opt_pass*) (passes.c:2586)
==18696==    by 0xE753EE: execute_pass_list_1(opt_pass*) (passes.c:2587)
==18696==    by 0xE75446: execute_pass_list(function*, opt_pass*)
(passes.c:2597)
==18696==    by 0x9F7D3B: cgraph_node::expand() (cgraphunit.c:2139)
==18696==    by 0x9F8800: output_in_order() (cgraphunit.c:2381)


More information about the Gcc-bugs mailing list