https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99266
--- Comment #2 from Tobias Burnus <burnus at gcc dot gnu.org> --- subroutine foo(dummy) class(*) :: dummy allocatable :: dummy end gets rejected with: Error: ALLOCATABLE attribute conflicts with POINTER attribute at (1) The following is accepted, except after the patch proposed for PR99254: subroutine foo class(*) :: local allocatable :: local end The reason is how 'class_ok = ' is set. – And in general, the issue is due to how attributes are checked. NOTE: If attributes change after the symbol is used, we may create unused derived types, which is hopefully harmless. The following is also a bit odd: rank = !(*as) || (*as)->rank == -1 ? GFC_MAX_DIMENSIONS : (*as)->rank; why do become become scalars (as == NULL) rank = 15 but not coarray scalars rank == 0? Shouldn't this be: rank = (!(*as) ? 0 : (...rank == -1 ? ...MAX... : ...rank)) ?