Re: [PATCH] Fix fc-prototypes usage with C_INT64_T and non LP64 Targets.
Hi Steve, Hi Andrew, "long long". This was just an oversight and a missing check. Committed as obvious after a bootstrap/test on x86_64-linux-gnu. Thanks! I think this one is obvious enough that it deserves a backport. I've cherry-picked this for gcc12, will do gcc11 tomorrow. The patch is incomplete. module foo use, intrinsic :: iso_c_binding implicit none public :: bar type, bind(c) :: bar real(10) a end type end module This yields typedef struct bar { long_double a /* WARNING: Converting 'REAL(10)' to interoperable type */; } bar; That should be 'long double'. Fixed as obvious in 69044e11ac5 . I will backport soon. Thanks for the heads-up! Best regards Thomas
Re: [PATCH] Fix fc-prototypes usage with C_INT64_T and non LP64 Targets.
On Thu, Mar 30, 2023 at 07:39:55PM +0200, Thomas Koenig via Fortran wrote: > Hi Andrew, > > > "long long". This was just an oversight and a missing check. > > > > Committed as obvious after a bootstrap/test on x86_64-linux-gnu. > > Thanks! > > I think this one is obvious enough that it deserves a backport. > I've cherry-picked this for gcc12, will do gcc11 tomorrow. > The patch is incomplete. module foo use, intrinsic :: iso_c_binding implicit none public :: bar type, bind(c) :: bar real(10) a end type end module This yields typedef struct bar { long_double a /* WARNING: Converting 'REAL(10)' to interoperable type */; } bar; That should be 'long double'. -- Steve
Re: [PATCH] Fix fc-prototypes usage with C_INT64_T and non LP64 Targets.
Hi Andrew, "long long". This was just an oversight and a missing check. Committed as obvious after a bootstrap/test on x86_64-linux-gnu. Thanks! I think this one is obvious enough that it deserves a backport. I've cherry-picked this for gcc12, will do gcc11 tomorrow. Best regards Thomas
[PATCH] Fix fc-prototypes usage with C_INT64_T and non LP64 Targets.
The problem here is we were outputing long_long instead of "long long". This was just an oversight and a missing check. Committed as obvious after a bootstrap/test on x86_64-linux-gnu. gcc/fortran/ChangeLog: * dump-parse-tree.cc (get_c_type_name): Fix "long_long" type name to be "long long". Add a comment on why adding 2 to the name too. --- gcc/fortran/dump-parse-tree.cc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/gcc/fortran/dump-parse-tree.cc b/gcc/fortran/dump-parse-tree.cc index 3b24bdc1a6c..f4490da6a19 100644 --- a/gcc/fortran/dump-parse-tree.cc +++ b/gcc/fortran/dump-parse-tree.cc @@ -3696,7 +3696,10 @@ get_c_type_name (gfc_typespec *ts, gfc_array_spec *as, const char **pre, if (c_interop_kinds_table[i].f90_type == ts->type && c_interop_kinds_table[i].value == ts->kind) { + /* Skip over 'c_'. */ *type_name = c_interop_kinds_table[i].name + 2; + if (strcmp (*type_name, "long_long") == 0) + *type_name = "long long"; if (strcmp (*type_name, "signed_char") == 0) *type_name = "signed char"; else if (strcmp (*type_name, "size_t") == 0) -- 2.17.1