re PR tree-optimization/34029 (internal compiler error: verify_stmts failed)

2008-01-04  Richard Guenther  <rguenther@suse.de>

	PR middle-end/34029
	* tree-cfg.c (verify_expr): Do not look inside ADDR_EXPRs
	for verifying purposes if they are is_gimple_min_invariant.

	* gcc.c-torture/compile/pr34029-1.c: New testcase.
	* gcc.c-torture/compile/pr34029-2.c: Likewise.

From-SVN: r131325
This commit is contained in:
Richard Guenther 2008-01-04 15:56:41 +00:00 committed by Richard Biener
parent 578c21cb86
commit bdb69beee9
5 changed files with 51 additions and 0 deletions

View File

@ -1,3 +1,9 @@
2008-01-04 Richard Guenther <rguenther@suse.de>
PR middle-end/34029
* tree-cfg.c (verify_expr): Do not look inside ADDR_EXPRs
for verifying purposes if they are is_gimple_min_invariant.
2008-01-04 Aldy Hernandez <aldyh@redhat.com>
PR tree-optimization/34448

View File

@ -1,3 +1,9 @@
2008-01-04 Richard Guenther <rguenther@suse.de>
PR middle-end/34029
* gcc.c-torture/compile/pr34029-1.c: New testcase.
* gcc.c-torture/compile/pr34029-2.c: Likewise.
2008-01-04 Jakub Jelinek <jakub@redhat.com>
PR gcov-profile/34609

View File

@ -0,0 +1,22 @@
static const char s[] = "ab.cd.efghijk";
int
foo (const char *x)
{
const char *a;
int b = 0;
a = __builtin_strchr (s, '.');
if (a == 0)
b = 1;
else if ((a = __builtin_strchr (a + 1, '.')) == 0)
b = 1;
else if (__builtin_strncmp (s, x, a - s))
b = 1;
else if (__builtin_strncmp (a + 1, x + (a - s + 1), 4) < 0)
b = 1;
if (b)
return 4;
return 0;
}

View File

@ -0,0 +1,12 @@
static const char s[] = "ab.cd.efghijk";
static const char t[] = "abcde";
long
foo (const char *x)
{
const char *a;
long b = 0;
a = __builtin_strchr (s, '.');
return ((long) a) + (1 - (long) t);
}

View File

@ -3218,6 +3218,11 @@ verify_expr (tree *tp, int *walk_subtrees, void *data ATTRIBUTE_UNUSED)
error ("address taken, but ADDRESSABLE bit not set");
return x;
}
/* Stop recursing and verifying invariant ADDR_EXPRs, they tend
to become arbitrary complicated. */
if (is_gimple_min_invariant (t))
*walk_subtrees = 0;
break;
}