LCOV - code coverage report
Current view: top level - /mnt/build/buildbot/bld/build-lcov/gcc/m2/gm2-compiler-boot - M2Scope.c (source / functions) Coverage Total Hit
Test: gcc.info Lines: 76.7 % 249 191
Test Date: 2024-12-21 13:15:12 Functions: 56.2 % 16 9
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: - 0 0

             Branch data     Line data    Source code
       1                 :             : /* do not edit automatically generated by mc from M2Scope.  */
       2                 :             : /* M2Scope.mod derive the subset of quadruples for each scope.
       3                 :             : 
       4                 :             : Copyright (C) 2003-2024 Free Software Foundation, Inc.
       5                 :             : Contributed by Gaius Mulley <gaius.mulley@southwales.ac.uk>.
       6                 :             : 
       7                 :             : This file is part of GNU Modula-2.
       8                 :             : 
       9                 :             : GNU Modula-2 is free software; you can redistribute it and/or modify
      10                 :             : it under the terms of the GNU General Public License as published by
      11                 :             : the Free Software Foundation; either version 3, or (at your option)
      12                 :             : any later version.
      13                 :             : 
      14                 :             : GNU Modula-2 is distributed in the hope that it will be useful, but
      15                 :             : WITHOUT ANY WARRANTY; without even the implied warranty of
      16                 :             : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      17                 :             : General Public License for more details.
      18                 :             : 
      19                 :             : You should have received a copy of the GNU General Public License
      20                 :             : along with GNU Modula-2; see the file COPYING3.  If not see
      21                 :             : <http://www.gnu.org/licenses/>.  */
      22                 :             : 
      23                 :             : #include "config.h"
      24                 :             : #include "system.h"
      25                 :             : #include "gcc-consolidation.h"
      26                 :             : 
      27                 :             : #include <stdbool.h>
      28                 :             : #   if !defined (PROC_D)
      29                 :             : #      define PROC_D
      30                 :             :        typedef void (*PROC_t) (void);
      31                 :             :        typedef struct { PROC_t proc; } PROC;
      32                 :             : #   endif
      33                 :             : 
      34                 :             : #   if !defined (TRUE)
      35                 :             : #      define TRUE (1==1)
      36                 :             : #   endif
      37                 :             : 
      38                 :             : #   if !defined (FALSE)
      39                 :             : #      define FALSE (1==0)
      40                 :             : #   endif
      41                 :             : 
      42                 :             : #   include "GStorage.h"
      43                 :             : #   include "Gmcrts.h"
      44                 :             : #if defined(__cplusplus)
      45                 :             : #   undef NULL
      46                 :             : #   define NULL 0
      47                 :             : #endif
      48                 :             : #define _M2Scope_C
      49                 :             : 
      50                 :             : #include "GM2Scope.h"
      51                 :             : #   include "GStorage.h"
      52                 :             : #   include "GM2Debug.h"
      53                 :             : #   include "GNameKey.h"
      54                 :             : #   include "GSymbolTable.h"
      55                 :             : #   include "GM2Printf.h"
      56                 :             : #   include "GM2Quads.h"
      57                 :             : #   include "GM2StackWord.h"
      58                 :             : #   include "GM2Error.h"
      59                 :             : 
      60                 :             : typedef struct M2Scope_ScopeProcedure2_p M2Scope_ScopeProcedure2;
      61                 :             : 
      62                 :             : typedef struct M2Scope_ScopeProcedure3_p M2Scope_ScopeProcedure3;
      63                 :             : 
      64                 :             : #   define Debugging false
      65                 :             : #   define TraceQuadruples false
      66                 :             : typedef struct M2Scope__T1_r M2Scope__T1;
      67                 :             : 
      68                 :             : typedef enum {M2Scope_unsetscope, M2Scope_ignorescope, M2Scope_procedurescope, M2Scope_modulescope, M2Scope_definitionscope, M2Scope_implementationscope, M2Scope_programscope} M2Scope_scopeKind;
      69                 :             : 
      70                 :             : typedef M2Scope__T1 *M2Scope_ScopeBlock__opaque;
      71                 :             : 
      72                 :             : struct M2Scope__T1_r {
      73                 :             :                        unsigned int scopeSym;
      74                 :             :                        M2Scope_scopeKind kindScope;
      75                 :             :                        unsigned int low;
      76                 :             :                        unsigned int high;
      77                 :             :                        M2Scope_ScopeBlock__opaque next;
      78                 :             :                      };
      79                 :             : 
      80                 :             : static M2Scope_ScopeBlock__opaque FreeList;
      81                 :             : 
      82                 :             : /*
      83                 :             :    InitScopeBlock -
      84                 :             : */
      85                 :             : 
      86                 :             : extern "C" M2Scope_ScopeBlock M2Scope_InitScopeBlock (unsigned int scope);
      87                 :             : 
      88                 :             : /*
      89                 :             :    KillScopeBlock - destroys the ScopeBlock sb and assign sb to NIL.
      90                 :             : */
      91                 :             : 
      92                 :             : extern "C" void M2Scope_KillScopeBlock (M2Scope_ScopeBlock *sb);
      93                 :             : 
      94                 :             : /*
      95                 :             :    ForeachScopeBlockDo2 - calls a procedure p for each block of contigeous quadruples
      96                 :             :                           defining an outer scope sb.
      97                 :             : */
      98                 :             : 
      99                 :             : extern "C" void M2Scope_ForeachScopeBlockDo2 (M2Scope_ScopeBlock sb, M2Scope_ScopeProcedure2 p);
     100                 :             : 
     101                 :             : /*
     102                 :             :    ForeachScopeBlockDo3 - calls a procedure p for each block of contigeous quadruples
     103                 :             :                           defining an outer scope sb.
     104                 :             : */
     105                 :             : 
     106                 :             : extern "C" void M2Scope_ForeachScopeBlockDo3 (M2Scope_ScopeBlock sb, M2Scope_ScopeProcedure3 p);
     107                 :             : 
     108                 :             : /*
     109                 :             :    New -
     110                 :             : */
     111                 :             : 
     112                 :             : static void New (M2Scope_ScopeBlock__opaque *sb);
     113                 :             : 
     114                 :             : /*
     115                 :             :    Dispose -
     116                 :             : */
     117                 :             : 
     118                 :             : static void Dispose (M2Scope_ScopeBlock__opaque *sb);
     119                 :             : 
     120                 :             : /*
     121                 :             :    SetScope - assigns the scopeSym and kindScope.
     122                 :             : */
     123                 :             : 
     124                 :             : static void SetScope (M2Scope_ScopeBlock__opaque sb, unsigned int sym, M2Scope_scopeKind kindScope);
     125                 :             : 
     126                 :             : /*
     127                 :             :    AddToRange - returns a ScopeBlock pointer to the last block. The,
     128                 :             :                 quad, will be added to the end of sb or a later block
     129                 :             :                 if First is TRUE.
     130                 :             : */
     131                 :             : 
     132                 :             : static M2Scope_ScopeBlock__opaque AddToRange (M2Scope_ScopeBlock__opaque sb, bool First, unsigned int quad);
     133                 :             : 
     134                 :             : /*
     135                 :             :    GetGlobalQuads -
     136                 :             : */
     137                 :             : 
     138                 :             : static M2Scope_ScopeBlock__opaque GetGlobalQuads (M2Scope_ScopeBlock__opaque sb, unsigned int scope);
     139                 :             : 
     140                 :             : /*
     141                 :             :    GetProcQuads -
     142                 :             : */
     143                 :             : 
     144                 :             : static M2Scope_ScopeBlock__opaque GetProcQuads (M2Scope_ScopeBlock__opaque sb, unsigned int proc);
     145                 :             : 
     146                 :             : /*
     147                 :             :    DisplayScope -
     148                 :             : */
     149                 :             : 
     150                 :             : static void DisplayScope (M2Scope_ScopeBlock__opaque sb);
     151                 :             : 
     152                 :             : /*
     153                 :             :    enter -
     154                 :             : */
     155                 :             : 
     156                 :             : static void enter (M2Scope_ScopeBlock__opaque sb);
     157                 :             : 
     158                 :             : /*
     159                 :             :    leave -
     160                 :             : */
     161                 :             : 
     162                 :             : static void leave (M2Scope_ScopeBlock__opaque sb);
     163                 :             : 
     164                 :             : /*
     165                 :             :    Init - initializes the global variables for this module.
     166                 :             : */
     167                 :             : 
     168                 :             : static void Init (void);
     169                 :             : 
     170                 :             : 
     171                 :             : /*
     172                 :             :    New -
     173                 :             : */
     174                 :             : 
     175                 :    27763190 : static void New (M2Scope_ScopeBlock__opaque *sb)
     176                 :             : {
     177                 :    27763190 :   if (FreeList == NULL)
     178                 :             :     {
     179                 :      510260 :       Storage_ALLOCATE ((void **) &(*sb), sizeof (M2Scope__T1));
     180                 :             :     }
     181                 :             :   else
     182                 :             :     {
     183                 :    27252930 :       (*sb) = FreeList;
     184                 :    27252930 :       FreeList = FreeList->next;
     185                 :             :     }
     186                 :    27763190 : }
     187                 :             : 
     188                 :             : 
     189                 :             : /*
     190                 :             :    Dispose -
     191                 :             : */
     192                 :             : 
     193                 :    27762440 : static void Dispose (M2Scope_ScopeBlock__opaque *sb)
     194                 :             : {
     195                 :    27762440 :   (*sb)->next = FreeList;
     196                 :    27762440 :   FreeList = (*sb);
     197                 :    27762440 :   (*sb) = static_cast<M2Scope_ScopeBlock__opaque> (NULL);
     198                 :    27762440 : }
     199                 :             : 
     200                 :             : 
     201                 :             : /*
     202                 :             :    SetScope - assigns the scopeSym and kindScope.
     203                 :             : */
     204                 :             : 
     205                 :    35436220 : static void SetScope (M2Scope_ScopeBlock__opaque sb, unsigned int sym, M2Scope_scopeKind kindScope)
     206                 :             : {
     207                 :    35436220 :   sb->scopeSym = sym;
     208                 :    35436220 :   sb->kindScope = kindScope;
     209                 :    24685820 : }
     210                 :             : 
     211                 :             : 
     212                 :             : /*
     213                 :             :    AddToRange - returns a ScopeBlock pointer to the last block. The,
     214                 :             :                 quad, will be added to the end of sb or a later block
     215                 :             :                 if First is TRUE.
     216                 :             : */
     217                 :             : 
     218                 :   104009757 : static M2Scope_ScopeBlock__opaque AddToRange (M2Scope_ScopeBlock__opaque sb, bool First, unsigned int quad)
     219                 :             : {
     220                 :   104009757 :   if (First)
     221                 :             :     {
     222                 :    26653100 :       if (sb->high == 0)
     223                 :             :         {
     224                 :      571192 :           sb->high = sb->low;
     225                 :             :         }
     226                 :    26653100 :       sb->next = static_cast<M2Scope_ScopeBlock__opaque> (M2Scope_InitScopeBlock (SymbolTable_NulSym));
     227                 :    26653100 :       sb = sb->next;
     228                 :             :     }
     229                 :   104009757 :   if (sb->low == 0)
     230                 :             :     {
     231                 :    26654366 :       sb->low = quad;
     232                 :             :     }
     233                 :   104009757 :   sb->high = quad;
     234                 :   104009757 :   return sb;
     235                 :             :   /* static analysis guarentees a RETURN statement will be used before here.  */
     236                 :             :   __builtin_unreachable ();
     237                 :             : }
     238                 :             : 
     239                 :             : 
     240                 :             : /*
     241                 :             :    GetGlobalQuads -
     242                 :             : */
     243                 :             : 
     244                 :      570046 : static M2Scope_ScopeBlock__opaque GetGlobalQuads (M2Scope_ScopeBlock__opaque sb, unsigned int scope)
     245                 :             : {
     246                 :      570046 :   M2Scope_ScopeBlock__opaque prev;
     247                 :      570046 :   M2Scope_ScopeBlock__opaque nb;
     248                 :      570046 :   unsigned int NestedLevel;
     249                 :      570046 :   unsigned int i;
     250                 :      570046 :   M2Quads_QuadOperator op;
     251                 :      570046 :   unsigned int op1;
     252                 :      570046 :   unsigned int op2;
     253                 :      570046 :   unsigned int op3;
     254                 :      570046 :   bool First;
     255                 :      570046 :   unsigned int start;
     256                 :      570046 :   unsigned int end;
     257                 :             : 
     258                 :      570046 :   NestedLevel = 0;
     259                 :      570046 :   prev = static_cast<M2Scope_ScopeBlock__opaque> (NULL);
     260                 :      570046 :   First = false;
     261                 :      570046 :   if (((SymbolTable_GetScope (scope)) != SymbolTable_NulSym) && ((SymbolTable_IsProcedure (SymbolTable_GetScope (scope))) || ((SymbolTable_IsModule (scope)) && (SymbolTable_IsModuleWithinProcedure (scope)))))
     262                 :             :     {
     263                 :        1266 :       SymbolTable_GetProcedureQuads (SymbolTable_GetProcedureScope (scope), &i, &start, &end);
     264                 :        1266 :       M2Quads_GetQuad (i, &op, &op1, &op2, &op3);
     265                 :        5676 :       while ((op != M2Quads_ModuleScopeOp) || (op3 != scope))
     266                 :             :         {
     267                 :        3144 :           i = M2Quads_GetNextQuad (i);
     268                 :        3144 :           M2Quads_GetQuad (i, &op, &op1, &op2, &op3);
     269                 :             :         }
     270                 :        1266 :       end = i;
     271                 :        1266 :       M2Quads_GetQuad (end, &op, &op1, &op2, &op3);
     272                 :       13890 :       while ((op != M2Quads_FinallyEndOp) || (op3 != scope))
     273                 :             :         {
     274                 :       11358 :           end = M2Quads_GetNextQuad (end);
     275                 :       11358 :           M2Quads_GetQuad (end, &op, &op1, &op2, &op3);
     276                 :             :         }
     277                 :             :     }
     278                 :             :   else
     279                 :             :     {
     280                 :      568780 :       i = M2Quads_GetFirstQuad ();
     281                 :      568780 :       end = 0;
     282                 :             :     }
     283                 :      570046 :   nb = sb;
     284                 :      570046 :   sb->low = 0;
     285                 :      570046 :   sb->high = 0;
     286                 :  1573965742 :   for (;;)
     287                 :             :   {
     288                 :   787267894 :     if (i == 0)
     289                 :             :       {
     290                 :             :         if (Debugging)
     291                 :             :           {
     292                 :             :             DisplayScope (sb);
     293                 :             :           }
     294                 :             :         return sb;
     295                 :             :       }
     296                 :   786699114 :     M2Quads_GetQuad (i, &op, &op1, &op2, &op3);
     297                 :   786699114 :     if (op == M2Quads_ProcedureScopeOp)
     298                 :             :       {
     299                 :    11710814 :         NestedLevel += 1;
     300                 :             :       }
     301                 :   774988300 :     else if (op == M2Quads_ReturnOp)
     302                 :             :       {
     303                 :             :         /* avoid dangling else.  */
     304                 :    11710814 :         if (NestedLevel > 0)
     305                 :             :           {
     306                 :    11710814 :             NestedLevel -= 1;
     307                 :             :           }
     308                 :    11710814 :         if (NestedLevel == 0)
     309                 :             :           {
     310                 :    11691320 :             First = true;
     311                 :             :           }
     312                 :             :       }
     313                 :   763277486 :     else if (NestedLevel == 0)
     314                 :             :       {
     315                 :             :         /* avoid dangling else.  */
     316                 :    90978696 :         if (op == M2Quads_StartDefFileOp)
     317                 :             :           {
     318                 :    10750400 :             nb = AddToRange (nb, true, i);
     319                 :    10750400 :             SetScope (nb, op3, M2Scope_definitionscope);
     320                 :    10750400 :             prev = nb;
     321                 :             :           }
     322                 :    80228296 :         else if ((op == M2Quads_StartModFileOp) || (op == M2Quads_InitStartOp))
     323                 :             :           {
     324                 :             :             /* avoid dangling else.  */
     325                 :    15840058 :             nb = AddToRange (nb, true, i);
     326                 :    15840058 :             if (SymbolTable_IsDefImp (op3))
     327                 :             :               {
     328                 :    14813608 :                 SetScope (nb, op3, M2Scope_implementationscope);
     329                 :             :               }
     330                 :             :             else
     331                 :             :               {
     332                 :     1026450 :                 SetScope (nb, op3, M2Scope_programscope);
     333                 :             :               }
     334                 :             :             prev = nb;
     335                 :             :           }
     336                 :             :         else
     337                 :             :           {
     338                 :             :             /* avoid dangling else.  */
     339                 :    64388238 :             nb = AddToRange (nb, First, i);
     340                 :    64388238 :             if (op == M2Quads_InitEndOp)
     341                 :             :               {
     342                 :     7937936 :                 if (SymbolTable_IsDefImp (op3))
     343                 :             :                   {
     344                 :     7406804 :                     SetScope (nb, op3, M2Scope_implementationscope);
     345                 :             :                   }
     346                 :             :                 else
     347                 :             :                   {
     348                 :      531132 :                     SetScope (nb, op3, M2Scope_programscope);
     349                 :             :                   }
     350                 :             :                 prev = nb;
     351                 :             :               }
     352                 :    56450302 :             else if (First)
     353                 :             :               {
     354                 :             :                 /* avoid dangling else.  */
     355                 :       60158 :                 M2Debug_Assert (prev != NULL);
     356                 :       60158 :                 SetScope (nb, prev->scopeSym, prev->kindScope);
     357                 :             :               }
     358                 :             :           }
     359                 :             :         First = false;
     360                 :             :       }
     361                 :   786699114 :     if (i == end)
     362                 :             :       {
     363                 :             :         if (Debugging)
     364                 :             :           {
     365                 :             :             DisplayScope (sb);
     366                 :             :           }
     367                 :             :         return sb;
     368                 :             :       }
     369                 :   786697848 :     i = M2Quads_GetNextQuad (i);
     370                 :             :   }
     371                 :             :   ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/M2Scope.def", 20, 1);
     372                 :             :   __builtin_unreachable ();
     373                 :             : }
     374                 :             : 
     375                 :             : 
     376                 :             : /*
     377                 :             :    GetProcQuads -
     378                 :             : */
     379                 :             : 
     380                 :      540044 : static M2Scope_ScopeBlock__opaque GetProcQuads (M2Scope_ScopeBlock__opaque sb, unsigned int proc)
     381                 :             : {
     382                 :      540044 :   M2Scope_ScopeBlock__opaque nb;
     383                 :      540044 :   unsigned int scope;
     384                 :      540044 :   unsigned int start;
     385                 :      540044 :   unsigned int end;
     386                 :      540044 :   unsigned int i;
     387                 :      540044 :   unsigned int last;
     388                 :      540044 :   M2Quads_QuadOperator op;
     389                 :      540044 :   unsigned int op1;
     390                 :      540044 :   unsigned int op2;
     391                 :      540044 :   unsigned int op3;
     392                 :      540044 :   bool First;
     393                 :      540044 :   M2StackWord_StackOfWord s;
     394                 :      540044 :   NameKey_Name n;
     395                 :             : 
     396                 :      540044 :   s = M2StackWord_InitStackWord ();
     397                 :      540044 :   if (Debugging)
     398                 :             :     {
     399                 :             :       n = SymbolTable_GetSymName (proc);
     400                 :             :       M2Printf_printf1 ((const char *) "GetProcQuads for %a\\n", 21, (const unsigned char *) &n, (sizeof (n)-1));
     401                 :             :     }
     402                 :      540044 :   M2Debug_Assert (SymbolTable_IsProcedure (proc));
     403                 :      540044 :   SymbolTable_GetProcedureQuads (proc, &scope, &start, &end);
     404                 :      540044 :   if (Debugging)
     405                 :             :     {
     406                 :             :       M2Printf_printf1 ((const char *) " proc %d\\n", 10, (const unsigned char *) &proc, (sizeof (proc)-1));
     407                 :             :       M2Printf_printf1 ((const char *) " scope %d\\n", 11, (const unsigned char *) &scope, (sizeof (scope)-1));
     408                 :             :       M2Printf_printf1 ((const char *) " start %d\\n", 11, (const unsigned char *) &start, (sizeof (start)-1));
     409                 :             :       M2Printf_printf1 ((const char *) " end %d\\n", 9, (const unsigned char *) &end, (sizeof (end)-1));
     410                 :             :     }
     411                 :      540044 :   M2StackWord_PushWord (s, static_cast<unsigned int> (0));
     412                 :      540044 :   First = false;
     413                 :      540044 :   i = scope;
     414                 :      540044 :   last = scope;
     415                 :      540044 :   nb = sb;
     416                 :      540044 :   sb->low = scope;
     417                 :      540044 :   sb->high = 0;
     418                 :      540044 :   SetScope (sb, proc, M2Scope_procedurescope);
     419                 :    14222071 :   while ((i <= end) && (start != 0))
     420                 :             :     {
     421                 :    13682027 :       M2Quads_GetQuad (i, &op, &op1, &op2, &op3);
     422                 :    13682027 :       if ((op == M2Quads_ProcedureScopeOp) || (op == M2Quads_ModuleScopeOp))
     423                 :             :         {
     424                 :      307624 :           if (((M2StackWord_PeepWord (s, 1)) == proc) && (op3 == proc))
     425                 :             :             {
     426                 :           0 :               nb = AddToRange (nb, First, last);
     427                 :           0 :               First = false;
     428                 :             :             }
     429                 :      307624 :           M2StackWord_PushWord (s, op3);
     430                 :      307624 :           if (op == M2Quads_ProcedureScopeOp)
     431                 :             :             {
     432                 :      306742 :               SetScope (nb, proc, M2Scope_procedurescope);
     433                 :             :             }
     434                 :             :           else
     435                 :             :             {
     436                 :         882 :               SetScope (nb, proc, M2Scope_modulescope);
     437                 :             :             }
     438                 :             :         }
     439                 :    13374403 :       else if ((op == M2Quads_ReturnOp) || (op == M2Quads_FinallyEndOp))
     440                 :             :         {
     441                 :             :           /* avoid dangling else.  */
     442                 :      307624 :           op3 = static_cast<unsigned int> (M2StackWord_PopWord (s));
     443                 :      307624 :           if ((M2StackWord_PeepWord (s, 1)) == proc)
     444                 :             :             {
     445                 :    13682027 :               First = true;
     446                 :             :             }
     447                 :             :         }
     448                 :             :       else
     449                 :             :         {
     450                 :             :           /* avoid dangling else.  */
     451                 :    13066779 :           if ((M2StackWord_PeepWord (s, 1)) == proc)
     452                 :             :             {
     453                 :    13031061 :               nb = AddToRange (nb, First, i);
     454                 :    13031061 :               First = false;
     455                 :             :             }
     456                 :             :         }
     457                 :    13682027 :       last = i;
     458                 :    13682027 :       i = M2Quads_GetNextQuad (i);
     459                 :             :     }
     460                 :      540044 :   if (start <= nb->high)
     461                 :             :     {
     462                 :      540044 :       nb->high = end;
     463                 :             :     }
     464                 :             :   else
     465                 :             :     {
     466                 :           0 :       nb->next = static_cast<M2Scope_ScopeBlock__opaque> (M2Scope_InitScopeBlock (SymbolTable_NulSym));
     467                 :           0 :       nb = nb->next;
     468                 :           0 :       SetScope (nb, proc, M2Scope_unsetscope);
     469                 :           0 :       nb->low = start;
     470                 :           0 :       nb->high = end;
     471                 :             :     }
     472                 :      540044 :   s = M2StackWord_KillStackWord (s);
     473                 :      540044 :   return sb;
     474                 :             :   /* static analysis guarentees a RETURN statement will be used before here.  */
     475                 :             :   __builtin_unreachable ();
     476                 :             : }
     477                 :             : 
     478                 :             : 
     479                 :             : /*
     480                 :             :    DisplayScope -
     481                 :             : */
     482                 :             : 
     483                 :           0 : static void DisplayScope (M2Scope_ScopeBlock__opaque sb)
     484                 :             : {
     485                 :           0 :   NameKey_Name name;
     486                 :             : 
     487                 :           0 :   M2Printf_printf0 ((const char *) "scope: ", 7);
     488                 :           0 :   switch (sb->kindScope)
     489                 :             :     {
     490                 :           0 :       case M2Scope_unsetscope:
     491                 :           0 :         M2Printf_printf0 ((const char *) "unset", 5);
     492                 :           0 :         break;
     493                 :             : 
     494                 :           0 :       case M2Scope_ignorescope:
     495                 :           0 :         M2Printf_printf0 ((const char *) "ignore", 6);
     496                 :           0 :         break;
     497                 :             : 
     498                 :           0 :       case M2Scope_procedurescope:
     499                 :           0 :         name = SymbolTable_GetSymName (sb->scopeSym);
     500                 :           0 :         M2Printf_printf1 ((const char *) "procedure %a", 12, (const unsigned char *) &name, (sizeof (name)-1));
     501                 :           0 :         break;
     502                 :             : 
     503                 :           0 :       case M2Scope_modulescope:
     504                 :           0 :         name = SymbolTable_GetSymName (sb->scopeSym);
     505                 :           0 :         M2Printf_printf1 ((const char *) "inner module %a", 15, (const unsigned char *) &name, (sizeof (name)-1));
     506                 :           0 :         break;
     507                 :             : 
     508                 :           0 :       case M2Scope_definitionscope:
     509                 :           0 :         name = SymbolTable_GetSymName (sb->scopeSym);
     510                 :           0 :         M2Printf_printf1 ((const char *) "definition module %a", 20, (const unsigned char *) &name, (sizeof (name)-1));
     511                 :           0 :         break;
     512                 :             : 
     513                 :           0 :       case M2Scope_implementationscope:
     514                 :           0 :         name = SymbolTable_GetSymName (sb->scopeSym);
     515                 :           0 :         M2Printf_printf1 ((const char *) "implementation module %a", 24, (const unsigned char *) &name, (sizeof (name)-1));
     516                 :           0 :         break;
     517                 :             : 
     518                 :           0 :       case M2Scope_programscope:
     519                 :           0 :         name = SymbolTable_GetSymName (sb->scopeSym);
     520                 :           0 :         M2Printf_printf1 ((const char *) "program module %a", 17, (const unsigned char *) &name, (sizeof (name)-1));
     521                 :           0 :         break;
     522                 :             : 
     523                 :             : 
     524                 :           0 :       default:
     525                 :           0 :         CaseException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/M2Scope.def", 20, 1);
     526                 :           0 :         __builtin_unreachable ();
     527                 :             :     }
     528                 :           0 :   M2Printf_printf0 ((const char *) "\\n", 2);
     529                 :           0 :   M2Quads_DisplayQuadRange (sb->scopeSym, sb->low, sb->high);
     530                 :           0 :   if (sb->next != NULL)
     531                 :             :     {
     532                 :           0 :       DisplayScope (sb->next);
     533                 :             :     }
     534                 :           0 : }
     535                 :             : 
     536                 :             : 
     537                 :             : /*
     538                 :             :    enter -
     539                 :             : */
     540                 :             : 
     541                 :    82600719 : static void enter (M2Scope_ScopeBlock__opaque sb)
     542                 :             : {
     543                 :    82600719 :   switch (sb->kindScope)
     544                 :             :     {
     545                 :             :       case M2Scope_unsetscope:
     546                 :             :       case M2Scope_ignorescope:
     547                 :             :         break;
     548                 :             : 
     549                 :    80902701 :       case M2Scope_procedurescope:
     550                 :    80902701 :       case M2Scope_modulescope:
     551                 :    80902701 :       case M2Scope_definitionscope:
     552                 :    80902701 :       case M2Scope_implementationscope:
     553                 :    80902701 :       case M2Scope_programscope:
     554                 :    80902701 :         M2Error_EnterErrorScope (SymbolTable_GetErrorScope (sb->scopeSym));
     555                 :    80902701 :         break;
     556                 :             : 
     557                 :             : 
     558                 :           0 :       default:
     559                 :           0 :         CaseException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/M2Scope.def", 20, 1);
     560                 :           0 :         __builtin_unreachable ();
     561                 :             :     }
     562                 :    82600719 : }
     563                 :             : 
     564                 :             : 
     565                 :             : /*
     566                 :             :    leave -
     567                 :             : */
     568                 :             : 
     569                 :    82600647 : static void leave (M2Scope_ScopeBlock__opaque sb)
     570                 :             : {
     571                 :           0 :   switch (sb->kindScope)
     572                 :             :     {
     573                 :             :       case M2Scope_unsetscope:
     574                 :             :       case M2Scope_ignorescope:
     575                 :             :         break;
     576                 :             : 
     577                 :             : 
     578                 :    80902629 :       default:
     579                 :    80902629 :         M2Error_LeaveErrorScope ();
     580                 :    80902629 :         break;
     581                 :             :     }
     582                 :           0 : }
     583                 :             : 
     584                 :             : 
     585                 :             : /*
     586                 :             :    Init - initializes the global variables for this module.
     587                 :             : */
     588                 :             : 
     589                 :           0 : static void Init (void)
     590                 :             : {
     591                 :           0 :   FreeList = static_cast<M2Scope_ScopeBlock__opaque> (NULL);
     592                 :           0 : }
     593                 :             : 
     594                 :             : 
     595                 :             : /*
     596                 :             :    InitScopeBlock -
     597                 :             : */
     598                 :             : 
     599                 :    27763190 : extern "C" M2Scope_ScopeBlock M2Scope_InitScopeBlock (unsigned int scope)
     600                 :             : {
     601                 :    27763190 :   M2Scope_ScopeBlock__opaque sb;
     602                 :             : 
     603                 :    27763190 :   New (&sb);
     604                 :    27763190 :   sb->next = static_cast<M2Scope_ScopeBlock__opaque> (NULL);
     605                 :    27763190 :   sb->kindScope = M2Scope_unsetscope;
     606                 :    27763190 :   if (scope == SymbolTable_NulSym)
     607                 :             :     {
     608                 :    26653100 :       sb->low = 0;
     609                 :    26653100 :       sb->high = 0;
     610                 :             :     }
     611                 :             :   else
     612                 :             :     {
     613                 :     1110090 :       if (SymbolTable_IsProcedure (scope))
     614                 :             :         {
     615                 :      540044 :           sb = GetProcQuads (sb, scope);
     616                 :             :         }
     617                 :             :       else
     618                 :             :         {
     619                 :      570046 :           sb = GetGlobalQuads (sb, scope);
     620                 :             :         }
     621                 :             :       if (TraceQuadruples)
     622                 :             :         {
     623                 :             :           DisplayScope (sb);
     624                 :             :         }
     625                 :             :     }
     626                 :    27763190 :   return static_cast<M2Scope_ScopeBlock> (sb);
     627                 :             :   /* static analysis guarentees a RETURN statement will be used before here.  */
     628                 :             :   __builtin_unreachable ();
     629                 :             : }
     630                 :             : 
     631                 :             : 
     632                 :             : /*
     633                 :             :    KillScopeBlock - destroys the ScopeBlock sb and assign sb to NIL.
     634                 :             : */
     635                 :             : 
     636                 :     1109964 : extern "C" void M2Scope_KillScopeBlock (M2Scope_ScopeBlock *sb)
     637                 :             : {
     638                 :     1109964 :   M2Scope_ScopeBlock__opaque t;
     639                 :             : 
     640                 :     1109964 :   t = static_cast<M2Scope_ScopeBlock__opaque> ((*sb));
     641                 :    28872404 :   while (t != NULL)
     642                 :             :     {
     643                 :    27762440 :       (*sb) = static_cast<M2Scope_ScopeBlock> (t);
     644                 :    27762440 :       t = t->next;
     645                 :    27762440 :       Dispose (reinterpret_cast<M2Scope_ScopeBlock__opaque *> (&(*sb)));
     646                 :             :     }
     647                 :     1109964 :   (*sb) = static_cast<M2Scope_ScopeBlock> (NULL);
     648                 :     1109964 : }
     649                 :             : 
     650                 :             : 
     651                 :             : /*
     652                 :             :    ForeachScopeBlockDo2 - calls a procedure p for each block of contigeous quadruples
     653                 :             :                           defining an outer scope sb.
     654                 :             : */
     655                 :             : 
     656                 :      253442 : extern "C" void M2Scope_ForeachScopeBlockDo2 (M2Scope_ScopeBlock sb, M2Scope_ScopeProcedure2 p)
     657                 :             : {
     658                 :      253442 :   if (TraceQuadruples)
     659                 :             :     {
     660                 :             :       M2Printf_printf0 ((const char *) "ForeachScopeBlockDo\\n", 21);
     661                 :             :     }
     662                 :     1016718 :   while (sb != NULL)
     663                 :             :     {
     664                 :      763288 :       if (TraceQuadruples)
     665                 :             :         {
     666                 :             :           DisplayScope (static_cast<M2Scope_ScopeBlock__opaque> (sb));
     667                 :             :         }
     668                 :      763288 :       enter (static_cast<M2Scope_ScopeBlock__opaque> (sb));
     669                 :      763288 :       if ((static_cast<M2Scope_ScopeBlock__opaque> (sb)->low != 0) && (static_cast<M2Scope_ScopeBlock__opaque> (sb)->high != 0))
     670                 :             :         {
     671                 :      605489 :           (*p.proc) (static_cast<M2Scope_ScopeBlock__opaque> (sb)->low, static_cast<M2Scope_ScopeBlock__opaque> (sb)->high);
     672                 :             :         }
     673                 :      763276 :       leave (static_cast<M2Scope_ScopeBlock__opaque> (sb));
     674                 :      763276 :       sb = static_cast<M2Scope_ScopeBlock> (static_cast<M2Scope_ScopeBlock__opaque> (sb)->next);
     675                 :             :     }
     676                 :      253430 :   if (TraceQuadruples)
     677                 :             :     {
     678                 :             :       M2Printf_printf0 ((const char *) "end ForeachScopeBlockDo\\n\\n", 27);
     679                 :             :     }
     680                 :      253430 : }
     681                 :             : 
     682                 :             : 
     683                 :             : /*
     684                 :             :    ForeachScopeBlockDo3 - calls a procedure p for each block of contigeous quadruples
     685                 :             :                           defining an outer scope sb.
     686                 :             : */
     687                 :             : 
     688                 :     2736381 : extern "C" void M2Scope_ForeachScopeBlockDo3 (M2Scope_ScopeBlock sb, M2Scope_ScopeProcedure3 p)
     689                 :             : {
     690                 :     2736381 :   if (TraceQuadruples)
     691                 :             :     {
     692                 :             :       M2Printf_printf0 ((const char *) "ForeachScopeBlockDo\\n", 21);
     693                 :             :     }
     694                 :    84573752 :   while (sb != NULL)
     695                 :             :     {
     696                 :    81837431 :       if (TraceQuadruples)
     697                 :             :         {
     698                 :             :           DisplayScope (static_cast<M2Scope_ScopeBlock__opaque> (sb));
     699                 :             :         }
     700                 :    81837431 :       enter (static_cast<M2Scope_ScopeBlock__opaque> (sb));
     701                 :    81837431 :       if ((static_cast<M2Scope_ScopeBlock__opaque> (sb)->low != 0) && (static_cast<M2Scope_ScopeBlock__opaque> (sb)->high != 0))
     702                 :             :         {
     703                 :    79755795 :           (*p.proc) (static_cast<M2Scope_ScopeBlock__opaque> (sb)->scopeSym, static_cast<M2Scope_ScopeBlock__opaque> (sb)->low, static_cast<M2Scope_ScopeBlock__opaque> (sb)->high);
     704                 :             :         }
     705                 :    81837371 :       leave (static_cast<M2Scope_ScopeBlock__opaque> (sb));
     706                 :    81837371 :       sb = static_cast<M2Scope_ScopeBlock> (static_cast<M2Scope_ScopeBlock__opaque> (sb)->next);
     707                 :             :     }
     708                 :     2736321 :   if (TraceQuadruples)
     709                 :             :     {
     710                 :             :       M2Printf_printf0 ((const char *) "end ForeachScopeBlockDo\\n\\n", 27);
     711                 :             :     }
     712                 :     2736321 : }
     713                 :             : 
     714                 :           0 : extern "C" void _M2_M2Scope_init (__attribute__((unused)) int argc, __attribute__((unused)) char *argv[], __attribute__((unused)) char *envp[])
     715                 :             : {
     716                 :           0 :   Init ();
     717                 :           0 : }
     718                 :             : 
     719                 :           0 : extern "C" void _M2_M2Scope_fini (__attribute__((unused)) int argc, __attribute__((unused)) char *argv[], __attribute__((unused)) char *envp[])
     720                 :             : {
     721                 :           0 : }
        

Generated by: LCOV version 2.1-beta

LCOV profile is generated on x86_64 machine using following configure options: configure --disable-bootstrap --enable-coverage=opt --enable-languages=c,c++,fortran,go,jit,lto,rust,m2 --enable-host-shared. GCC test suite is run with the built compiler.