]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Bugfix the scope name when generating constants.
authorGaius Mulley <gaius.mulley@southwales.ac.uk>
Sun, 4 Dec 2022 19:12:53 +0000 (19:12 +0000)
committerGaius Mulley <gaius.mulley@southwales.ac.uk>
Sun, 4 Dec 2022 19:12:53 +0000 (19:12 +0000)
A bug occurs when generating an error while constructing constants.
The scope name is incorrect.  Fixed by changing GetGlobalQuads
and moving StartBuildInit after Declaration.

gcc/m2/ChangeLog:

* gm2-compiler/M2Scope.mod (GetGlobalQuads): Use prev to remember
previous block and assign the scope characteristics of the next
block with the same as the previous.
* gm2-compiler/P0SymBuild.mod (FlushImport): Remove unused
variable modname.
* gm2-compiler/P3Build.bnf (Block): Move StartBuildInit after
the Declaration.

Signed-off-by: Gaius Mulley <gaius.mulley@southwales.ac.uk>
gcc/m2/gm2-compiler/M2Quads.mod
gcc/m2/gm2-compiler/M2Scope.mod
gcc/m2/gm2-compiler/P0SymBuild.mod
gcc/m2/gm2-compiler/P3Build.bnf

index 5de7ddb52813cf63bed88c056315b6247eca7a89..88a7e7a6aeb898918a7ae33aa3c7998f8a55bef4 100644 (file)
@@ -1767,17 +1767,17 @@ VAR
    f: QuadFrame ;
 BEGIN
    QuadNo := FreeList ;
-   IF InBounds(QuadArray, QuadNo) AND (GetIndice(QuadArray, QuadNo)#NIL)
+   IF InBounds (QuadArray, QuadNo) AND (GetIndice (QuadArray, QuadNo) # NIL)
    THEN
-      f := GetIndice(QuadArray, QuadNo)
+      f := GetIndice (QuadArray, QuadNo)
    ELSE
-      NEW(f) ;
+      NEW (f) ;
       IF f=NIL
       THEN
          InternalError ('out of memory error trying to allocate a quadruple')
       ELSE
-         INC(NoOfQuads) ;
-         PutIndice(QuadArray, QuadNo, f) ;
+         INC (NoOfQuads) ;
+         PutIndice (QuadArray, QuadNo, f) ;
          f^.NoOfTimesReferenced := 0
       END
    END ;
@@ -1786,8 +1786,8 @@ BEGIN
       Operand3 := 0 ;
       Next := 0
    END ;
-   INC(FreeList) ;
-   IF GrowInitialization<FreeList
+   INC (FreeList) ;
+   IF GrowInitialization < FreeList
    THEN
       GrowInitialization := FreeList
    END
@@ -1800,13 +1800,13 @@ END NewQuad ;
 
 PROCEDURE CheckVariableAt (sym: CARDINAL) ;
 BEGIN
-   IF IsVar(sym) AND IsVariableAtAddress(sym)
+   IF IsVar (sym) AND IsVariableAtAddress (sym)
    THEN
-      IF GetMode(sym)=LeftValue
+      IF GetMode (sym) = LeftValue
       THEN
-         GenQuad(InitAddressOp, sym, NulSym, GetVariableAtAddress(sym))
+         GenQuad (InitAddressOp, sym, NulSym, GetVariableAtAddress (sym))
       ELSE
-         InternalError('expecting lvalue for this variable which is declared at an explicit address')
+         InternalError ('expecting lvalue for this variable which is declared at an explicit address')
       END
    END
 END CheckVariableAt ;
@@ -1819,7 +1819,7 @@ END CheckVariableAt ;
 
 PROCEDURE CheckVariablesAt (scope: CARDINAL) ;
 BEGIN
-   ForeachLocalSymDo(scope, CheckVariableAt)
+   ForeachLocalSymDo (scope, CheckVariableAt)
 END CheckVariablesAt ;
 
 
@@ -1832,10 +1832,10 @@ BEGIN
    IF Iso
    THEN
       RETURN GetQualidentImport (tok,
-                                 MakeKey('TurnInterrupts'), MakeKey('COROUTINES'))
+                                 MakeKey ('TurnInterrupts'), MakeKey ('COROUTINES'))
    ELSE
       RETURN GetQualidentImport (tok,
-                                 MakeKey('TurnInterrupts'), MakeKey('SYSTEM'))
+                                 MakeKey ('TurnInterrupts'), MakeKey ('SYSTEM'))
    END
 END GetTurnInterrupts ;
 
