https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69101

--- Comment #1 from kargl at gcc dot gnu.org ---
This has nothing to do with either -fdefault-integer-8 or
-finteger-4-integer-8.  The IEEE module is not implemented 
correctly.

program foo
   use ieee_arithmetic
   implicit none
   integer(8) n
   integer k1
   n = precision(0.d0)
   k1 = ieee_selected_real_kind(n)
end program foo

% gfc -c yy.f90
yy.f90:7:32:

    k1 = ieee_selected_real_kind(n)
                                1

Error: Type mismatch in argument 'p' at (1); passed INTEGER(8) to INTEGER(4)

The Fortran 2003 standard contains

14.10.17 IEEE_SELECTED_REAL_KIND ([P, R])

Description. Returns a value of the kind type parameter of an IEEE
  real data type with decimal precision of at least P digits and
  a decimal exponent range of at least R.  For data objects of such
  a type, IEEE SUPPORT DATATYPE(X) has the value true.

Class. Transformational function.

Arguments. At least one argument shall be present.

P (optional)  shall be scalar and of type integer.
R (optional)  shall be scalar and of type integer.

Result Characteristics. Default integer scalar.


Note the description of P is 'of type integer' not 'of default
integer type'.

As a bonus, the result is a 'default integer scalar' so to
support the -fdefault-integer-8 or -finteger-4-integer-8 option,
you need to generate code that can return either kind type.

Reply via email to