Index: flang/module/iso_c_binding.f90 =================================================================== --- flang/module/iso_c_binding.f90 +++ flang/module/iso_c_binding.f90 @@ -21,7 +21,8 @@ type(c_funptr), parameter :: c_null_funptr = c_funptr(0) ! Table 18.2 (in clause 18.3.1) - ! TODO: Specialize (via macros?) for alternative targets + ! The following C types (c_int8_t .. c_intmax_t) are defined in stdint.h on + ! linux (/usr/include/stdint.h). integer, parameter :: & c_int8_t = 1, & c_int16_t = 2, & @@ -35,20 +36,29 @@ c_long_long = c_int64_t, & c_signed_char = c_int8_t, & c_size_t = kind(c_sizeof(1)), & - c_intmax_t = c_int128_t, & + c_intmax_t = c_int64_t, & ! Is c_int128_t if it is supported in future c_intptr_t = c_size_t, & c_ptrdiff_t = c_size_t integer, parameter :: & c_int_least8_t = c_int8_t, & - c_int_fast8_t = c_int8_t, & c_int_least16_t = c_int16_t, & - c_int_fast16_t = c_int16_t, & c_int_least32_t = c_int32_t, & - c_int_fast32_t = c_int32_t, & c_int_least64_t = c_int64_t, & - c_int_fast64_t = c_int64_t, & c_int_least128_t = c_int128_t, & c_int_fast128_t = c_int128_t +#if defined(_WIN32) || defined(__MACH__) + integer, parameter :: & + c_int_fast8_t = c_int8_t, & + c_int_fast16_t = c_int16_t, & + c_int_fast32_t = c_int32_t, & + c_int_fast64_t = c_int64_t +#else + integer, parameter :: & + c_int_fast8_t = c_int8_t, & + c_int_fast16_t = c_int64_t, & + c_int_fast32_t = c_int64_t, & + c_int_fast64_t = c_int64_t +#endif integer, parameter :: & c_float = 4, &