This is the mail archive of the mailing list for the GCC project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

VN_INFO might be NULL in PRE


PRE bases on the result of value numbering (run_scc_vn). At the end,
it free_scc_vn. But before free_scc_vn, it might call cleanup_tree_cfg

  if (do_eh_cleanup || do_ab_cleanup)
    cleanup_tree_cfg ();

cleanup_tree_cfg might call make_ssa_name which might reuse some
"name" from the FREE_SSANAMES list. If the VN_INFO of the "name" is
NULL, free_scc_vn will "Segmentation fault". PR 54902
( shows a real case.
The attached log shows the gdb backtrace to create a new ssa name.

Here is function VN_INFO:

VN_INFO (tree name)
  vn_ssa_aux_t res = VEC_index (vn_ssa_aux_t, vn_ssa_aux_table,
                                SSA_NAME_VERSION (name));
  gcc_checking_assert (res);
  return res;

Can we make sure "res" is not NULL for the new ssa name?

In trunk, Richard's "Make gsi_remove return whether EH cleanup is
required" patches in r186159 and r186164 make "do_eh_cleanup" to
false. So cleanup_tree_cfg is not called in PRE. Then no new ssa name
will be created.

Does the Richard's patch fix the root cause?


Attachment: bt.log
Description: Binary data

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]