diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e62e9ab3d3b..e461f4b9ec1 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2010-05-03 Richard Guenther + + 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 PR debug/43972 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 5fe4b1d8616..019661ec8e0 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-05-03 Richard Guenther + + PR tree-optimization/43971 + * gcc.dg/pr43971.c: New testcase. + 2010-05-03 Jakub Jelinek PR debug/43972 diff --git a/gcc/testsuite/gcc.dg/pr43971.c b/gcc/testsuite/gcc.dg/pr43971.c new file mode 100644 index 00000000000..9091fc27326 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr43971.c @@ -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; +} diff --git a/gcc/tree-ssa-structalias.c b/gcc/tree-ssa-structalias.c index fce39de1770..89b5c9cd576 100644 --- a/gcc/tree-ssa-structalias.c +++ b/gcc/tree-ssa-structalias.c @@ -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);