http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51076

             Bug #: 51076
           Summary: [F2008][tracking] Pointer initialization in init
                    expression
    Classification: Unclassified
           Product: gcc
           Version: 4.7.0
            Status: UNCONFIRMED
          Keywords: rejects-valid
          Severity: normal
          Priority: P3
         Component: fortran
        AssignedTo: unassig...@gcc.gnu.org
        ReportedBy: bur...@gcc.gnu.org
        Depends on: 45290


The example is motivated by the discussion at
  http://j3-fortran.org/pipermail/j3/2011-November/004840.html

It seems as is using
  type(T) :: X = t(tgt)
is (should be) valid while using
  type(T), PARAMTER :: X = t(tgt)
is (should be) invalid.

Currently, gfortran rejects both. Note that this is a tracking bug as one
seemingly needs to modify the wording to explicitly forbid the usage as
PARAMETER, which is technically impossible to implement.


 type(T) :: X = t(tgt) ! Check fails
                  1
Error: Parameter 'tgt' at (1) has not been declared or is a variable, which
does not reduce to a constant expression


 type :: t
   integer, pointer :: P
 end type t
 integer, target, save :: tgt
 type(T) :: X = t(tgt) ! (1) - a constness check fails
 type(T) :: Y
 Y = t(tgt)   ! (2) Accepted
 Y = t(P=tgt) ! (3) Accepted
end

Reply via email to