From 235711f3d3a5a41a4bb51a22dca6700aa77d34c1 Mon Sep 17 00:00:00 2001 From: Michael Matz Date: Sun, 9 Oct 2016 00:44:22 +0200 Subject: 64bit: Fix addends > 32 bits If a symbolic reference is offsetted by a constant > 32bit the backends can't deal with that, so don't construct such values. --- tccgen.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'tccgen.c') diff --git a/tccgen.c b/tccgen.c index 5c74971..b490c04 100644 --- a/tccgen.c +++ b/tccgen.c @@ -1775,8 +1775,13 @@ static void gen_opic(int op) /* symbol + constant case */ if (op == '-') l2 = -l2; + l2 += vtop[-1].c.i; + /* The backends can't always deal with addends to symbols + larger than +-1<<31. Don't construct such. */ + if ((int)l2 != l2) + goto general_case; vtop--; - vtop->c.i += l2; + vtop->c.i = l2; } else { general_case: if (!nocode_wanted) { -- cgit v1.3.1