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

--- Comment #12 from Francois-Xavier Coudert <fxcoudert at gcc dot gnu.org> ---
I disagree with Tobias' reading: it seems to me that the single-variable common
block should be interoperable with both the single-common C struct and C
variable.

The Intel compiler makes both cases work:

[fx@kelvin tmp]$ cat a.f90 
program test
  use iso_c_binding
  integer(c_int) :: i
  common /a/ i
  bind(c) :: /a/

  interface
    subroutine foo() bind(c)
    end subroutine
  end interface

  i = 42
  print *, i
  call foo()
  print *, i
end program test
[fx@kelvin tmp]$ cat a1.c 
extern int a;
void foo (void) { a = -1; }
[fx@kelvin tmp]$ cat a2.c 
extern struct { int i; } a;
void foo (void) { a.i = -1; }
[fx@kelvin tmp]$ icc -c a1.c && ifort a.f90 a1.o && ./a.out
          42
          -1
[fx@kelvin tmp]$ icc -c a2.c && ifort a.f90 a2.o && ./a.out
          42
          -1


I believe we should do so too. And if I understand correctly what Richard said,
this means relaxing the LTO type rules, is that right?

Reply via email to