@@ -1848,11 +1848,11 @@ PROCEDURE GetProtection (tok: CARDINAL) : CARDINAL ;
 BEGIN
    IF Iso
    THEN
-      RETURN GetQualidentImport(tok,
-                                MakeKey('PROTECTION'), MakeKey('COROUTINES'))
+      RETURN GetQualidentImport (tok,
+                                 MakeKey ('PROTECTION'), MakeKey ('COROUTINES'))
    ELSE
-      RETURN GetQualidentImport(tok,
-                                MakeKey('PROTECTION'), MakeKey('SYSTEM'))
+      RETURN GetQualidentImport (tok,
+                                 MakeKey ('PROTECTION'), MakeKey ('SYSTEM'))
    END
 END GetProtection ;
 
@@ -1870,17 +1870,17 @@ PROCEDURE CheckNeedPriorityBegin (tok: CARDINAL; scope, module: CARDINAL) ;
 VAR
    ProcSym, old: CARDINAL ;
 BEGIN
-   IF GetPriority(module)#NulSym
+   IF GetPriority (module) # NulSym
    THEN
       (* module has been given a priority *)
-      ProcSym := GetTurnInterrupts(tok) ;
-      IF ProcSym#NulSym
+      ProcSym := GetTurnInterrupts (tok) ;
+      IF ProcSym # NulSym
       THEN
          old := MakeTemporary (tok, RightValue) ;
-         PutVar(old, GetProtection(tok)) ;
+         PutVar (old, GetProtection (tok)) ;
 
          GenQuadO (tok, SavePriorityOp, old, scope, ProcSym, FALSE) ;
-         PushWord(PriorityStack, old)
+         PushWord (PriorityStack, old)
       END
    END
 END CheckNeedPriorityBegin ;
