From 69116abafcea38db1e73cf0c3cea98f13c844d36 Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Fri, 2 Mar 2018 15:10:25 -0500 Subject: [PATCH] tcg: Initialize return value after exit_atomic Users of tcg_gen_atomic_cmpxchg and do_atomic_op rightfully utilize the output. Even though this code is dead, it gets translated, and without the initialization we encounter a tcg_error. Backports commit 79b1af906245558c30e0a5faf26cb52b63f83cce from qemu --- qemu/tcg/tcg-op.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/qemu/tcg/tcg-op.c b/qemu/tcg/tcg-op.c index 89768f4f..2691929d 100644 --- a/qemu/tcg/tcg-op.c +++ b/qemu/tcg/tcg-op.c @@ -2924,6 +2924,9 @@ void tcg_gen_atomic_cmpxchg_i64(TCGContext *s, #endif #else gen_helper_exit_atomic(s, s->tcg_env); + /* Produce a result, so that we have a well-formed opcode stream + with respect to uses of the result in the (dead) code following. */ + tcg_gen_movi_i64(s, retv, 0); #endif /* CONFIG_ATOMIC64 */ } else { TCGv_i32 c32 = tcg_temp_new_i32(s); @@ -3033,6 +3036,9 @@ static void do_atomic_op_i64(TCGContext *s, #endif #else gen_helper_exit_atomic(s, s->tcg_env); + /* Produce a result, so that we have a well-formed opcode stream + with respect to uses of the result in the (dead) code following. */ + tcg_gen_movi_i64(s, ret, 0); #endif /* CONFIG_ATOMIC64 */ } else { TCGv_i32 v32 = tcg_temp_new_i32(s);