public inbox for gcc-bugs@sourceware.org help / color / mirror / Atom feed
From: "everythingfunctional at protonmail dot com" <gcc-bugzilla@gcc.gnu.org> To: gcc-bugs@gcc.gnu.org Subject: [Bug fortran/99922] New: Bind(C) with assumed length character should work Date: Mon, 05 Apr 2021 23:18:47 +0000 [thread overview] Message-ID: <bug-99922-4@http.gcc.gnu.org/bugzilla/> (raw) https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99922 Bug ID: 99922 Summary: Bind(C) with assumed length character should work Product: gcc Version: 10.2.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: fortran Assignee: unassigned at gcc dot gnu.org Reporter: everythingfunctional at protonmail dot com Target Milestone: --- As of (at least) Fortran 2018, bind(C) should be allowed for procedures with assumed length character variables, as one can pass CFI_cdesc_t* from the C side and it's supposed to work. MWE below ! main.f90 program main implicit none interface subroutine say_hello_c() bind(C) end subroutine end interface call say_hello_c() end program ! say_hello_fortran.f90 subroutine say_hello_fortran(name) bind(C) use iso_c_binding, only: c_char implicit none character(len=*, kind=c_char), intent(in) :: name print *, "Hello from Fortran, " // name // "!" end subroutine ! say_hello_c.c #include <string.h> #include <ISO_Fortran_binding.h> extern void say_hello_fortran(CFI_cdesc_t * name_descriptor); void say_hello_c() { char * name = "World"; CFI_cdesc_t name_descriptor; int error_code = CFI_establish( &name_descriptor, name, CFI_attribute_other, CFI_type_char, strlen(name), 0, NULL); say_hello_fortran(&name_descriptor); } Compiling say_hello_fortran.f90 gives the error say_hello_fortran.f90:1:33: 1 | subroutine say_hello_fortran(name) bind(C) | 1 Error: Character argument ‘name’ at (1) must be length 1 because procedure ‘say_hello_fortran’ is BIND(C) But the relevant text from the standard says (from section 18.3.6): any dummy argument without the VALUE attribute corresponds to a formal parameter of the prototype that is of a pointer type, and either the dummy argument is a nonallocatable nonpointer variable of type CHARACTER with assumed character length and the formal parameter is a pointer to CFI_cdesc_t, So this is supposed to be allowed, and I can confirm that I can compile and execute the above example and obtain the expected result with Intel (ifort and icc). output of gfortran --version: GNU Fortran (Ubuntu 10.2.0-13ubuntu1) 10.2.0 Copyright (C) 2020 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
next reply other threads:[~2021-04-05 23:18 UTC|newest] Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-04-05 23:18 everythingfunctional at protonmail dot com [this message] 2021-04-06 2:04 ` [Bug fortran/99922] " kargl at gcc dot gnu.org 2021-04-06 16:34 ` everythingfunctional at protonmail dot com 2021-10-22 20:42 ` sandra at gcc dot gnu.org
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=bug-99922-4@http.gcc.gnu.org/bugzilla/ \ --to=gcc-bugzilla@gcc.gnu.org \ --cc=gcc-bugs@gcc.gnu.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).