diff options
Diffstat (limited to 'gcc/reload1.c')
-rw-r--r-- | gcc/reload1.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/gcc/reload1.c b/gcc/reload1.c index a355a629a37..c8573dc39bc 100644 --- a/gcc/reload1.c +++ b/gcc/reload1.c @@ -673,7 +673,14 @@ reload (first, global, dumpfile) if (i > LAST_VIRTUAL_REGISTER) { if (GET_CODE (x) == MEM) - reg_equiv_memory_loc[i] = x; + { + /* If the operand is a PLUS, the MEM may be shared, + so make sure we have an unshared copy here. */ + if (GET_CODE (XEXP (x, 0)) == PLUS) + x = copy_rtx (x); + + reg_equiv_memory_loc[i] = x; + } else if (CONSTANT_P (x)) { if (LEGITIMATE_CONSTANT_P (x)) |