re PR tree-optimization/84803 (ICE from ifcvt_memrefs_wont_trap with -O3)

2018-03-12  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/84803
	* tree-if-conv.c (ifcvt_memrefs_wont_trap): Don't do anything
	for refs DR analysis didn't process.

	* gcc.dg/torture/pr84803.c: New testcase.

From-SVN: r258446
This commit is contained in:
Richard Biener 2018-03-12 12:32:28 +00:00 committed by Richard Biener
parent b270a5215a
commit 8f1a73b2bb
4 changed files with 46 additions and 0 deletions

View File

@ -1,3 +1,9 @@
2018-03-12 Richard Biener <rguenther@suse.de>
PR tree-optimization/84803
* tree-if-conv.c (ifcvt_memrefs_wont_trap): Don't do anything
for refs DR analysis didn't process.
2018-03-12 Richard Biener <rguenther@suse.de>
PR tree-optimization/84777

View File

@ -1,3 +1,8 @@
2018-03-12 Richard Biener <rguenther@suse.de>
PR tree-optimization/84803
* gcc.dg/torture/pr84803.c: New testcase.
2018-03-12 Jakub Jelinek <jakub@redhat.com>
PR c++/84813

View File

@ -0,0 +1,30 @@
/* { dg-do compile } */
long a;
long *b;
void c ();
void d ();
void
e (long f)
{
if (a)
*b = f;
}
void
g ()
{
c (g, e);
}
void
c (int f, int h ())
{
d (f, h, "");
}
void
d (int f, int h (), char *i, char *k)
{
int j;
d (f, h, i + 1, k);
while (--j)
h (*i);
}

View File

@ -864,6 +864,11 @@ base_object_writable (tree ref)
static bool
ifcvt_memrefs_wont_trap (gimple *stmt, vec<data_reference_p> drs)
{
/* If DR didn't see a reference here we can't use it to tell
whether the ref traps or not. */
if (gimple_uid (stmt) == 0)
return false;
data_reference_p *master_dr, *base_master_dr;
data_reference_p a = drs[gimple_uid (stmt) - 1];