On 7/23/2021 1:49 AM, Jakub Jelinek wrote:
Hi!

Our documentation says that paradoxical subregs shouldn't appear
in strict_low_part:
'(strict_low_part (subreg:M (reg:N R) 0))'
      This expression code is used in only one context: as the
      destination operand of a 'set' expression.  In addition, the
      operand of this expression must be a non-paradoxical 'subreg'
      expression.
but on the testcase below that triggers UB at runtime
store_integral_bit_field emits exactly that.

The following patch fixes it by ensuring the requirement is satisfied.

Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?

2021-07-23  Jakub Jelinek  <ja...@redhat.com>

        PR rtl-optimization/101562
        * expmed.c (store_integral_bit_field): Only use movstrict_optab
        if the operand isn't paradoxical.

        * gcc.c-torture/compile/pr101562.c: New test.
OK
jeff

Reply via email to