diff options
author | Gaius Mulley <gaiusmod2@gmail.com> | 2023-01-16 18:09:04 +0000 |
---|---|---|
committer | Gaius Mulley <gaiusmod2@gmail.com> | 2023-01-16 18:09:04 +0000 |
commit | a0c595386fa322e1874d33742fc56c6a0c13c4a5 (patch) | |
tree | 09ec7c9ab44797b26648a2ab8c6e037130e253e7 /gcc/m2 | |
parent | b1f30bf42d8d47228e52de998f3172b2f5dd7265 (diff) | |
download | gcc-a0c595386fa322e1874d33742fc56c6a0c13c4a5.zip gcc-a0c595386fa322e1874d33742fc56c6a0c13c4a5.tar.gz gcc-a0c595386fa322e1874d33742fc56c6a0c13c4a5.tar.bz2 |
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>
Diffstat (limited to 'gcc/m2')
-rw-r--r-- | gcc/m2/gm2-compiler/M2Quads.mod | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/gcc/m2/gm2-compiler/M2Quads.mod b/gcc/m2/gm2-compiler/M2Quads.mod index 263fb7c..a58de93 100644 --- a/gcc/m2/gm2-compiler/M2Quads.mod +++ b/gcc/m2/gm2-compiler/M2Quads.mod @@ -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) |