Hello world, the attached patch fixes a middle-end bug, which caused a Fortran regression. The solution was given by Andrew on IRC and in the PR, I did the testing.
Regression-tested with "configure --enable-languages=all" and "make -k check" on x86_64-pc-linux-gnu. OK for trunk? Regards Thomas 2018-04-07 Thomas Koenig <tkoe...@gcc.gnu.org> Andrew Pinski <pins...@gcc.gnu.org> PR middle-end/82976 * match.pd: Use constant_boolean_node of correct type instead of boolean_true_node or boolean_false_node for simplifying pointer comparisons to zero. 2018-04-07 Thomas Koenig <tkoe...@gcc.gnu.org> PR middle-end/82976 * gfortran.dg/realloc_on_assign_16a.f90: New test.
! { dg-do compile } ! { dg-options "-Ofast -fno-tree-forwprop" } ! Test that PR 82976 is fixed, this used to ICE. ! ! Contributed by Stefan Mauerberger <stefan.mauerber...@gmail.com> ! PROGRAM main !USE MPI TYPE :: test_typ REAL, ALLOCATABLE :: a(:) END TYPE TYPE(test_typ) :: xx, yy TYPE(test_typ), ALLOCATABLE :: conc(:) !CALL MPI_INIT(i) xx = test_typ( [1.0,2.0] ) yy = test_typ( [4.0,4.9] ) conc = [ xx, yy ] if (any (int (10.0*conc(1)%a) .ne. [10,20])) STOP 1 if (any (int (10.0*conc(2)%a) .ne. [40,49])) STOP 2 !CALL MPI_FINALIZE(i) END PROGRAM main
Index: match.pd =================================================================== --- match.pd (Revision 259152) +++ match.pd (Arbeitskopie) @@ -3700,7 +3700,7 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) (neeq @0 @1) (if (POINTER_TYPE_P (TREE_TYPE (@0)) && ptrs_compare_unequal (@0, @1)) - { neeq == EQ_EXPR ? boolean_false_node : boolean_true_node; }))) + { constant_boolean_node (neeq != EQ_EXPR, type); }))) /* PR70920: Transform (intptr_t)x eq/ne CST to x eq/ne (typeof x) CST. and (typeof ptr_cst) x eq/ne ptr_cst to x eq/ne (typeof x) CST.