(GO_IF_INDEXABLE_BASE): Allow LABEL_REF only if it's for a jump table.
authorRichard Stallman <rms@gnu.org>
Thu, 22 Oct 1992 12:05:31 +0000 (12:05 +0000)
committerRichard Stallman <rms@gnu.org>
Thu, 22 Oct 1992 12:05:31 +0000 (12:05 +0000)
From-SVN: r2553

gcc/config/m68k/m68k.h

index 4b1497d32cbf0f4a5c00a1664c6b0d36b921779c..0ae542586285a2519eab16529b6160039f43135d 100644 (file)
@@ -1128,8 +1128,15 @@ __transfer_from_trampoline ()                                    \
 #define GO_IF_NONINDEXED_ADDRESS(X, ADDR)  \
 { if (INDIRECTABLE_1_ADDRESS_P (X)) goto ADDR; }
 
-#define GO_IF_INDEXABLE_BASE(X, ADDR)  \
-{ if (GET_CODE (X) == LABEL_REF) goto ADDR;                            \
+/* Only labels on dispatch tables are valid for indexing from.  */
+#define GO_IF_INDEXABLE_BASE(X, ADDR)                          \
+{ rtx temp;                                                    \
+  if (GET_CODE (X) == LABEL_REF                                        \
+      && (temp = next_nonnote_insn (XEXP (X, 0))) != 0         \
+      && GET_CODE (temp) == JUMP_INSN                          \
+      && (GET_CODE (PATTERN (temp)) == ADDR_VEC                        \
+         || GET_CODE (PATTERN (temp)) == ADDR_DIFF_VEC))       \
+    goto ADDR;                                                 \
   if (GET_CODE (X) == REG && REG_OK_FOR_BASE_P (X)) goto ADDR; }
 
 #define GO_IF_INDEXING(X, ADDR)        \