public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
From: "kargl at gcc dot gnu.org" <gcc-bugzilla@gcc.gnu.org>
To: gcc-bugs@gcc.gnu.org
Subject: [Bug fortran/106731] ICE on automatic array of derived type with DTIO
Date: Wed, 24 Aug 2022 17:38:22 +0000	[thread overview]
Message-ID: <bug-106731-4-Tbz0FyjZ4K@http.gcc.gnu.org/bugzilla/> (raw)
In-Reply-To: <bug-106731-4@http.gcc.gnu.org/bugzilla/>

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106731

kargl at gcc dot gnu.org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |kargl at gcc dot gnu.org

--- Comment #3 from kargl at gcc dot gnu.org ---
(In reply to federico from comment #0)
> A derived type that has user-defined I/O causes ICE on all gfortran versions
> 7 to 12.1.0, whenever it's being used as an automatic object.
> 
> The error is at 
> 
> 
>    63 |         type(t) :: automatic(n)
>       |                               1
> internal compiler error: in gfc_trans_auto_array_allocation, at
> fortran/trans-array.cc:6617
> 
> This does not happen if the derived type is allocated.
> 
> Here's the simplest example: 
> 
> module causes_ice
>     implicit none
> 
>     type :: t
>         real(8) :: x
>         contains
>         procedure, private :: write_formatted
>         generic :: write(formatted) => write_formatted
>     end type t
> 
>     contains
> 
>     subroutine write_formatted(this, unit, iotype, v_list, iostat, iomsg)
>        class(t), intent(in) :: this
>        integer, intent(in) :: unit
>        character(*), intent(in) :: iotype
>        integer, intent(in) :: v_list(:)
>        integer, intent(out) :: iostat
>        character(*), intent(inout) :: iomsg
>        write(unit, '(a)', iostat=iostat, iomsg=iomsg) 'dummy'
>     end subroutine write_formatted
> 
> end module causes_ice
> 
> module use_t
>     use causes_ice
>     implicit none
> 
>     public :: automatic_alloc
> 
>     contains
> 
>     subroutine automatic_alloc(n)
>         integer, intent(in) :: n
> 
>         ! Automatic array: ICE!
>         type(t) :: automatic(n)
> 
>         ! Allocatable: works
>         type(t), allocatable :: alloc(:)
>         allocate(alloc(n))
> 
>         ! Do anything
>         print *, 'n=',n,automatic(n)%x
> 
>     end subroutine automatic_alloc
> 
> end module use_t
> 
> program test
>     use use_t
>     call automatic_alloc(1)
> end program test
> 
> I could find other DTIO-related bugs, but none seemed related with the
> allocation type.

You're hitting an assert() in trans-array.cc.  It's unclear to me why the
assert() is there.  If it is commented out, the code compiles and executes.

% git diff gcc/fortran/trans-array.cc | cat
diff --git a/gcc/fortran/trans-array.cc b/gcc/fortran/trans-array.cc
index 05134952db4..c5916aeee53 100644
--- a/gcc/fortran/trans-array.cc
+++ b/gcc/fortran/trans-array.cc
@@ -6614,7 +6614,7 @@ gfc_trans_auto_array_allocation (tree decl, gfc_symbol *
sym,
   type = TREE_TYPE (type);

   gcc_assert (!sym->attr.use_assoc);
-  gcc_assert (!TREE_STATIC (decl));
+//  gcc_assert (!TREE_STATIC (decl));
   gcc_assert (!sym->module);

   if (sym->ts.type == BT_CHARACTER

  parent reply	other threads:[~2022-08-24 17:38 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-24  7:44 [Bug fortran/106731] New: " federico.perini at gmail dot com
2022-08-24  7:49 ` [Bug fortran/106731] " marxin at gcc dot gnu.org
2022-08-24  8:22 ` federico.perini at gmail dot com
2022-08-24 17:38 ` kargl at gcc dot gnu.org [this message]
2022-08-24 19:10 ` federico.perini at gmail dot com
2022-08-24 19:27 ` sgk at troutmask dot apl.washington.edu
2022-08-25  7:16 ` federico.perini at gmail dot com
2022-11-08 21:11 ` anlauf at gcc dot gnu.org
2022-12-23  3:13 ` jvdelisle at gcc dot gnu.org
2022-12-23  3:47 ` jvdelisle at gcc dot gnu.org
2022-12-23  5:21 ` cvs-commit at gcc dot gnu.org
2022-12-23 20:42 ` federico.perini at gmail dot com
2023-01-17 20:52 ` anlauf at gcc dot gnu.org
2023-01-18  1:00 ` jvdelisle at gcc dot gnu.org
2023-01-21 23:09 ` cvs-commit at gcc dot gnu.org
2023-01-21 23:13 ` jvdelisle at gcc dot gnu.org

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=bug-106731-4-Tbz0FyjZ4K@http.gcc.gnu.org/bugzilla/ \
    --to=gcc-bugzilla@gcc.gnu.org \
    --cc=gcc-bugs@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).