Bug 51076

Summary: [F2008][tracking] Pointer initialization in init expression
Product: gcc Reporter: Tobias Burnus <burnus>
Component: fortranAssignee: Not yet assigned to anyone <unassigned>
Status: UNCONFIRMED ---    
Severity: normal Keywords: rejects-valid
Priority: P3    
Version: 4.7.0   
Target Milestone: ---   
Host: Target:
Build: Known to work:
Known to fail: Last reconfirmed:
Bug Depends on: 45290, 55887    
Bug Blocks:    

Description Tobias Burnus 2011-11-10 10:35:39 UTC
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