x86: Fix up ix86_atomic_assign_expand_fenv [PR94780]
authorJakub Jelinek <jakub@redhat.com>
Mon, 27 Apr 2020 19:14:52 +0000 (21:14 +0200)
committerJakub Jelinek <jakub@redhat.com>
Mon, 27 Apr 2020 21:28:25 +0000 (23:28 +0200)
commit9b8e9006bb35641865358e2df4f6b3ae185b239a
tree4a34d42b7c650874c77a73a918b1a1f160b2d601
parent5f1cd1da1a805c3d00332da45c3ab78a3931af63
x86: Fix up ix86_atomic_assign_expand_fenv [PR94780]

This function, because it is sometimes called even outside of function
bodies, uses create_tmp_var_raw rather than create_tmp_var.  But in order
for that to work, when first referenced, the VAR_DECLs need to appear in a
TARGET_EXPR so that during gimplification the var gets the right
DECL_CONTEXT and is added to local decls.  Without that, e.g. tree-nested.c
ICEs on those.

2020-04-27  Jakub Jelinek  <jakub@redhat.com>

PR target/94780
* config/i386/i386.c (ix86_atomic_assign_expand_fenv): Use
TARGET_EXPR instead of MODIFY_EXPR for first assignment to
sw_var, exceptions_var, mxcsr_orig_var and mxcsr_mod_var.

* gcc.dg/pr94780.c: New test.
gcc/ChangeLog
gcc/config/i386/i386.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr94780.c [new file with mode: 0644]