@@ -1898,14 +1898,14 @@ PROCEDURE CheckNeedPriorityEnd (tok: CARDINAL;
 VAR
    ProcSym, old: CARDINAL ;
 BEGIN
-   IF GetPriority(module)#NulSym
+   IF GetPriority (module) # NulSym
    THEN
       (* module has been given a priority *)
-      ProcSym := GetTurnInterrupts(tok) ;
-      IF ProcSym#NulSym
+      ProcSym := GetTurnInterrupts (tok) ;
+      IF ProcSym # NulSym
       THEN
-         old := PopWord(PriorityStack) ;
-         GenQuad(RestorePriorityOp, old, scope, ProcSym)
+         old := PopWord (PriorityStack) ;
+         GenQuad (RestorePriorityOp, old, scope, ProcSym)
       END
    END
 END CheckNeedPriorityEnd ;
@@ -11020,7 +11020,6 @@ VAR
    combinedTok,
    arrayTok,
    exprTok    : CARDINAL ;
-   s          : String ;
    e, d, error,
    Sym,
    Type       : CARDINAL ;
@@ -11060,7 +11059,6 @@ VAR
    combinedTok,
    arrayTok,
    exprTok    : CARDINAL ;
-   s          : String ;
    e, t, d,
    Sym,
    Type       : CARDINAL ;
@@ -12038,7 +12036,7 @@ END BuildConstructorStart ;
 
 PROCEDURE BuildConstructorEnd (cbratokpos: CARDINAL) ;
 VAR
-   type, typetok,
+   typetok,
    value, valtok: CARDINAL ;
 BEGIN
    PopTtok (value, valtok) ;
index 146ecd1252283accfe85eeec6faf9fe6a859e55e..ee878971252d8e8f9d750f025a8ced24caa8b39a 100644 (file)
@@ -126,6 +126,7 @@ END AddToRange ;
 
 PROCEDURE GetGlobalQuads (sb: ScopeBlock; scope: CARDINAL) : ScopeBlock ;
 VAR
+   prev,
    nb           : ScopeBlock ;
    NestedLevel,
    i            : CARDINAL ;
@@ -135,6 +136,7 @@ VAR
    start, end   : CARDINAL ;
 BEGIN
    NestedLevel := 0 ;
+   prev := NIL ;
    First := FALSE ;
    IF (GetScope(scope)#NulSym) AND
       (IsProcedure(GetScope(scope)) OR
@@ -162,6 +164,10 @@ BEGIN
    LOOP
       IF i=0
       THEN
+         IF Debugging
+         THEN
+            DisplayScope (sb)
+         END ;
          RETURN sb
       END ;
       GetQuad (i, op, op1, op2, op3) ;
@@ -178,44 +184,48 @@ BEGIN
          THEN
             First := TRUE
          END
-      ELSE
-         IF NestedLevel=0
+      ELSIF NestedLevel=0
+      THEN
+         IF op=StartDefFileOp
+         THEN
+            nb := AddToRange (nb, TRUE, i) ;
+            SetScope (nb, op3, definitionscope) ;
+            prev := nb
+         ELSIF (op=StartModFileOp) OR (op=InitStartOp)
          THEN
-            IF op=StartDefFileOp
+            nb := AddToRange (nb, TRUE, i) ;
+            IF IsDefImp (op3)
             THEN
-               nb := AddToRange (nb, TRUE, i) ;
-               SetScope (nb, op3, definitionscope)
-            ELSIF op=StartModFileOp
+               SetScope (nb, op3, implementationscope)
+            ELSE
+               SetScope (nb, op3, programscope)
+            END ;
+            prev := nb
+         ELSE
+            nb := AddToRange (nb, First, i) ;
+            IF op = InitEndOp
             THEN
-               nb := AddToRange (nb, TRUE, i) ;
                IF IsDefImp (op3)
                THEN
                   SetScope (nb, op3, implementationscope)
                ELSE
                   SetScope (nb, op3, programscope)
-               END
-            ELSIF op=InitStartOp
+               END ;
+               prev := nb
+            ELSIF First
             THEN
-               nb := AddToRange (nb, TRUE, i) ;
-               IF IsDefImp (op3)
-               THEN
-                  SetScope (nb, op3, implementationscope)
-               ELSE
-                  SetScope (nb, op3, programscope)
-               END
-            ELSE
-               nb := AddToRange (nb, First, i) ;
-               IF First
-               THEN
-                  SetScope (nb, NulSym, unsetscope)  (* is this reachable?  *)
-               END
-            END ;
-            First := FALSE
-         END
+               Assert (prev # NIL) ;
+               SetScope (nb, prev^.scopeSym, prev^.kindScope)
+            END
+         END ;
+         First := FALSE
       END ;
-      (* IF (i=end) *)
-      IF (i=end) (*  OR (op=EndFileOp) *)
+      IF i=end
       THEN
+         IF Debugging
+         THEN
+            DisplayScope (sb)
+         END ;
          RETURN sb
       END ;
       i := GetNextQuad (i)
index fa44d889f1c5c9018bd2fdcdfab5edbd276af9d6..00aac85f6a108c3317614b6dfe7fdb2baba322c4 100644 (file)
@@ -258,9 +258,8 @@ END InitUniverse ;
 
 PROCEDURE FlushImports (b: BlockInfoPtr) ;
 VAR
-   i, n   : CARDINAL ;
-   modname: Name ;
-   desc   : ModuleDesc ;
+   i, n: CARDINAL ;
+   desc: ModuleDesc ;
 BEGIN
    WITH b^ DO
       i := LowIndice (ImportedModules) ;
index 42d369449e7532b42b4db05746233859d49e8b3e..8ccc4d604a34d2881408a366d51605b62d519e4b 100644 (file)
@@ -1324,7 +1324,8 @@ ProcedureBlock :=                                                          % Bui
                                                                  "END"
                 =:
 
-Block := { Declaration }                                                   % StartBuildInit (GetTokenNo ()) %
+Block := { Declaration }
+                                                                           % StartBuildInit (GetTokenNo ()) %
                          InitialBlock                                      % EndBuildInit (GetTokenNo ()) ;
                                                                              StartBuildFinally (GetTokenNo ()) %
                                       FinalBlock                           % EndBuildFinally (GetTokenNo ()) %