public inbox for fortran@gcc.gnu.org
 help / color / mirror / Atom feed
From: Paul Richard Thomas <paul.richard.thomas@gmail.com>
To: "fortran@gcc.gnu.org" <fortran@gcc.gnu.org>,
	gcc-patches <gcc-patches@gcc.gnu.org>
Cc: D Kinniburgh <davidgkinniburgh@yahoo.co.uk>
Subject: [Patch, fotran] PR70673 - [5/6/7 Regression] ICE with module containing functions with allocatable character scalars
Date: Sat, 11 Jun 2016 19:26:00 -0000	[thread overview]
Message-ID: <CAGkQGiJshLu0sZhMf4XOh4cK9fu+U6idOYztZ9N8hHtZLYwW+g@mail.gmail.com> (raw)

[-- Attachment #1: Type: text/plain, Size: 404 bytes --]

Dear All,

The fix to eliminate this ICE is trivial.

Bootstrapped and regtested on FC21/x86_64 - OK for 5 to 7 branches?

Cheers

Paul

2016-06-11  Paul Thomas  <pault@gcc.gnu.org>

    PR fortran/70673
    * frontend-passes.c (realloc_string_callback): Add a call to
    gfc_dep_compare_expr.

2016-06-11  Paul Thomas  <pault@gcc.gnu.org>

    PR fortran/70673
    * gfortran.dg/pr70673.f90: New test.

[-- Attachment #2: submit.diff --]
[-- Type: text/plain, Size: 1744 bytes --]

Index: gcc/fortran/frontend-passes.c
===================================================================
*** gcc/fortran/frontend-passes.c	(revision 237168)
--- gcc/fortran/frontend-passes.c	(working copy)
*************** realloc_string_callback (gfc_code **c, i
*** 175,180 ****
--- 175,187 ----
    if (!gfc_check_dependency (expr1, expr2, true))
      return 0;

+   /* gfc_check_dependency doesn't always pick up identical expressions.
+      However, eliminating the above sends the compiler into an infinite
+      loop on valid expressions.  Without this check, the gimplifier emits
+      an ICE for a = a, where a is deferred character length.  */
+   if (!gfc_dep_compare_expr (expr1, expr2))
+     return 0;
+
    current_code = c;
    inserted_block = NULL;
    changed_statement = NULL;
Index: gcc/testsuite/gfortran.dg/pr70673.f90
===================================================================
*** gcc/testsuite/gfortran.dg/pr70673.f90	(revision 0)
--- gcc/testsuite/gfortran.dg/pr70673.f90	(working copy)
***************
*** 0 ****
--- 1,25 ----
+ ! { dg-do run }
+ !
+ ! Test the fix for PR70673
+ !
+ ! Contributed by David Kinniburgh  <davidgkinniburgh@yahoo.co.uk>
+ !
+ module m
+ contains
+   subroutine s(inp)
+     character(*), intent(in) :: inp
+     character(:), allocatable :: a
+     a = a           ! This used to ICE.
+     a = inp
+     a = a           ! This used to ICE too
+     if ((len (a) .ne. 5) .or. (a .ne. "hello")) call abort
+     a = a(2:3)      ! Make sure that temporary creation is not broken.
+     if ((len (a) .ne. 2) .or. (a .ne. "el")) call abort
+     deallocate (a)
+     a = a           ! This would ICE too.
+   end subroutine s
+ end module m
+
+   use m
+   call s("hello")
+ end

             reply	other threads:[~2016-06-11 19:26 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-06-11 19:26 Paul Richard Thomas [this message]
2016-06-12 15:21 ` Thomas Koenig
2016-06-12 17:06   ` Paul Richard Thomas
2016-06-13  7:50   ` Paul Richard Thomas

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAGkQGiJshLu0sZhMf4XOh4cK9fu+U6idOYztZ9N8hHtZLYwW+g@mail.gmail.com \
    --to=paul.richard.thomas@gmail.com \
    --cc=davidgkinniburgh@yahoo.co.uk \
    --cc=fortran@gcc.gnu.org \
    --cc=gcc-patches@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).