extraction at all and so can do nothing. */
linner = get_inner_reference (lhs, &lbitsize, &lbitpos, &offset, &lmode,
&lunsignedp, &lvolatilep);
- if (lbitsize == GET_MODE_BITSIZE (lmode) || lbitsize < 0
+ if (linner == lhs || lbitsize == GET_MODE_BITSIZE (lmode) || lbitsize < 0
|| offset != 0)
return 0;
rinner = get_inner_reference (rhs, &rbitsize, &rbitpos, &offset,
&rmode, &runsignedp, &rvolatilep);
- if (lbitpos != rbitpos || lbitsize != rbitsize
+ if (rinner == rhs || lbitpos != rbitpos || lbitsize != rbitsize
|| lunsignedp != runsignedp || offset != 0)
return 0;
}
inner = get_inner_reference (exp, pbitsize, pbitpos, &offset, pmode,
punsignedp, pvolatilep);
- if (*pbitsize < 0 || offset != 0)
+ if (inner == exp || *pbitsize < 0 || offset != 0)
return 0;
if (mask == 0)