diff --git a/gcc/rtl.cc b/gcc/rtl.cc index f17474bfee1966db48334ceab9c7bde54c77c2d9..86c322b19ca109677f6da589e85cfa3ccfd18e0a 100644 --- a/gcc/rtl.cc +++ b/gcc/rtl.cc @@ -765,7 +765,7 @@ classify_insn (rtx x) return CALL_INSN; if (ANY_RETURN_P (x)) return JUMP_INSN; - if (GET_CODE (x) == ASM_OPERANDS && ASM_OPERANDS_LABEL_VEC (x)) + if (GET_CODE (x) == ASM_OPERANDS && ASM_OPERANDS_LABEL_LENGTH (x)) return JUMP_INSN; if (GET_CODE (x) == SET) { @@ -794,7 +794,7 @@ classify_insn (rtx x) if (has_return_p) return JUMP_INSN; if (GET_CODE (XVECEXP (x, 0, 0)) == ASM_OPERANDS - && ASM_OPERANDS_LABEL_VEC (XVECEXP (x, 0, 0))) + && ASM_OPERANDS_LABEL_LENGTH (XVECEXP (x, 0, 0))) return JUMP_INSN; } #ifdef GENERATOR_FILE diff --git a/gcc/testsuite/gcc.dg/torture/tls/pr104777.c b/gcc/testsuite/gcc.dg/torture/tls/pr104777.c new file mode 100644 index 0000000000000000000000000000000000000000..abaf59731fcc75798716d2d45de9590a9e23b8d4 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/tls/pr104777.c @@ -0,0 +1,30 @@ +/* PR rtl-optimization/104777 */ +/* { dg-do compile } */ +/* { dg-require-effective-target tls } */ + +int savestate_r; +int savestate_ssb; +extern void abort(); +__thread int loop; +void f (void) +{ + int savestate_r0_5; + int savestate_r1_6; + + __asm__("" : "=m" (savestate_ssb), "=r" (savestate_r)); + savestate_r0_5 = savestate_r; + if (savestate_r0_5 == 0) + { + __asm__ __volatile__("" : : "m" (loop)); + abort (); + } + + __asm__("" : "=m" (savestate_ssb), "=r" (savestate_r)); + savestate_r1_6 = savestate_r; + if (savestate_r1_6 != 0) + return; + + __asm__ __volatile__("" : : "m" (loop)); + abort (); + +}