Proper warnings for "risky" gotos.

This commit is contained in:
laubzega
2018-09-28 22:11:09 -07:00
committed by Oliver Schmidt
parent c835f49913
commit c797b3b376
10 changed files with 637 additions and 27 deletions

View File

@@ -87,7 +87,6 @@ static Function* NewFunction (struct SymEntry* Sym)
F->TopLevelSP = 0; F->TopLevelSP = 0;
F->RegOffs = RegisterSpace; F->RegOffs = RegisterSpace;
F->Flags = IsTypeVoid (F->ReturnType) ? FF_VOID_RETURN : FF_NONE; F->Flags = IsTypeVoid (F->ReturnType) ? FF_VOID_RETURN : FF_NONE;
F->LocalsBlockCount = 0;
InitCollection (&F->LocalsBlockStack); InitCollection (&F->LocalsBlockStack);
@@ -524,6 +523,8 @@ void NewFunc (SymEntry* Func)
/* Need a starting curly brace */ /* Need a starting curly brace */
ConsumeLCurly (); ConsumeLCurly ();
/* Make sure there is always something on the stack of local variable blocks */
CollAppend (&CurrentFunc->LocalsBlockStack, 0); CollAppend (&CurrentFunc->LocalsBlockStack, 0);
/* Parse local variable declarations if any */ /* Parse local variable declarations if any */

View File

@@ -61,7 +61,6 @@ struct Function {
int TopLevelSP; /* SP at function top level */ int TopLevelSP; /* SP at function top level */
unsigned RegOffs; /* Register variable space offset */ unsigned RegOffs; /* Register variable space offset */
funcflags_t Flags; /* Function flags */ funcflags_t Flags; /* Function flags */
long LocalsBlockCount; /* Number of blocks with local vars */
Collection LocalsBlockStack; /* Stack of blocks with local vars */ Collection LocalsBlockStack; /* Stack of blocks with local vars */
}; };

View File

