From 30934c5da53286d78371d396578a757c63942bc9 Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Tue, 14 Jun 2016 13:47:01 +0000 Subject: [PATCH] re PR middle-end/71526 (ICE: verify_gimple failed) 2016-06-14 Richard Biener PR middle-end/71526 * genmatch.c (expr::gen_transform): Use in_type for comparisons if available. * gfortran.dg/pr71526.f90: New testcase. From-SVN: r237441 --- gcc/ChangeLog | 6 ++++++ gcc/genmatch.c | 10 ++++++++-- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gfortran.dg/pr71526.f90 | 21 +++++++++++++++++++++ 4 files changed, 40 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/pr71526.f90 diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 68366635e7a..82a84fa22c8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2016-06-14 Richard Biener + + PR middle-end/71526 + * genmatch.c (expr::gen_transform): Use in_type for comparisons + if available. + 2015-06-14 Kyrylo Tkachov * config/aarch64/aarch64.c (aarch64_mask_and_shift_for_ubfiz_p): diff --git a/gcc/genmatch.c b/gcc/genmatch.c index 9bb1279dc00..f5aa29b72f5 100644 --- a/gcc/genmatch.c +++ b/gcc/genmatch.c @@ -2288,8 +2288,14 @@ expr::gen_transform (FILE *f, int indent, const char *dest, bool gimple, { /* 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; + 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) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 248064d311c..30e53be7470 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2016-06-14 Richard Biener + + PR middle-end/71526 + * gfortran.dg/pr71526.f90: New testcase. + 2016-06-14 Andre Vieira * gcc.dg/zero_bits_compound-1.c: Support aarch64. diff --git a/gcc/testsuite/gfortran.dg/pr71526.f90 b/gcc/testsuite/gfortran.dg/pr71526.f90 new file mode 100644 index 00000000000..dbf989f39bf --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr71526.f90 @@ -0,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 -- 2.30.2