I don’t think that’s true. C1412 (of Fortran 2018) says:
The ancestor-module-name shall be the name of a nonintrinsic module that declares a separate module procedure
And with your example, I get this error from gfortran 12.2.0:
f951: Fatal Error: Module file ‘mod.smod’ has not been generated, either because the module does not contain a MODULE PROCEDURE or there is an error in the module.
This might help explain why gfortran generates .smod files even when there are no submodules. There seems to be a .smod generated for modules that can have submodules so gfortran can perform that check.