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?