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.

Reply via email to