[Bug bootstrap/77768] [7 Regression] LTO/PGO -O3 bootstrap broken: tree-vrp.c:11053:0: internal compiler error: Segmentation fault

rguenth at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Wed Sep 28 09:37:00 GMT 2016


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

--- Comment #4 from Richard Biener <rguenth at gcc dot gnu.org> ---
Interesting.  This means vnresult is NULL.  I see we can arrive here through

tree
vn_reference_lookup (tree op, tree vuse, vn_lookup_kind kind,
                     vn_reference_t *vnresult, bool tbaa_p)
{
  vec<vn_reference_op_s> operands;
  struct vn_reference_s vr1;
  tree cst;
  bool valuezied_anything;

  if (vnresult)
    *vnresult = NULL;

  vr1.vuse = vuse_ssa_val (vuse);
  vr1.operands = operands
    = valueize_shared_reference_ops_from_ref (op, &valuezied_anything);
  vr1.type = TREE_TYPE (op);
  vr1.set = tbaa_p ? get_alias_set (op) : 0;
  vr1.hashcode = vn_reference_compute_hash (&vr1);
  if ((cst = fully_constant_vn_reference_p (&vr1)))
    return cst;

but somehow this means that we have sth like

static const int i[5] = { 1, 2, 3, };

  i[1] = 2;

which should prevent the initializer from being constant ...  A really odd
case I'd like to see a testcase for (trying to reproduce on x86_64 right now).

A simple "fix" is to guard the code for the vnresult == NULL, erring on
the safe side.

Can you dump me the stmt and maybe also the stored decl (with debug_tree)?


More information about the Gcc-bugs mailing list