Bug 51383 - [OOP] arrays of extended types break when associated
Summary: [OOP] arrays of extended types break when associated
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: fortran (show other bugs)
Version: 4.6.1
: P3 normal
Target Milestone: ---
Assignee: Not yet assigned to anyone
URL:
Keywords: rejects-valid
Depends on:
Blocks:
 
Reported: 2011-12-01 20:05 UTC by Karl
Modified: 2011-12-04 16:33 UTC (History)
1 user (show)

See Also:
Host:
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Karl 2011-12-01 20:05:59 UTC
An ASSOCIATE block that associates a name with an array of derived types causes a compiler error.

It is easily reproduced with the following short program:

program extend
   type :: a
      integer :: i
   end type a
   type, extends (a) :: b
      integer :: j
   end type b
   type (a) :: x(2)
   type (b) :: y(2)
   associate (x1 => x, y1 => y)
      x1(1)%i = 1
      ! Commenting out the following line will avoid the error
      y1(1)%i = 2
   end associate
end program extend

In my version, I get the following error:
## start error message ##
associate.f90:1.14:

program extend
              1
Internal Error at (1):
find_array_spec(): Component not found
## end error message ##

This example is trivial, of course (just use y instead of y1 and all is well), but if the association is something like
  associate (y1 => really_long%complicated(3)%variable(2)%array)
it becomes more than a triviality....

As can be seen from the example above, this bug does not occur for "normal" derived types, only ones created with the EXTENDS key word.
Comment 1 Tobias Burnus 2011-12-04 16:33:19 UTC
Author: burnus
Date: Sun Dec  4 16:33:15 2011
New Revision: 181992

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=181992
Log:
2011-12-04  Tobias Burnus  <burnus@net-b.de>

        PR fortran/51383
        * resolve.c (find_array_spec): Use ref->u.c.component
        directly without starting from ts.u.derived.

2011-12-04  Tobias Burnus  <burnus@net-b.de>

        PR fortran/51383
        * gfortran.dg/associate_10.f90: New.



Added:
    trunk/gcc/testsuite/gfortran.dg/associate_10.f90
Modified:
    trunk/gcc/fortran/ChangeLog
    trunk/gcc/fortran/resolve.c
    trunk/gcc/testsuite/ChangeLog
Comment 2 Tobias Burnus 2011-12-04 16:33:52 UTC
FIXED on the trunk (4.7).

Thanks for the bug report!