for (i = 0; i < CollCount (Entry->V.L.DefsOrRefs); i++) {
DOR = CollAt (Entry->V.L.DefsOrRefs, i);
- if ((DOR->Flags & SC_DEF) && (Flags & SC_REF) && (Flags & SC_GOTO)) {
+ if ((DOR->Flags & SC_DEF) && (Flags & SC_REF) && (Flags & (SC_GOTO|SC_GOTO_IND))) {
/* We're processing a goto and here is its destination label.
** This means the difference between SP values is already known,
** so we simply emit the SP adjustment code.
}
- if ((DOR->Flags & SC_REF) && (DOR->Flags & SC_GOTO) && (Flags & SC_DEF)) {
+ if ((DOR->Flags & SC_REF) && (DOR->Flags & (SC_GOTO|SC_GOTO_IND)) && (Flags & SC_DEF)) {
/* We're processing a label, let's update all gotos encountered
** so far
*/
- SymEntry *E;
- g_userodata();
- g_defdatalabel (DOR->LateSP_Label);
- g_defdata (CF_CONST | CF_INT, StackPtr - DOR->StackPtr, 0);
-
- /* Optimizer will need the information about the value of SP adjustment
- ** later, so let's preserve it.
- */
- E = NewSymEntry (LocalLabelName (DOR->LateSP_Label), SC_SPADJUSTMENT);
- E->V.SPAdjustment = StackPtr - DOR->StackPtr;
- AddSymEntry (SPAdjustTab, E);
+ if (DOR->Flags & SC_GOTO) {
+ SymEntry *E;
+ g_userodata();
+ g_defdatalabel (DOR->LateSP_Label);
+ g_defdata (CF_CONST | CF_INT, StackPtr - DOR->StackPtr, 0);
+
+ /* Optimizer will need the information about the value of SP adjustment
+ ** later, so let's preserve it.
+ */
+ E = NewSymEntry (LocalLabelName (DOR->LateSP_Label), SC_SPADJUSTMENT);
+ E->V.SPAdjustment = StackPtr - DOR->StackPtr;
+ AddSymEntry (SPAdjustTab, E);
+ }
/* Are we jumping into a block with initalization of an object that
** has automatic storage duration? Let's emit a warning.