https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103662
--- Comment #15 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Putting a breakpoint on new_alias_set, I see that RECORD_TYPE sq gets alias set 1 RECORD_TYPE s gets alias set 9 RECORD_TYPE t gets alias set 10 Those are type sq sequence integer :: i end type sq and type, bind(c) :: s integer (c_int) :: k end type s type t sequence integer :: k end type t in the testcase. The testcase stores through the sq type and reads through pointer to s and pointer to t type. As the alias sets are different, for the middle-end the testcase is invalid. Now, the question is what is the Fortran unlimited polymorphic semantics, if one can store through one type and read through a different type which just has the same layout, or if it also has to use the same name etc., or if it is even acceptable to store through say a type with a pair of integers and read through a type with double precision etc. GCC has types that can alias anything, so if the semantics is like that, unlimited polymorphic middle-end pointers perhaps should use that. Or the testcase is invalid and has to use type sq in foo as well. Or we need to ensure sq and s/t above have the same alias set.