re PR tree-optimization/43971 (index domain error in tree-ssa-structalias.c:3450)

2010-05-03  Richard Guenther  <rguenther@suse.de>

	PR tree-optimization/43971
	* tree-ssa-structalias.c (get_constraint_for_1): Fix
	constraints in the !flag_delete_null_pointer_checks case.

	* gcc.dg/pr43971.c: New testcase.

From-SVN: r158991
This commit is contained in:
Richard Guenther 2010-05-03 16:12:12 +00:00 committed by Richard Biener
parent c4e26da143
commit 8eb7bc3cda
4 changed files with 36 additions and 9 deletions

View File

@ -1,3 +1,9 @@
2010-05-03 Richard Guenther <rguenther@suse.de>
PR tree-optimization/43971
* tree-ssa-structalias.c (get_constraint_for_1): Fix
constraints in the !flag_delete_null_pointer_checks case.
2010-05-03 Jakub Jelinek <jakub@redhat.com>
PR debug/43972

View File

@ -1,3 +1,8 @@
2010-05-03 Richard Guenther <rguenther@suse.de>
PR tree-optimization/43971
* gcc.dg/pr43971.c: New testcase.
2010-05-03 Jakub Jelinek <jakub@redhat.com>
PR debug/43972

View File

@ -0,0 +1,14 @@
/* { dg-do compile } */
/* { dg-options "-Os -fno-delete-null-pointer-checks" } */
union ktime {
long tv64;
};
typedef union ktime ktime_t;
ktime_t
do_one_initcall(ktime_t rettime, ktime_t calltime)
{
ktime_t delta;
delta = ({ (ktime_t){ .tv64 = (rettime).tv64 - (calltime).tv64 }; });
return delta;
}

View File

@ -3286,16 +3286,18 @@ get_constraint_for_1 (tree t, VEC (ce_s, heap) **results, bool address_p)
in that case *NULL does not fail, so it _should_ alias *anything.
It is not worth adding a new option or renaming the existing one,
since this case is relatively obscure. */
if (flag_delete_null_pointer_checks
&& ((TREE_CODE (t) == INTEGER_CST
&& integer_zerop (t))
/* The only valid CONSTRUCTORs in gimple with pointer typed
elements are zero-initializer. But in IPA mode we also
process global initializers, so verify at least. */
|| (TREE_CODE (t) == CONSTRUCTOR
&& CONSTRUCTOR_NELTS (t) == 0)))
if ((TREE_CODE (t) == INTEGER_CST
&& integer_zerop (t))
/* The only valid CONSTRUCTORs in gimple with pointer typed
elements are zero-initializer. But in IPA mode we also
process global initializers, so verify at least. */
|| (TREE_CODE (t) == CONSTRUCTOR
&& CONSTRUCTOR_NELTS (t) == 0))
{
temp.var = nothing_id;
if (flag_delete_null_pointer_checks)
temp.var = nothing_id;
else
temp.var = anything_id;
temp.type = ADDRESSOF;
temp.offset = 0;
VEC_safe_push (ce_s, heap, *results, &temp);