------- Comment #1 from thomas dot orgis at awi dot de 2008-02-26 17:37 -------
I stripped a bit more and I think I got the root of the problem, illustrated by
this more minimal example:
MODULE data
IMPLICIT NONE
PRIVATE
INTEGER, PARAMETER :: dat_dimension = 2
TYPE dat_sigtype
real(kind=4) :: gamma
END TYPE dat_sigtype
TYPE(dat_sigtype), PARAMETER :: dat_sig = dat_sigtype( 1.3_4 )
real(kind=4), PARAMETER :: expo = 1.3_4
real(kind=4), PARAMETER :: rconst = 2._4**dat_sig%gamma
real(kind=4), PARAMETER :: rconst2 = 2._4**expo
CONTAINS
END MODULE data
...and these gcc messages:
In file baddata.f90:11
TYPE(dat_sigtype), PARAMETER :: dat_sig = dat_sigtype( 1.3_4 )
1
Error: Exponent at (1) must be INTEGER for an initialization expression
In file baddata.f90:16
real(kind=4), PARAMETER :: rconst2 = 2._4**expo
1
Error: Exponent at (1) must be INTEGER for an initialization expression
So we are dealing with a limitation (in accordance to F95 standard, as I
read... and thus correct here) with initialization.
The problem I still have with gcc here is that when the exponent comes from a
derived type, the error message points to the exponents definition (which is
correct code) and not the the bad initialization code (which is not correct
code).
--
thomas dot orgis at awi dot de changed:
What |Removed |Added
----------------------------------------------------------------------------
Summary|Real initialization problem |Misleading error message
|(invalid error): Exponent at|with derived types: Exponent
|(1) must be INTEGER for an |at (1) must be INTEGER for
|initialization expression |an initialization expression
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35381