From: Uros Bizjak Date: Wed, 19 Oct 2016 15:00:06 +0000 (+0200) Subject: re PR target/77991 (ICE on x32 in plus_constant, at explow.c:87) X-Git-Tag: releases/gcc-5.5.0~751 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ea96581da7ec1afd8bc57a50c929fb7f23bc5941;p=thirdparty%2Fgcc.git re PR target/77991 (ICE on x32 in plus_constant, at explow.c:87) PR target/77991 * config/i386/i386.c (legitimize_tls_address) : For TARGET_64BIT || TARGET_ANY_GNU_TLS convert dest to Pmode if different than Pmode. testsuite/ChangeLog: PR target/77991 * gcc.target/i386/pr77991.c: New test. From-SVN: r241346 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a99e9ad46ed1..880196d4bd19 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2016-10-19 Uros Bizjak + + PR target/77991 + * config/i386/i386.c (legitimize_tls_address) + : For TARGET_64BIT || TARGET_ANY_GNU_TLS + convert dest to Pmode if different than Pmode. + 2016-10-18 Kugan Vivekanandarajah Backport from mainline diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index e032b388ac7d..10de2c9fdcdd 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -14286,7 +14286,9 @@ legitimize_tls_address (rtx x, enum tls_model model, bool for_mov) base = get_thread_pointer (tp_mode, for_mov || !TARGET_TLS_DIRECT_SEG_REFS); off = force_reg (tp_mode, off); - return gen_rtx_PLUS (tp_mode, base, off); + dest = gen_rtx_PLUS (tp_mode, base, off); + if (tp_mode != Pmode) + dest = convert_to_mode (Pmode, dest, 1); } else { diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index c7345038d9eb..020ee03d14d2 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2016-10-19 Uros Bizjak + + PR target/77991 + * gcc.target/i386/pr77991.c: New test. + 2016-10-17 Steven G. Kargl Backport from trunk @@ -81,7 +86,7 @@ subroutine as an actual argument when numeric argument is expected. 2016-09-30 Steven G. Kargl - + Backport from trunk PR fortran/69867 @@ -107,14 +112,14 @@ 2016-09-30 Steven G. Kargl Backport from trunk - + PR fortran/71799 * gfortran.dg/pr71799.f90: New test. 2016-09-30 Steven G. Kargl Backport from trunk - + PR fortran/70006 * gfortran.dg/pr70006.f90: New test. diff --git a/gcc/testsuite/gcc.target/i386/pr77991.c b/gcc/testsuite/gcc.target/i386/pr77991.c new file mode 100644 index 000000000000..6784fbcb9fb4 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr77991.c @@ -0,0 +1,19 @@ +/* { dg-do compile { target { ! ia32 } } } */ +/* { dg-require-effective-target maybe_x32 } */ +/* { dg-options "-O2 -mx32 -maddress-mode=short" } */ + +struct rcu_reader_data +{ + unsigned ctr; + _Bool waiting; +} + +extern __thread rcu_reader; + +void rcu_read_lock() +{ + struct rcu_reader_data *x = &rcu_reader; + _Bool val = 0; + + __atomic_store(&x->waiting, &val, 0); +}