I'm now seeing it compile:
$ gm2 -g -c BasicFileSys.mod -I../../../../Sandpit/gm2-outside-tree-tests/build/source/m2pp/src/ -fsources
Compiling: BasicFileSys.mod
Pass 0: lexical analysis, parsing, modules and associated filenames
Module SYSTEM : /home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/14.0.1/m2/m2cor/SYSTEM.def [m2cor]
Module M2RTS : /home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/14.0.1/m2/m2pim/M2RTS.def [m2pim]
Module RTExceptions : /home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/14.0.1/m2/m2pim/RTExceptions.def [m2pim]
Module BasicFileSys : ../../../../Sandpit/gm2-outside-tree-tests/build/source/m2pp/src/BasicFileSys.def
Module BasicFileSys : BasicFileSys.mod
Module COROUTINES : /home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/14.0.1/m2/m2pim/COROUTINES.def [m2pim] (for C)
Module Size : ./Size.def
Module stat : ./stat.def
Module stdio : ./stdio.def (for C)
Module unistd : ./unistd.def (for C)
Module fcntl : ./fcntl.def (for C)
Module stat0 : ./stat0.def (for C)
Module SysTypes : ./SysTypes.def
Pass 1: scopes, enumerated types, imports and exports
Pass 2: constants and types
Pass C: aggregate constants
Pass 3: quadruple generation
Pass 4: gcc tree generation
symbols to gcc trees
statements to gcc trees
gcc trees given to the gcc backend