https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101577
Bug ID: 101577 Summary: [Interop] TYPE with BIND(C): Reject empty TYPE with zero components Product: gcc Version: 12.0 Status: UNCONFIRMED Keywords: diagnostic Severity: normal Priority: P3 Component: fortran Assignee: unassigned at gcc dot gnu.org Reporter: burnus at gcc dot gnu.org CC: sandra at gcc dot gnu.org Target Milestone: --- Fortran 2018 has: C1805 (R726) A derived type with the BIND attribute shall have at least one component. And: "The effect of such a constraint ... that a processor is required to have the capability to detect and report violations of constraints" Hence, I'd expect an error when using the following with -std=f2018 (and f95/f2003/f2008): type,bind(C) :: t end type t end However, gfortran currently only shows the warning: Warning: Derived type âtâ with BIND(C) attribute at (1) is empty, and may be inaccessible by the C companion processor * * * Note that the explicit constraint is new in Fortran 2018 â before it only rejects this indirectly by referencing to the ISO C standard (which disallows empty struct). But I do note that an empty struct is a common vendor extension. * * * The issue came up at https://mailman.j3-fortran.org/pipermail/j3/2021-July/013190.html and the C reference which disallows size-zero structs is: 6.7.2.1 of C 2018 As GCC supports empty structs, we could consider skipping the warning with -std=gnu â or we keep it in the 'else' branch. In any case, there should be a gfc_notify_std (GFC_STD_GNU, ... diagnostic in the 'if' branch.