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

            Bug ID: 82978
           Summary: [PDT] [F2003] Paramaterized Derived Type LEN
                    parameters take the latest value per-kind
           Product: gcc
           Version: 8.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: fortran
          Assignee: unassigned at gcc dot gnu.org
          Reporter: foreese at gcc dot gnu.org
  Target Milestone: ---

Created attachment 42596
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=42596&action=edit
test case exhibiting strange PDT behavior

In the attached file I see what I believe is unusual behavior. I skimmed the
F03/F08 specs and by all accounts I could see, this behavior is unexpected.

To summarize/generalize the test file, with the following declarations:

> type :: pdt_t(k, l)
> integer, kind :: k
> integer, len :: l
> character(len=l) :: ch
> end type
> 
> type(pdt_t(k, l1)) :: t1
> type(pdt_t(k, l2)) :: t2
> ...
> type(pdt_t(k, ln)) :: tn

Then I see that len(t1%ch) == len(t2%ch) == ... == len(tn%ch) == ln. That is to
say, every PDT variable gets ch with the last length defined for the same kind.
If different kinds are passed, then the lengths seem to differ fine.

Here is my output for the attached file:

$ gfortran --version
GNU Fortran (GCC) 8.0.0 20171107 (experimental)
[...]
$ gfortran pdtlens.f03
$ ./a.out
 exp. len       act. len
           1           2
           2           2
           4           5
           5           5
           9           7
           7           7
         100         200
         200         200


Am I just misinterpreting the Fortran spec, or is this a real bug?

Reply via email to