@@ -52,6 +52,7 @@
#include "standard.h" #include "standard.h"
#include "symtab.h" #include "symtab.h"
#include "typeconv.h" #include "typeconv.h"
#include "input.h"
@@ -270,6 +271,12 @@ static void ParseAutoDecl (Declaration* Decl)
/* Mark the variable as referenced */ /* Mark the variable as referenced */
Sym->Flags |= SC_REF; Sym->Flags |= SC_REF;
/* Make note of auto variables initialized in current block.
We abuse the Collection somewhat by using it to store line
numbers. */
CollReplace (&CurrentFunc->LocalsBlockStack, (void *)(long)GetCurrentLine (),
CollCount (&CurrentFunc->LocalsBlockStack) - 1);
} else { } else {
/* Non-initialized local variable. Just keep track of /* Non-initialized local variable. Just keep track of
** the space needed. ** the space needed.
@@ -489,6 +496,9 @@ void DeclareLocals (void)
/* Remember the current stack pointer */ /* Remember the current stack pointer */
int InitialStack = StackPtr; int InitialStack = StackPtr;
/* A place to store info about potential initializations of auto variables */
CollAppend (&CurrentFunc->LocalsBlockStack, 0);
/* Loop until we don't find any more variables */ /* Loop until we don't find any more variables */
while (1) { while (1) {
@@ -538,10 +548,9 @@ void DeclareLocals (void)
/* Be sure to allocate any reserved space for locals */ /* Be sure to allocate any reserved space for locals */
F_AllocLocalSpace (CurrentFunc); F_AllocLocalSpace (CurrentFunc);
if (InitialStack != StackPtr) { /* No auto variables were inited. No new block on the stack then. */
++CurrentFunc->LocalsBlockCount; if (CollLast (&CurrentFunc->LocalsBlockStack) == NULL) {
/* Is it ok to abuse Collection in this way? */ CollPop (&CurrentFunc->LocalsBlockStack);
CollAppend (&CurrentFunc->LocalsBlockStack, (void *)CurrentFunc->LocalsBlockCount);
} }
/* In case we've allocated local variables in this block, emit a call to /* In case we've allocated local variables in this block, emit a call to

View File

@@ -513,6 +513,7 @@ static int CompoundStatement (void)
/* Remember the stack at block entry */ /* Remember the stack at block entry */
int OldStack = StackPtr; int OldStack = StackPtr;
long OldBlockStackSize = CollCount (&CurrentFunc->LocalsBlockStack);
/* Enter a new lexical level */ /* Enter a new lexical level */
EnterBlockLevel (); EnterBlockLevel ();
@@ -535,7 +536,9 @@ static int CompoundStatement (void)
g_space (StackPtr - OldStack); g_space (StackPtr - OldStack);
} }
if (OldStack != StackPtr) { /* If the segment had autoinited variables, let's pop it of a stack
of such blocks. */
if (OldBlockStackSize != CollCount (&CurrentFunc->LocalsBlockStack)) {
CollPop (&CurrentFunc->LocalsBlockStack); CollPop (&CurrentFunc->LocalsBlockStack);
} }

View File

@@ -90,7 +90,7 @@ void FreeSymEntry (SymEntry* E)
if (E->Flags & SC_LABEL) { if (E->Flags & SC_LABEL) {
for (i = 0; i < CollCount (E->V.L.DefsOrRefs); i++) { for (i = 0; i < CollCount (E->V.L.DefsOrRefs); i++) {
xfree (CollAt(E->V.L.DefsOrRefs, i)); xfree (CollAt (E->V.L.DefsOrRefs, i));
} }
DoneCollection (E->V.L.DefsOrRefs); DoneCollection (E->V.L.DefsOrRefs);

View File

@@ -105,7 +105,7 @@ struct LiteralPool;
typedef struct DefOrRef DefOrRef; typedef struct DefOrRef DefOrRef;
struct DefOrRef { struct DefOrRef {
unsigned Line; unsigned Line;
long LocalsBlockNum; long LocalsBlockId;
unsigned Flags; unsigned Flags;
int StackPtr; int StackPtr;
unsigned Depth; unsigned Depth;

View File

@@ -668,7 +668,7 @@ DefOrRef* AddDefOrRef(SymEntry* E, unsigned Flags)
DOR = xmalloc (sizeof (DefOrRef)); DOR = xmalloc (sizeof (DefOrRef));
CollAppend (E->V.L.DefsOrRefs, DOR); CollAppend (E->V.L.DefsOrRefs, DOR);
DOR->Line = GetCurrentLine (); DOR->Line = GetCurrentLine ();
DOR->LocalsBlockNum = (long)CollLast (&CurrentFunc->LocalsBlockStack); DOR->LocalsBlockId = (long)CollLast (&CurrentFunc->LocalsBlockStack);
DOR->Flags = Flags; DOR->Flags = Flags;
DOR->StackPtr = StackPtr; DOR->StackPtr = StackPtr;
DOR->Depth = CollCount (&CurrentFunc->LocalsBlockStack); DOR->Depth = CollCount (&CurrentFunc->LocalsBlockStack);
@@ -677,12 +677,13 @@ DefOrRef* AddDefOrRef(SymEntry* E, unsigned Flags)
return DOR; return DOR;
} }
SymEntry* AddLabelSym (const char* Name, unsigned Flags) SymEntry* AddLabelSym (const char* Name, unsigned Flags)
/* Add a goto label to the label table */ /* Add a goto label to the label table */
{ {
unsigned i; unsigned i;
DefOrRef *DOR, *NewDOR; DefOrRef *DOR, *NewDOR;
/* We juggle it so much that a shortcut will help with clarity */
Collection *AIC = &CurrentFunc->LocalsBlockStack;
/* Do we have an entry with this name already? */ /* Do we have an entry with this name already? */
SymEntry* Entry = FindSymInTable (LabelTab, Name, HashStr (Name)); SymEntry* Entry = FindSymInTable (LabelTab, Name, HashStr (Name));
@@ -700,35 +701,40 @@ SymEntry* AddLabelSym (const char* Name, unsigned Flags)
for (i = 0; i < CollCount (Entry->V.L.DefsOrRefs); i++) { for (i = 0; i < CollCount (Entry->V.L.DefsOrRefs); i++) {
DOR = CollAt (Entry->V.L.DefsOrRefs, i); DOR = CollAt (Entry->V.L.DefsOrRefs, i);
if((DOR->Flags & SC_DEF) && (Flags & SC_REF)) { if ((DOR->Flags & SC_DEF) && (Flags & SC_REF)) {
/* We're processing a goto and here is its destination label. /* We're processing a goto and here is its destination label.
This means the difference between SP values is already known, This means the difference between SP values is already known,
so we simply emit the SP adjustment code. */ so we simply emit the SP adjustment code. */
if(StackPtr != DOR->StackPtr) if (StackPtr != DOR->StackPtr) {
g_space (StackPtr - DOR->StackPtr); g_space (StackPtr - DOR->StackPtr);
}
/* Are we jumping into same or deeper nesting region? That's risky, /* Are we jumping into a block with initalization of an object that
so let's emit a warning. */ has automatic storage duration? Let's emit a warning. */
if (CollCount (&CurrentFunc->LocalsBlockStack) <= DOR->Depth && if ((long)CollLast (AIC) != DOR->LocalsBlockId &&
DOR->LocalsBlockNum != (long)CollLast (&CurrentFunc->LocalsBlockStack)) { (CollCount (AIC) < DOR->Depth ||
Warning ("Goto from line %d to label \'%s\' can result in a " (long)CollAt (AIC, DOR->Depth - 1) != DOR->LocalsBlockId)) {
"trashed stack", DOR->Line, Name); Warning ("Goto at line %d to label %s jumps into a block with "
"initialization of an object that has automatic storage duration.",
GetCurrentLine (), Name);
} }
} }
if((DOR->Flags & SC_REF) && (Flags & SC_DEF)) {
if ((DOR->Flags & SC_REF) && (Flags & SC_DEF)) {
/* We're processing a label, let's update all gotos encountered /* We're processing a label, let's update all gotos encountered
so far */ so far */
g_defdatalabel (DOR->LateSP_Label); g_defdatalabel (DOR->LateSP_Label);
g_defdata (CF_CONST | CF_INT, StackPtr - DOR->StackPtr, 0); g_defdata (CF_CONST | CF_INT, StackPtr - DOR->StackPtr, 0);
/* Are we jumping into same or deeper nesting region? That's risky, /* Are we jumping into a block with initalization of an object that
so let's emit a warning. */ has automatic storage duration? Let's emit a warning. */
if (CollCount (&CurrentFunc->LocalsBlockStack) >= DOR->Depth && if ((long)CollLast (AIC) != DOR->LocalsBlockId &&
DOR->LocalsBlockNum != (long)CollLast (&CurrentFunc->LocalsBlockStack)) { (CollCount (AIC) >= DOR->Depth ||
Warning ("Goto from line %d to label \'%s\' can result in a " (long)CollLast (AIC) >= DOR->Line))
"trashed stack", DOR->Line, Name); Warning ("Goto at line %d to label %s jumps into a block with "
} "initialization of an object that has automatic storage duration.",
DOR->Line, Name);
} }
} }

View File

@@ -72,6 +72,11 @@ $(WORKDIR)/limits.$1.$2.prg: limits.c $(DIFF)
$(SIM65) $(SIM65FLAGS) $$@ > $(WORKDIR)/limits.$1.out $(SIM65) $(SIM65FLAGS) $$@ > $(WORKDIR)/limits.$1.out
$(DIFF) $(WORKDIR)/limits.$1.out limits.ref $(DIFF) $(WORKDIR)/limits.$1.out limits.ref
$(WORKDIR)/goto.$1.$2.prg: goto.c $(DIFF)
$(if $(QUIET),echo misc/goto.$1.$2.prg)
$(CL65) -t sim$2 -$1 -o $$@ $$< 2>$(WORKDIR)/goto.$1.out
$(DIFF) $(WORKDIR)/goto.$1.out goto.ref
# the rest are tests that fail currently for one reason or another # the rest are tests that fail currently for one reason or another
$(WORKDIR)/fields.$1.$2.prg: fields.c | $(WORKDIR) $(WORKDIR)/fields.$1.$2.prg: fields.c | $(WORKDIR)
@echo "FIXME: " $$@ "currently will fail." @echo "FIXME: " $$@ "currently will fail."

437
test/misc/goto.c Normal file
View File

@@ -0,0 +1,437 @@
void main () {
goto end;
{
int a = 1;
start:
goto end;
}
goto start;
end:;
}
void f2 () {
int a = 2;
l1:
goto l1;
goto l2;
goto l3;
goto l4;
goto l5;
goto l6;
goto l7;
goto l8;
goto l9;
goto la;
goto lb;
goto lc;
goto ld;
goto le;
goto lf;
goto lg;
goto lh;
goto li;
{
int a;
l2:;
goto l1;
goto l2;
goto l3;
goto l4;
goto l5;
goto l6;
goto l7;
goto l8;
goto l9;
goto la;
goto lb;
goto lc;
goto ld;
goto le;
goto lf;
goto lg;
goto lh;
goto li;
{
int a;
l3:;
goto l1;
goto l2;
goto l3;
goto l4;
goto l5;
goto l6;
goto l7;
goto l8;
goto l9;
goto la;
goto lb;
goto lc;
goto ld;
goto le;
goto lf;
goto lg;
goto lh;
goto li;
{
int a;
l4:;
goto l1;
goto l2;
goto l3;
goto l4;
goto l5;
goto l6;
goto l7;
goto l8;
goto l9;
goto la;
goto lb;
goto lc;
goto ld;
goto le;
goto lf;
goto lg;
goto lh;
goto li;
}
l5:;
goto l1;
goto l2;
goto l3;
goto l4;
goto l5;
goto l6;
goto l7;
goto l8;
goto l9;
goto la;
goto lb;
goto lc;
goto ld;
goto le;
goto lf;
goto lg;
goto lh;
goto li;
}
l6:;
goto l1;
goto l2;
goto l3;
goto l4;
goto l5;
goto l6;
goto l7;
goto l8;
goto l9;
goto la;
goto lb;
goto lc;
goto ld;
goto le;
goto lf;
goto lg;
goto lh;
goto li;
}
l7:;
goto l1;
goto l2;
goto l3;
goto l4;
goto l5;
goto l6;
goto l7;
goto l8;
goto l9;
goto la;
goto lb;
goto lc;
goto ld;
goto le;
goto lf;
goto lg;
goto lh;
goto li;
{
int a = 1;
l8:;
goto l1;
goto l2;
goto l3;
goto l4;
goto l5;
goto l6;
goto l7;
goto l8;
goto l9;
goto la;
goto lb;
goto lc;
goto ld;
goto le;
goto lf;
goto lg;
goto lh;
goto li;
{
int a = 1;
l9:;
goto l1;
goto l2;
goto l3;
goto l4;
goto l5;
goto l6;
goto l7;
goto l8;
goto l9;
goto la;
goto lb;
goto lc;
goto ld;
goto le;
goto lf;
goto lg;
goto lh;
goto li;
{
int a = 1;
la:;
goto l1;
goto l2;
goto l3;
goto l4;
goto l5;
goto l6;
goto l7;
goto l8;
goto l9;
goto la;
goto lb;
goto lc;
goto ld;
goto le;
goto lf;
goto lg;
goto lh;
goto li;
}
lb:;
goto l1;
goto l2;
goto l3;
goto l4;
goto l5;
goto l6;
goto l7;
goto l8;
goto l9;
goto la;
goto lb;
goto lc;
goto ld;
goto le;
goto lf;
goto lg;
goto lh;
goto li;
}
lc:;
goto l1;
goto l2;
goto l3;
goto l4;
goto l5;
goto l6;
goto l7;
goto l8;
goto l9;
goto la;
goto lb;
goto lc;
goto ld;
goto le;
goto lf;
goto lg;
goto lh;
goto li;
}
{
int a = 1;
ld:;
goto l1;
goto l2;
goto l3;
goto l4;
goto l5;
goto l6;
goto l7;
goto l8;
goto l9;
goto la;
goto lb;
goto lc;
goto ld;
goto le;
goto lf;
goto lg;
goto lh;
goto li;
{
int a = 1;
le:;
goto l1;
goto l2;
goto l3;
goto l4;
goto l5;
goto l6;
goto l7;
goto l8;
goto l9;
goto la;
goto lb;
goto lc;
goto ld;
goto le;
goto lf;
goto lg;
goto lh;
goto li;
{
int a = 1;
lf:;
goto l1;
goto l2;
goto l3;
goto l4;
goto l5;
goto l6;
goto l7;
goto l8;
goto l9;
goto la;
goto lb;
goto lc;
goto ld;
goto le;
goto lf;
goto lg;
goto lh;
goto li;
}
lg:;
goto l1;
goto l2;
goto l3;
goto l4;
goto l5;
goto l6;
goto l7;
goto l8;
goto l9;
goto la;
goto lb;
goto lc;
goto ld;
goto le;
goto lf;
goto lg;
goto lh;
goto li;
}
lh:;
goto l1;
goto l2;
goto l3;
goto l4;
goto l5;
goto l6;
goto l7;
goto l8;
goto l9;
goto la;
goto lb;
goto lc;
goto ld;
goto le;
goto lf;
goto lg;
goto lh;
goto li;
}
li:;
goto l1;
goto l2;
goto l3;
goto l4;
goto l5;
goto l6;
goto l7;
goto l8;
goto l9;
goto la;
goto lb;
goto lc;
goto ld;
goto le;
goto lf;
goto lg;
goto lh;
goto li;
}
/* Structure of the above function.
void f2 () {
int a = 2;
l1:
{
int a;
l2:;
{
int a;
l3:;
{
int a;
l4:;
}
l5:;
}
l6:;
}
l7:;
{
int a = 1;
l8:;
{
int a = 1;
l9:;
{
int a = 1;
la:;
}
lb:;
}
lc:;
}
{
int a = 1;
ld:;
{
int a = 1;
le:;
{
int a = 1;
lf:;
}
lg:;
}
lh:;
}
li:;
}
*/

150
test/misc/goto.ref Normal file
View File

@@ -0,0 +1,150 @@
goto.c(8): Warning: Goto at line 8 to label start jumps into a block with initialization of an object that has automatic storage duration.
goto.c(97): Warning: `a' is defined but never used
goto.c(117): Warning: `a' is defined but never used
goto.c(137): Warning: `a' is defined but never used
goto.c(159): Warning: Goto at line 23 to label l8 jumps into a block with initialization of an object that has automatic storage duration.
goto.c(159): Warning: Goto at line 44 to label l8 jumps into a block with initialization of an object that has automatic storage duration.
goto.c(159): Warning: Goto at line 65 to label l8 jumps into a block with initialization of an object that has automatic storage duration.
goto.c(159): Warning: Goto at line 86 to label l8 jumps into a block with initialization of an object that has automatic storage duration.
goto.c(159): Warning: Goto at line 106 to label l8 jumps into a block with initialization of an object that has automatic storage duration.
goto.c(159): Warning: Goto at line 126 to label l8 jumps into a block with initialization of an object that has automatic storage duration.
goto.c(159): Warning: Goto at line 146 to label l8 jumps into a block with initialization of an object that has automatic storage duration.
goto.c(180): Warning: Goto at line 24 to label l9 jumps into a block with initialization of an object that has automatic storage duration.
goto.c(180): Warning: Goto at line 45 to label l9 jumps into a block with initialization of an object that has automatic storage duration.
goto.c(180): Warning: Goto at line 66 to label l9 jumps into a block with initialization of an object that has automatic storage duration.
goto.c(180): Warning: Goto at line 87 to label l9 jumps into a block with initialization of an object that has automatic storage duration.
goto.c(180): Warning: Goto at line 107 to label l9 jumps into a block with initialization of an object that has automatic storage duration.
goto.c(180): Warning: Goto at line 127 to label l9 jumps into a block with initialization of an object that has automatic storage duration.
goto.c(180): Warning: Goto at line 147 to label l9 jumps into a block with initialization of an object that has automatic storage duration.
goto.c(180): Warning: Goto at line 168 to label l9 jumps into a block with initialization of an object that has automatic storage duration.
goto.c(201): Warning: Goto at line 25 to label la jumps into a block with initialization of an object that has automatic storage duration.
goto.c(201): Warning: Goto at line 46 to label la jumps into a block with initialization of an object that has automatic storage duration.
goto.c(201): Warning: Goto at line 67 to label la jumps into a block with initialization of an object that has automatic storage duration.
goto.c(201): Warning: Goto at line 88 to label la jumps into a block with initialization of an object that has automatic storage duration.
goto.c(201): Warning: Goto at line 108 to label la jumps into a block with initialization of an object that has automatic storage duration.
goto.c(201): Warning: Goto at line 128 to label la jumps into a block with initialization of an object that has automatic storage duration.
goto.c(201): Warning: Goto at line 148 to label la jumps into a block with initialization of an object that has automatic storage duration.
goto.c(201): Warning: Goto at line 169 to label la jumps into a block with initialization of an object that has automatic storage duration.
goto.c(201): Warning: Goto at line 190 to label la jumps into a block with initialization of an object that has automatic storage duration.
goto.c(221): Warning: Goto at line 26 to label lb jumps into a block with initialization of an object that has automatic storage duration.
goto.c(221): Warning: Goto at line 47 to label lb jumps into a block with initialization of an object that has automatic storage duration.
goto.c(221): Warning: Goto at line 68 to label lb jumps into a block with initialization of an object that has automatic storage duration.
goto.c(221): Warning: Goto at line 89 to label lb jumps into a block with initialization of an object that has automatic storage duration.
goto.c(221): Warning: Goto at line 109 to label lb jumps into a block with initialization of an object that has automatic storage duration.
goto.c(221): Warning: Goto at line 129 to label lb jumps into a block with initialization of an object that has automatic storage duration.
goto.c(221): Warning: Goto at line 149 to label lb jumps into a block with initialization of an object that has automatic storage duration.
goto.c(221): Warning: Goto at line 170 to label lb jumps into a block with initialization of an object that has automatic storage duration.
goto.c(231): Warning: Goto at line 231 to label la jumps into a block with initialization of an object that has automatic storage duration.
goto.c(241): Warning: Goto at line 27 to label lc jumps into a block with initialization of an object that has automatic storage duration.
goto.c(241): Warning: Goto at line 48 to label lc jumps into a block with initialization of an object that has automatic storage duration.
goto.c(241): Warning: Goto at line 69 to label lc jumps into a block with initialization of an object that has automatic storage duration.
goto.c(241): Warning: Goto at line 90 to label lc jumps into a block with initialization of an object that has automatic storage duration.
goto.c(241): Warning: Goto at line 110 to label lc jumps into a block with initialization of an object that has automatic storage duration.
goto.c(241): Warning: Goto at line 130 to label lc jumps into a block with initialization of an object that has automatic storage duration.
goto.c(241): Warning: Goto at line 150 to label lc jumps into a block with initialization of an object that has automatic storage duration.
goto.c(250): Warning: Goto at line 250 to label l9 jumps into a block with initialization of an object that has automatic storage duration.
goto.c(251): Warning: Goto at line 251 to label la jumps into a block with initialization of an object that has automatic storage duration.
goto.c(252): Warning: Goto at line 252 to label lb jumps into a block with initialization of an object that has automatic storage duration.
goto.c(263): Warning: Goto at line 28 to label ld jumps into a block with initialization of an object that has automatic storage duration.
goto.c(263): Warning: Goto at line 49 to label ld jumps into a block with initialization of an object that has automatic storage duration.
goto.c(263): Warning: Goto at line 70 to label ld jumps into a block with initialization of an object that has automatic storage duration.
goto.c(263): Warning: Goto at line 91 to label ld jumps into a block with initialization of an object that has automatic storage duration.
goto.c(263): Warning: Goto at line 111 to label ld jumps into a block with initialization of an object that has automatic storage duration.
goto.c(263): Warning: Goto at line 131 to label ld jumps into a block with initialization of an object that has automatic storage duration.
goto.c(263): Warning: Goto at line 151 to label ld jumps into a block with initialization of an object that has automatic storage duration.
goto.c(263): Warning: Goto at line 172 to label ld jumps into a block with initialization of an object that has automatic storage duration.
goto.c(263): Warning: Goto at line 193 to label ld jumps into a block with initialization of an object that has automatic storage duration.
goto.c(263): Warning: Goto at line 214 to label ld jumps into a block with initialization of an object that has automatic storage duration.
goto.c(263): Warning: Goto at line 234 to label ld jumps into a block with initialization of an object that has automatic storage duration.
goto.c(263): Warning: Goto at line 254 to label ld jumps into a block with initialization of an object that has automatic storage duration.
goto.c(271): Warning: Goto at line 271 to label l8 jumps into a block with initialization of an object that has automatic storage duration.
goto.c(272): Warning: Goto at line 272 to label l9 jumps into a block with initialization of an object that has automatic storage duration.
goto.c(273): Warning: Goto at line 273 to label la jumps into a block with initialization of an object that has automatic storage duration.
goto.c(274): Warning: Goto at line 274 to label lb jumps into a block with initialization of an object that has automatic storage duration.
goto.c(275): Warning: Goto at line 275 to label lc jumps into a block with initialization of an object that has automatic storage duration.
goto.c(284): Warning: Goto at line 29 to label le jumps into a block with initialization of an object that has automatic storage duration.
goto.c(284): Warning: Goto at line 50 to label le jumps into a block with initialization of an object that has automatic storage duration.
goto.c(284): Warning: Goto at line 71 to label le jumps into a block with initialization of an object that has automatic storage duration.
goto.c(284): Warning: Goto at line 92 to label le jumps into a block with initialization of an object that has automatic storage duration.
goto.c(284): Warning: Goto at line 112 to label le jumps into a block with initialization of an object that has automatic storage duration.
goto.c(284): Warning: Goto at line 132 to label le jumps into a block with initialization of an object that has automatic storage duration.
goto.c(284): Warning: Goto at line 152 to label le jumps into a block with initialization of an object that has automatic storage duration.
goto.c(284): Warning: Goto at line 173 to label le jumps into a block with initialization of an object that has automatic storage duration.
goto.c(284): Warning: Goto at line 194 to label le jumps into a block with initialization of an object that has automatic storage duration.
goto.c(284): Warning: Goto at line 215 to label le jumps into a block with initialization of an object that has automatic storage duration.
goto.c(284): Warning: Goto at line 235 to label le jumps into a block with initialization of an object that has automatic storage duration.
goto.c(284): Warning: Goto at line 255 to label le jumps into a block with initialization of an object that has automatic storage duration.
goto.c(284): Warning: Goto at line 277 to label le jumps into a block with initialization of an object that has automatic storage duration.
goto.c(292): Warning: Goto at line 292 to label l8 jumps into a block with initialization of an object that has automatic storage duration.
goto.c(293): Warning: Goto at line 293 to label l9 jumps into a block with initialization of an object that has automatic storage duration.
goto.c(294): Warning: Goto at line 294 to label la jumps into a block with initialization of an object that has automatic storage duration.
goto.c(295): Warning: Goto at line 295 to label lb jumps into a block with initialization of an object that has automatic storage duration.
goto.c(296): Warning: Goto at line 296 to label lc jumps into a block with initialization of an object that has automatic storage duration.
goto.c(305): Warning: Goto at line 30 to label lf jumps into a block with initialization of an object that has automatic storage duration.
goto.c(305): Warning: Goto at line 51 to label lf jumps into a block with initialization of an object that has automatic storage duration.
goto.c(305): Warning: Goto at line 72 to label lf jumps into a block with initialization of an object that has automatic storage duration.
goto.c(305): Warning: Goto at line 93 to label lf jumps into a block with initialization of an object that has automatic storage duration.
goto.c(305): Warning: Goto at line 113 to label lf jumps into a block with initialization of an object that has automatic storage duration.
goto.c(305): Warning: Goto at line 133 to label lf jumps into a block with initialization of an object that has automatic storage duration.
goto.c(305): Warning: Goto at line 153 to label lf jumps into a block with initialization of an object that has automatic storage duration.
goto.c(305): Warning: Goto at line 174 to label lf jumps into a block with initialization of an object that has automatic storage duration.
goto.c(305): Warning: Goto at line 195 to label lf jumps into a block with initialization of an object that has automatic storage duration.
goto.c(305): Warning: Goto at line 216 to label lf jumps into a block with initialization of an object that has automatic storage duration.
goto.c(305): Warning: Goto at line 236 to label lf jumps into a block with initialization of an object that has automatic storage duration.
goto.c(305): Warning: Goto at line 256 to label lf jumps into a block with initialization of an object that has automatic storage duration.
goto.c(305): Warning: Goto at line 278 to label lf jumps into a block with initialization of an object that has automatic storage duration.
goto.c(305): Warning: Goto at line 299 to label lf jumps into a block with initialization of an object that has automatic storage duration.
goto.c(313): Warning: Goto at line 313 to label l8 jumps into a block with initialization of an object that has automatic storage duration.
goto.c(314): Warning: Goto at line 314 to label l9 jumps into a block with initialization of an object that has automatic storage duration.
goto.c(315): Warning: Goto at line 315 to label la jumps into a block with initialization of an object that has automatic storage duration.
goto.c(316): Warning: Goto at line 316 to label lb jumps into a block with initialization of an object that has automatic storage duration.
goto.c(317): Warning: Goto at line 317 to label lc jumps into a block with initialization of an object that has automatic storage duration.
goto.c(325): Warning: Goto at line 31 to label lg jumps into a block with initialization of an object that has automatic storage duration.
goto.c(325): Warning: Goto at line 52 to label lg jumps into a block with initialization of an object that has automatic storage duration.
goto.c(325): Warning: Goto at line 73 to label lg jumps into a block with initialization of an object that has automatic storage duration.
goto.c(325): Warning: Goto at line 94 to label lg jumps into a block with initialization of an object that has automatic storage duration.
goto.c(325): Warning: Goto at line 114 to label lg jumps into a block with initialization of an object that has automatic storage duration.
goto.c(325): Warning: Goto at line 134 to label lg jumps into a block with initialization of an object that has automatic storage duration.
goto.c(325): Warning: Goto at line 154 to label lg jumps into a block with initialization of an object that has automatic storage duration.
goto.c(325): Warning: Goto at line 175 to label lg jumps into a block with initialization of an object that has automatic storage duration.
goto.c(325): Warning: Goto at line 196 to label lg jumps into a block with initialization of an object that has automatic storage duration.
goto.c(325): Warning: Goto at line 217 to label lg jumps into a block with initialization of an object that has automatic storage duration.
goto.c(325): Warning: Goto at line 237 to label lg jumps into a block with initialization of an object that has automatic storage duration.
goto.c(325): Warning: Goto at line 257 to label lg jumps into a block with initialization of an object that has automatic storage duration.
goto.c(325): Warning: Goto at line 279 to label lg jumps into a block with initialization of an object that has automatic storage duration.
goto.c(333): Warning: Goto at line 333 to label l8 jumps into a block with initialization of an object that has automatic storage duration.
goto.c(334): Warning: Goto at line 334 to label l9 jumps into a block with initialization of an object that has automatic storage duration.
goto.c(335): Warning: Goto at line 335 to label la jumps into a block with initialization of an object that has automatic storage duration.
goto.c(336): Warning: Goto at line 336 to label lb jumps into a block with initialization of an object that has automatic storage duration.
goto.c(337): Warning: Goto at line 337 to label lc jumps into a block with initialization of an object that has automatic storage duration.
goto.c(340): Warning: Goto at line 340 to label lf jumps into a block with initialization of an object that has automatic storage duration.
goto.c(345): Warning: Goto at line 32 to label lh jumps into a block with initialization of an object that has automatic storage duration.
goto.c(345): Warning: Goto at line 53 to label lh jumps into a block with initialization of an object that has automatic storage duration.
goto.c(345): Warning: Goto at line 74 to label lh jumps into a block with initialization of an object that has automatic storage duration.
goto.c(345): Warning: Goto at line 95 to label lh jumps into a block with initialization of an object that has automatic storage duration.
goto.c(345): Warning: Goto at line 115 to label lh jumps into a block with initialization of an object that has automatic storage duration.
goto.c(345): Warning: Goto at line 135 to label lh jumps into a block with initialization of an object that has automatic storage duration.
goto.c(345): Warning: Goto at line 155 to label lh jumps into a block with initialization of an object that has automatic storage duration.
goto.c(345): Warning: Goto at line 176 to label lh jumps into a block with initialization of an object that has automatic storage duration.
goto.c(345): Warning: Goto at line 197 to label lh jumps into a block with initialization of an object that has automatic storage duration.
goto.c(345): Warning: Goto at line 218 to label lh jumps into a block with initialization of an object that has automatic storage duration.
goto.c(345): Warning: Goto at line 238 to label lh jumps into a block with initialization of an object that has automatic storage duration.
goto.c(345): Warning: Goto at line 258 to label lh jumps into a block with initialization of an object that has automatic storage duration.
goto.c(353): Warning: Goto at line 353 to label l8 jumps into a block with initialization of an object that has automatic storage duration.
goto.c(354): Warning: Goto at line 354 to label l9 jumps into a block with initialization of an object that has automatic storage duration.
goto.c(355): Warning: Goto at line 355 to label la jumps into a block with initialization of an object that has automatic storage duration.
goto.c(356): Warning: Goto at line 356 to label lb jumps into a block with initialization of an object that has automatic storage duration.
goto.c(357): Warning: Goto at line 357 to label lc jumps into a block with initialization of an object that has automatic storage duration.
goto.c(359): Warning: Goto at line 359 to label le jumps into a block with initialization of an object that has automatic storage duration.
goto.c(360): Warning: Goto at line 360 to label lf jumps into a block with initialization of an object that has automatic storage duration.
goto.c(361): Warning: Goto at line 361 to label lg jumps into a block with initialization of an object that has automatic storage duration.
goto.c(373): Warning: Goto at line 373 to label l8 jumps into a block with initialization of an object that has automatic storage duration.
goto.c(374): Warning: Goto at line 374 to label l9 jumps into a block with initialization of an object that has automatic storage duration.
goto.c(375): Warning: Goto at line 375 to label la jumps into a block with initialization of an object that has automatic storage duration.
goto.c(376): Warning: Goto at line 376 to label lb jumps into a block with initialization of an object that has automatic storage duration.
goto.c(377): Warning: Goto at line 377 to label lc jumps into a block with initialization of an object that has automatic storage duration.
goto.c(378): Warning: Goto at line 378 to label ld jumps into a block with initialization of an object that has automatic storage duration.
goto.c(379): Warning: Goto at line 379 to label le jumps into a block with initialization of an object that has automatic storage duration.
goto.c(380): Warning: Goto at line 380 to label lf jumps into a block with initialization of an object that has automatic storage duration.
goto.c(381): Warning: Goto at line 381 to label lg jumps into a block with initialization of an object that has automatic storage duration.
goto.c(382): Warning: Goto at line 382 to label lh jumps into a block with initialization of an object that has automatic storage duration.