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.
This commit is contained in:
Michael Matz
2016-10-09 00:44:22 +02:00
parent a2a596e767
commit 235711f3d3
3 changed files with 27 additions and 2 deletions

View File

@ -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) {