The %VAL construct doesn't accept INTEGER types with a size
greater than the default kind. This is essential for supporting
64 bit architectures where an address cannot be stored in
an integer with the default kind. Consider the simple module:
SUBROUTINE VALTEST2()
INTEGER*8 P
P = 0
CALL DOIT( %VAL( P ) )
END
That fails with error report:
> gfortran -c valtest2.f
valtest2.f:6.22:
CALL DOIT( %VAL( P ) )
1
Error: Kind of by-value argument at (1) is larger than default kind
Increasing the size of the default integer kind would resolve this
problem, but that would have secondary issues (which are not
acceptable in my code, the default integer maps to a defined-size
storage type).
--
Summary: %VAL construct fails on 64 bit
Product: gcc
Version: 4.3.0
Status: UNCONFIRMED
Severity: critical
Priority: P3
Component: fortran
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: p dot w dot draper at durham dot ac dot uk
GCC host triplet: x86_64-unknown-linux-gnu
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=30887