https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92533
--- Comment #1 from Tobias Burnus <burnus at gcc dot gnu.org> --- Note that one needs to handle: module A; integer, parameter :: A1 = 1, A2 = 2; end module A module B; use A; end module B module C; use A; end module B module D use B use C private private B public C ! private :: A1 That's resolved by: "If an identifier is accessed by use association and not declared in the module, and the name of every module from which it is accessed appears in an access-stmt in the scoping unit, its default accessibility is PRIVATE if the access-spec in every such access-stmt is PRIVATE, or PUBLIC if the access-spec in any such access-stmt is PUBLIC."