Bug 51076

Summary: [F2008][tracking] Pointer initialization in init expression
Product: gcc Reporter: Tobias Burnus <burnus>
Component: fortranAssignee: Not yet assigned to anyone <unassigned>
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

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
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
Comment 1 Dominique d'Humieres 2015-08-30 10:14:27 UTC

*** This bug has been marked as a duplicate of bug 51266 ***