[PATCH, fortran] Interoperability with C int128_t types

Tobias Burnus tobias.burnus@physik.fu-berlin.de
Wed May 14 20:11:00 GMT 2008


Daniel Kraft wrote:
> I've attached a patch and its ChangeLog that makes
> gfc_match_structure_constructor interpret named arguments for
> structure constructors and use default initializers for components not
> explicitelly given a value.

I think the following program is valid since no private components are
accessed by the (useless) constructor:

  module m
    type t
      private
      integer :: i = 5
    end type t
  end module m

  use m
  type(t) :: x = t()
  end

It is currently rejected with:
  Error: Structure constructor for 't' at (1) has PRIVATE access

It is also rejected by NAG f95 and g95; however, I believe the only
restriction is the following:

  C488 (R457) The type name and all components of the type for
              which a component-spec appears shall be accessible in
              the scoping unit containing the structure constructor.

And C488 does not apply.


> I'm not sure about where to insert gfc_notify_std calls; maybe F2003
> notify-std when an argument with name is parsed and possibly also when
> a default value is inserted? Or is that allowed for -std=f95, too? I
> will then of course also add tests for these messages as appropriate.

Well, Fortran 95 allows:
"4.4.4 Construction of derived-type values [...]
 R431  structure-constructor  is  type-name ( expr-list )
       The sequence of expressions in a structure component values
       that shall agree in number and order with the components of
       the derived type."

Thus your checks for applying a default value ond for the presence of a
keyword= sound reasonable.

Otherwise it looks OK. I like the test cases :-)

Tobias



More information about the Gcc-patches mailing list