diff --git a/gcc/m2/gm2-compiler/M2Quads.mod b/gcc/m2/gm2-compiler/M2Quads.mod index 785a6e9885a..46db4a6556d 100644 --- a/gcc/m2/gm2-compiler/M2Quads.mod +++ b/gcc/m2/gm2-compiler/M2Quads.mod @@ -7021,19 +7021,19 @@ BEGIN BuildDisposeProcedure (tokno) ELSIF ProcSym = Inc THEN - BuildIncProcedure + BuildIncProcedure (tokno) ELSIF ProcSym = Dec THEN - BuildDecProcedure + BuildDecProcedure (tokno) ELSIF ProcSym = Incl THEN - BuildInclProcedure + BuildInclProcedure (tokno) ELSIF ProcSym = Excl THEN - BuildExclProcedure + BuildExclProcedure (tokno) ELSIF ProcSym = Throw THEN - BuildThrowProcedure + BuildThrowProcedure (tokno) ELSE InternalError ('pseudo procedure not implemented yet') END @@ -7084,14 +7084,12 @@ END GetItemPointedTo ; |----------------| *) -PROCEDURE BuildThrowProcedure ; +PROCEDURE BuildThrowProcedure (functok: CARDINAL) ; VAR - functok : CARDINAL ; op : CARDINAL ; NoOfParam: CARDINAL ; BEGIN PopT (NoOfParam) ; - functok := OperandTtok (NoOfParam + 1) ; IF NoOfParam = 1 THEN op := OperandT (NoOfParam) ; @@ -7328,19 +7326,19 @@ BEGIN IF IsExpressionCompatible (dtype, etype) THEN (* the easy case simulate a straightforward macro *) - PushTF (des, dtype) ; + PushTFtok (des, dtype, tokenpos) ; PushT (tok) ; - PushTF (expr, etype) ; + PushTFtok (expr, etype, tokenpos) ; doBuildBinaryOp (FALSE, TRUE) ELSE IF (IsOrdinalType (dtype) OR (dtype = Address) OR IsPointer (dtype)) AND (IsOrdinalType (etype) OR (etype = Address) OR IsPointer (etype)) THEN - PushTF (des, dtype) ; + PushTFtok (des, dtype, tokenpos) ; PushT (tok) ; - PushTF (Convert, NulSym) ; - PushT (dtype) ; - PushT (expr) ; + PushTFtok (Convert, NulSym, tokenpos) ; + PushTtok (dtype, tokenpos) ; + PushTtok (expr, tokenpos) ; PushT (2) ; (* Two parameters *) BuildConvertFunction (Convert, FALSE) ; doBuildBinaryOp (FALSE, TRUE) @@ -7387,9 +7385,8 @@ END CheckRangeIncDec ; |----------------| *) -PROCEDURE BuildIncProcedure ; +PROCEDURE BuildIncProcedure (proctok: CARDINAL) ; VAR - proctok : CARDINAL ; NoOfParam, dtype, OperandSym, @@ -7397,26 +7394,25 @@ VAR TempSym : CARDINAL ; BEGIN PopT (NoOfParam) ; - proctok := OperandTtok (NoOfParam + 1) ; IF (NoOfParam = 1) OR (NoOfParam = 2) THEN - VarSym := OperandT (NoOfParam) ; (* bottom/first parameter *) + VarSym := OperandT (NoOfParam) ; (* Bottom/first parameter. *) IF IsVar (VarSym) THEN dtype := GetDType (VarSym) ; IF NoOfParam = 2 THEN - OperandSym := DereferenceLValue (OperandTok (1), OperandT (1)) + OperandSym := DereferenceLValue (proctok, OperandT (1)) ELSE PushOne (proctok, dtype, 'the {%EkINC} will cause an overflow {%1ad}') ; PopT (OperandSym) END ; - PushT (VarSym) ; - TempSym := DereferenceLValue (OperandTok (NoOfParam), VarSym) ; - CheckRangeIncDec (proctok, TempSym, OperandSym, PlusTok) ; (* TempSym + OperandSym *) - BuildAssignmentWithoutBounds (proctok, FALSE, TRUE) (* VarSym := TempSym + OperandSym *) + PushTtok (VarSym, proctok) ; + TempSym := DereferenceLValue (proctok, VarSym) ; + CheckRangeIncDec (proctok, TempSym, OperandSym, PlusTok) ; (* TempSym + OperandSym. *) + BuildAssignmentWithoutBounds (proctok, FALSE, TRUE) (* VarSym := TempSym + OperandSym. *) ELSE MetaErrorT1 (proctok, 'base procedure {%EkINC} expects a variable as a parameter but was given {%1Ed}', @@ -7460,9 +7456,8 @@ END BuildIncProcedure ; |----------------| *) -PROCEDURE BuildDecProcedure ; +PROCEDURE BuildDecProcedure (proctok: CARDINAL) ; VAR - proctok, NoOfParam, dtype, OperandSym, @@ -7470,26 +7465,25 @@ VAR TempSym : CARDINAL ; BEGIN PopT (NoOfParam) ; - proctok := OperandTtok (NoOfParam + 1) ; IF (NoOfParam = 1) OR (NoOfParam = 2) THEN - VarSym := OperandT (NoOfParam) ; (* bottom/first parameter *) + VarSym := OperandT (NoOfParam) ; (* Bottom/first parameter. *) IF IsVar (VarSym) THEN dtype := GetDType (VarSym) ; IF NoOfParam = 2 THEN - OperandSym := DereferenceLValue (OperandTok (1), OperandT (1)) + OperandSym := DereferenceLValue (proctok, OperandT (1)) ELSE PushOne (proctok, dtype, 'the {%EkDEC} will cause an overflow {%1ad}') ; PopT (OperandSym) END ; - PushT (VarSym) ; + PushTtok (VarSym, proctok) ; TempSym := DereferenceLValue (OperandTok (NoOfParam), VarSym) ; - CheckRangeIncDec (proctok, TempSym, OperandSym, MinusTok) ; (* TempSym - OperandSym *) - BuildAssignmentWithoutBounds (proctok, FALSE, TRUE) (* VarSym := TempSym - OperandSym *) + CheckRangeIncDec (proctok, TempSym, OperandSym, MinusTok) ; (* TempSym - OperandSym. *) + BuildAssignmentWithoutBounds (proctok, FALSE, TRUE) (* VarSym := TempSym - OperandSym. *) ELSE MetaErrorT1 (proctok, 'base procedure {%EkDEC} expects a variable as a parameter but was given {%1Ed}', @@ -7553,9 +7547,8 @@ END DereferenceLValue ; |----------------| *) -PROCEDURE BuildInclProcedure ; +PROCEDURE BuildInclProcedure (proctok: CARDINAL) ; VAR - proctok, optok : CARDINAL ; NoOfParam, DerefSym, @@ -7563,7 +7556,6 @@ VAR VarSym : CARDINAL ; BEGIN PopT (NoOfParam) ; - proctok := OperandTtok (NoOfParam + 1) ; IF NoOfParam = 2 THEN VarSym := OperandT (2) ; @@ -7619,9 +7611,8 @@ END BuildInclProcedure ; |----------------| *) -PROCEDURE BuildExclProcedure ; +PROCEDURE BuildExclProcedure (proctok: CARDINAL) ; VAR - proctok, optok : CARDINAL ; NoOfParam, DerefSym, @@ -7629,7 +7620,6 @@ VAR VarSym : CARDINAL ; BEGIN PopT (NoOfParam) ; - proctok := OperandTtok (NoOfParam + 1) ; IF NoOfParam=2 THEN VarSym := OperandT (2) ; diff --git a/gcc/testsuite/gm2/pim/run/pass/dectest.mod b/gcc/testsuite/gm2/pim/run/pass/dectest.mod new file mode 100644 index 00000000000..41d4744aff0 --- /dev/null +++ b/gcc/testsuite/gm2/pim/run/pass/dectest.mod @@ -0,0 +1,10 @@ +MODULE dectest ; + +VAR + c: CARDINAL ; +BEGIN + c := 20 ; + WHILE c > 1 DO + DEC (c) + END +END dectest. diff --git a/gcc/testsuite/gm2/pim/run/pass/inctest.mod b/gcc/testsuite/gm2/pim/run/pass/inctest.mod new file mode 100644 index 00000000000..c4d9d2e0a35 --- /dev/null +++ b/gcc/testsuite/gm2/pim/run/pass/inctest.mod @@ -0,0 +1,10 @@ +MODULE inctest ; + +VAR + c: CARDINAL ; +BEGIN + c := 0 ; + WHILE c < 20 DO + INC (c) + END +END inctest.