https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93787
--- Comment #4 from Tobias Burnus <burnus at gcc dot gnu.org> --- The problem is in count_types_test: For 'type(*),dimension(..)', compare_type_rank_if accepts a scalar integer For 'type(*),dimension(*)', it does not. As 'dimension(..)' accepts scalars, the symmetry is broken. * For count_types_test f1=(a,async), f2=(a,len,async), the check if (ac1 > ac2) is false as ac1 < ac2 * For count_types_test f1=(a,len,async), f2=(a,async), counting for f1's: 'len': ac1 = 2 ('len', 'async' – as 'a' as different rank != 0) That's fine but now: counting all type-rank-compatibles in f2 finds '(a,async)' again 2 → 'if (ac1 > ac2)' (Looking through the checks, I wonder whether there is an ambiguity issue with dimension(*) vs. dimension(1,*) vs. dimension(1,1,*) as one can pass to all of them any array rank, including rank=0 (for array element), but I have no checked whether other checks catch this nor what the spec says.) In this case, a simple count of all nonoptional arguments would solve it, but I wonder whether there are some gotchas when playing more with dimension(..) (and possibly type(*) or NO_ARG_CHECK).