https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108551
--- Comment #3 from Martin Liška <marxin at gcc dot gnu.org> --- I might reduced that: $ cat Termbase.mod IMPLEMENTATION MODULE Termbase ; TYPE ReadMethods = POINTER TO RECORD s : StatusProcedure ; END ; WriteMethod = POINTER TO RECORD END ; VAR rStack: ReadMethods ; wStack: WriteMethod ; PROCEDURE AssignRead (rp: ReadProcedure; sp: StatusProcedure; VAR Done: BOOLEAN) ; BEGIN IF rStack=NIL THEN END END AssignRead ; (* *) PROCEDURE UnAssignRead (VAR Done: BOOLEAN) ; END UnAssignRead ; PROCEDURE Read (VAR ch: CHAR) ; END Read ; PROCEDURE KeyPressed () : BOOLEAN ; BEGIN IF rStack=NIL THEN RETURN( rStack^.s() ) ELSE RETURN( rStack^.s() ) END END KeyPressed ; PROCEDURE AssignWrite (wp: WriteProcedure; VAR Done: BOOLEAN) ; BEGIN IF wStack=NIL THEN END END AssignWrite ; PROCEDURE UnAssignWrite (VAR Done: BOOLEAN) ; END UnAssignWrite ; PROCEDURE Write (VAR ch: CHAR) ; END Write ; END Termbase. $ /dev/shm/objdir/./gcc/gm2 -B/dev/shm/objdir/./gcc/ Termbase.mod -Werror=return-type -I/home/marxin/Programming/gcc/gcc/m2/gm2-libs-pim -I/home/marxin/Programming/gcc/gcc/m2/gm2-libs Termbase.mod: In function ‘main’: Termbase.mod:1:32: error: control reaches end of non-void function [-Werror=return-type] 1 | IMPLEMENTATION MODULE Termbase ; | ^ cc1gm2: some warnings being treated as errors