diff options
author | Gaius Mulley <gaiusmod2@gmail.com> | 2024-04-22 18:19:32 +0100 |
---|---|---|
committer | Gaius Mulley <gaiusmod2@gmail.com> | 2024-04-22 18:19:32 +0100 |
commit | b0469e35dbcc9a93a2cb50e3c0445edc3db174be (patch) | |
tree | c3d3688315f868e153558856f6fe51886a53275b /gcc/m2 | |
parent | cf5f7791056b3ed993bc8024be767a86157514a9 (diff) | |
download | gcc-b0469e35dbcc9a93a2cb50e3c0445edc3db174be.zip gcc-b0469e35dbcc9a93a2cb50e3c0445edc3db174be.tar.gz gcc-b0469e35dbcc9a93a2cb50e3c0445edc3db174be.tar.bz2 |
PR modula2/114807 badpointer3.mod causes an ICE
This patch fixes an ICE caused when a constant string
is built and attempted to be passed into a procedure with
an opaque type.
gcc/m2/ChangeLog:
PR modula2/114807
* gm2-compiler/M2Check.mod (checkUnbounded): Remove unused
local variables.
(constCheckMeta): Include check for IsReallyPointer in the
failure case.
* gm2-compiler/M2Quads.mod (MoveWithMode): Remove CopyConstString.
* gm2-compiler/SymbolTable.def (IsHiddenReallyPointer): Export.
* gm2-compiler/SymbolTable.mod (SkipHiddenType): Remove.
(IsReallyPointer): Include IsHiddenReallyPointer test.
gcc/testsuite/ChangeLog:
PR modula2/114807
* gm2/pim/fail/badproctype.mod: Change MYSHORTREAL
to SHORTREAL.
* gm2/pim/fail/badprocbool.mod: New test.
* gm2/pim/fail/badproccard.mod: New test.
* gm2/pim/fail/badprocint.mod: New test.
* gm2/pim/fail/badprocint2.mod: New test.
* gm2/pim/pass/goodproccard2.mod: New test.
* gm2/pim/pass/goodprocint.mod: New test.
* gm2/pim/pass/goodprocint3.mod: New test.
* gm2/pim/run/pass/genconststr.mod: New test.
Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
Diffstat (limited to 'gcc/m2')
-rw-r--r-- | gcc/m2/gm2-compiler/M2Check.mod | 9 | ||||
-rw-r--r-- | gcc/m2/gm2-compiler/M2Quads.mod | 3 | ||||
-rw-r--r-- | gcc/m2/gm2-compiler/SymbolTable.def | 8 | ||||
-rw-r--r-- | gcc/m2/gm2-compiler/SymbolTable.mod | 29 |
4 files changed, 17 insertions, 32 deletions
diff --git a/gcc/m2/gm2-compiler/M2Check.mod b/gcc/m2/gm2-compiler/M2Check.mod index a445193..1750fe0 100644 --- a/gcc/m2/gm2-compiler/M2Check.mod +++ b/gcc/m2/gm2-compiler/M2Check.mod @@ -47,7 +47,8 @@ FROM SymbolTable IMPORT NulSym, IsRecord, IsSet, GetDType, GetSType, IsType, IsReallyPointer, IsPointer, IsParameter, ModeOfAddr, GetMode, GetType, IsUnbounded, IsComposite, IsConstructor, IsParameter, IsConstString, IsConstLitInternal, IsConstLit, - GetStringLength, GetProcedureProcType ; + GetStringLength, GetProcedureProcType, IsHiddenType, + IsHiddenReallyPointer ; FROM M2GCCDeclare IMPORT GetTypeMin, GetTypeMax ; FROM M2System IMPORT Address ; @@ -264,9 +265,6 @@ END checkSubrange ; *) PROCEDURE checkUnbounded (result: status; tinfo: tInfo; unbounded, right: CARDINAL) : status ; -VAR - lLow, rLow, - lHigh, rHigh: CARDINAL ; BEGIN (* Firstly check to see if we have resolved this as false. *) IF isFalse (result) @@ -683,7 +681,8 @@ BEGIN THEN RETURN result ELSIF IsSet (typeRight) OR IsEnumeration (typeRight) OR - IsProcedure (typeRight) OR IsRecord (typeRight) + IsProcedure (typeRight) OR IsRecord (typeRight) OR + IsReallyPointer (typeRight) THEN RETURN false ELSIF IsArray (typeRight) diff --git a/gcc/m2/gm2-compiler/M2Quads.mod b/gcc/m2/gm2-compiler/M2Quads.mod index 68b9120..8a9a230 100644 --- a/gcc/m2/gm2-compiler/M2Quads.mod +++ b/gcc/m2/gm2-compiler/M2Quads.mod @@ -73,7 +73,7 @@ FROM SymbolTable IMPORT ModeOfAddr, GetMode, PutMode, GetSymName, IsUnknown, GetModuleQuads, GetProcedureQuads, GetModuleCtors, MakeProcedure, - CopyConstString, PutConstStringKnown, + PutConstStringKnown, PutModuleStartQuad, PutModuleEndQuad, PutModuleFinallyStartQuad, PutModuleFinallyEndQuad, PutProcedureStartQuad, PutProcedureEndQuad, @@ -3454,7 +3454,6 @@ BEGIN THEN GenQuadOtok (tokno, BecomesOp, Des, NulSym, Exp, TRUE, destok, UnknownTokenNo, exptok) ; - CopyConstString (tokno, Des, Exp) ELSE IF GetMode(Des)=RightValue THEN diff --git a/gcc/m2/gm2-compiler/SymbolTable.def b/gcc/m2/gm2-compiler/SymbolTable.def index d7f0f8d..06f8a22 100644 --- a/gcc/m2/gm2-compiler/SymbolTable.def +++ b/gcc/m2/gm2-compiler/SymbolTable.def @@ -3037,6 +3037,14 @@ PROCEDURE IsHiddenTypeDeclared (Sym: CARDINAL) : BOOLEAN ; (* + IsHiddenReallyPointer - returns TRUE is sym is a pointer, address or a + type declared as a pointer or address. +*) + +PROCEDURE IsHiddenReallyPointer (Sym: CARDINAL) : BOOLEAN ; + + +(* DisplayTrees - displays the SymbolTrees for Module symbol, ModSym. *) diff --git a/gcc/m2/gm2-compiler/SymbolTable.mod b/gcc/m2/gm2-compiler/SymbolTable.mod index 7543bb5..f5890ec 100644 --- a/gcc/m2/gm2-compiler/SymbolTable.mod +++ b/gcc/m2/gm2-compiler/SymbolTable.mod @@ -8014,37 +8014,16 @@ END CheckForHiddenType ; PROCEDURE IsReallyPointer (Sym: CARDINAL) : BOOLEAN ; BEGIN - IF IsVar(Sym) + IF IsVar (Sym) THEN - Sym := GetType(Sym) + Sym := GetType (Sym) END ; - Sym := SkipType(Sym) ; - RETURN( IsPointer(Sym) OR (Sym=Address) ) + Sym := SkipType (Sym) ; + RETURN IsPointer (Sym) OR (Sym = Address) OR IsHiddenReallyPointer (Sym) END IsReallyPointer ; (* - SkipHiddenType - if sym is a TYPE foo = bar - then call SkipType(bar) - else return sym - - it does skip over hidden type. -*) - -(* -PROCEDURE SkipHiddenType (Sym: CARDINAL) : CARDINAL ; -BEGIN - IF (Sym#NulSym) AND IsType(Sym) AND (GetType(Sym)#NulSym) - THEN - RETURN( SkipType(GetType(Sym)) ) - ELSE - RETURN( Sym ) - END -END SkipHiddenType ; -*) - - -(* IsHiddenReallyPointer - returns TRUE is sym is a pointer, address or a type declared as a pointer or address. *) |