Detect errors when dereferencing an undeclared variable.

Attempting to dereference an undeclared variable will cause an ICE.
Also attempting to pass an undeclared variable as an array of type
will also cause an ICE.  This patch detects both conditions and
generates an appropriate error.

gcc/m2/ChangeLog:

	* gm2-compiler/M2Quads.mod (AssignUnboundedVar): Check Type
	against NulSym and call MetaErrorT1 if necessary.
	(AssignUnboundedNonVar): Check Type against NulSym and
	call MetaErrorT1 if necessary.
	(BuildDesignatorPointer): Check Type1 against NulSym and
	call MetaErrorT1 if necessary.

Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
This commit is contained in:
Gaius Mulley 2023-01-16 18:09:04 +00:00
parent b1f30bf42d
commit a0c595386f

View file

@ -6327,7 +6327,10 @@ BEGIN
ELSIF IsVar(Sym)
THEN
Type := GetDType(Sym) ;
IF IsUnbounded(Type)
IF Type = NulSym
THEN
MetaErrorT1 (tok, '{%1ad} has no type and cannot be passed to a VAR formal parameter', Sym)
ELSIF IsUnbounded(Type)
THEN
IF Type = GetSType (UnboundedSym)
THEN
@ -6382,7 +6385,10 @@ BEGIN
ELSIF IsVar (Sym)
THEN
Type := GetDType (Sym) ;
IF IsUnbounded (Type)
IF Type = NulSym
THEN
MetaErrorT1 (tok, '{%1ad} has no type and cannot be passed to a non VAR formal parameter', Sym)
ELSIF IsUnbounded (Type)
THEN
UnboundedNonVarLinkToArray (tok, Sym, ArraySym, UnboundedSym, ParamType, dim)
ELSIF IsArray (Type) OR IsGenericSystemType (ParamType)
@ -11386,7 +11392,10 @@ VAR
BEGIN
PopTFrwtok (Sym1, Type1, rw, exprtok) ;
Type1 := SkipType (Type1) ;
IF IsUnknown (Sym1)
IF Type1 = NulSym
THEN
MetaErrorT1 (ptrtok, '{%1ad} has no type and therefore cannot be dereferenced by ^', Sym1)
ELSIF IsUnknown (Sym1)
THEN
MetaError1 ('{%1EMad} is undefined and therefore {%1ad}^ cannot be resolved', Sym1)
ELSIF IsPointer (Type1)