Bootstrapped and tested on x86_64-unknown-linux-gnu, applied.

Richard.

2016-06-14  Richard Biener  <rguent...@suse.de>

        PR middle-end/71526
        * genmatch.c (expr::gen_transform): Use in_type for comparisons
        if available.

        * gfortran.dg/pr71526.f90: New testcase.

Index: gcc/genmatch.c
===================================================================
*** gcc/genmatch.c      (revision 237426)
--- gcc/genmatch.c      (working copy)
*************** expr::gen_transform (FILE *f, int indent
*** 2288,2295 ****
      {
        /* comparisons use boolean_type_node (or what gets in), but
           their operands need to figure out the types themselves.  */
!       sprintf (optype, "boolean_type_node");
!       type = optype;
      }
    else if (*opr == COND_EXPR
           || *opr == VEC_COND_EXPR)
--- 2288,2301 ----
      {
        /* comparisons use boolean_type_node (or what gets in), but
           their operands need to figure out the types themselves.  */
!       if (in_type)
!       type = in_type;
!       else
!       {
!         sprintf (optype, "boolean_type_node");
!         type = optype;
!       }
!       in_type = NULL;
      }
    else if (*opr == COND_EXPR
           || *opr == VEC_COND_EXPR)
Index: gcc/testsuite/gfortran.dg/pr71526.f90
===================================================================
*** gcc/testsuite/gfortran.dg/pr71526.f90       (revision 0)
--- gcc/testsuite/gfortran.dg/pr71526.f90       (working copy)
***************
*** 0 ****
--- 1,21 ----
+ ! { dg-do link }
+ ! { dg-require-effective-target lto }
+ ! { dg-options "-O2 -flto" }
+ 
+ MODULE util
+   INTERFACE sort
+      MODULE PROCEDURE sort_cv
+   END INTERFACE
+ CONTAINS
+   SUBROUTINE sort_cv ( arr, n, index )
+     CHARACTER(LEN=*), INTENT(INOUT)          :: arr(1:n)
+     INTEGER, INTENT(OUT)                     :: INDEX(1:n)
+     INTEGER, ALLOCATABLE, DIMENSION(:, :)    :: entries
+     ALLOCATE(entries(max_length,SIZE(arr)))
+   END SUBROUTINE sort_cv
+ END MODULE util
+ USE util
+ INTEGER, ALLOCATABLE :: ind(:)
+ character(len=3), ALLOCATABLE :: d(:)
+ CALL sort(d,N,ind)
+ END

Reply via email to