aboutsummaryrefslogtreecommitdiff
path: root/gcc/m2
diff options
context:
space:
mode:
authorGaius Mulley <gaiusmod2@gmail.com>2023-01-16 18:09:04 +0000
committerGaius Mulley <gaiusmod2@gmail.com>2023-01-16 18:09:04 +0000
commita0c595386fa322e1874d33742fc56c6a0c13c4a5 (patch)
tree09ec7c9ab44797b26648a2ab8c6e037130e253e7 /gcc/m2
parentb1f30bf42d8d47228e52de998f3172b2f5dd7265 (diff)
downloadgcc-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.mod15
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)