https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108183
--- Comment #11 from Gaius Mulley <gaius at gcc dot gnu.org> ---
Many thanks for the analysis. Taking your idea and assuming
that Sym 6114 is a procedure then I think the correction is:
PROCEDURE IsExternal (sym: CARDINAL) : BOOLEAN ;
VAR
mod: CARDINAL ;
BEGIN
(* new code starts here. *)
IF IsProcedure (sym) AND IsExtern (sym)
THEN
RETURN TRUE
END ;
(* end of new code. *)
mod := GetScope(sym) ;
REPEAT
IF mod=NulSym
THEN
RETURN( FALSE )
ELSIF IsDefImp(mod)
THEN
RETURN( mod#GetMainModule() )
END ;
mod := GetScope(mod)
UNTIL mod=NulSym ;
RETURN( FALSE )
END IsExternal ;
In gcc/m2/gm2-compiler/SymbolTable.mod procedures can be queried as IsExtern.
The ctors are special case created in gcc/m2/gm2-compiler/M2Scaffold.mod.
It looks as if the special case might not have been tested in IsExternal.