diff options
author | Ilya Enkovich <ilya.enkovich@intel.com> | 2015-05-13 07:49:59 +0000 |
---|---|---|
committer | Ilya Enkovich <ienkovich@gcc.gnu.org> | 2015-05-13 07:49:59 +0000 |
commit | e9ae68afa0154895e42dbc098bc7ba63eaef7ce6 (patch) | |
tree | 31b9c5cfef7d4d0d069152409b26c2cba800b09a | |
parent | aa953e2fc52e2196d62b9669a69c9e82de43dc3c (diff) | |
download | gcc-e9ae68afa0154895e42dbc098bc7ba63eaef7ce6.zip gcc-e9ae68afa0154895e42dbc098bc7ba63eaef7ce6.tar.gz gcc-e9ae68afa0154895e42dbc098bc7ba63eaef7ce6.tar.bz2 |
re PR rtl-optimization/66048 ([i386] ICE in create_pre_exit when both AVX and MPX are used)
gcc/
PR target/66048
* function.c (diddle_return_value_1): Process bounds first.
* config/i38/i386.c (ix86_function_value_regno_p): Add bnd1
register.
gcc/testsuite/
PR target/66048
* gcc.target/i386/mpx/pr66048.cc: New.
From-SVN: r223114
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/config/i386/i386.c | 3 | ||||
-rw-r--r-- | gcc/function.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/mpx/pr66048.cc | 16 |
5 files changed, 31 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5d03f43..35f8197 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2015-05-13 Ilya Enkovich <ilya.enkovich@intel.com> + + PR target/66048 + * function.c (diddle_return_value_1): Process bounds first. + * config/i38/i386.c (ix86_function_value_regno_p): Add bnd1 + register. + 2015-05-13 Thomas Preud'homme <thomas.preudhomme@arm.com> PR rtl-optimization/64616 diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index fd52d89..bda3257 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -8216,7 +8216,8 @@ ix86_function_value_regno_p (const unsigned int regno) case SI_REG: return TARGET_64BIT && ix86_abi != MS_ABI; - case FIRST_BND_REG: + case BND0_REG: + case BND1_REG: return chkp_function_instrumented_p (current_function_decl); /* Complex values are returned in %st(0)/%st(1) pair. */ diff --git a/gcc/function.c b/gcc/function.c index 42d5aeb..eb90ed5 100644 --- a/gcc/function.c +++ b/gcc/function.c @@ -5224,8 +5224,8 @@ diddle_return_value_1 (void (*doit) (rtx, void *), void *arg, rtx outgoing) void diddle_return_value (void (*doit) (rtx, void *), void *arg) { - diddle_return_value_1 (doit, arg, crtl->return_rtx); diddle_return_value_1 (doit, arg, crtl->return_bnd); + diddle_return_value_1 (doit, arg, crtl->return_rtx); } static void diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 0a70648..2f83f4e 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2015-05-13 Ilya Enkovich <ilya.enkovich@intel.com> + + PR target/66048 + * gcc.target/i386/mpx/pr66048.cc: New. + 2015-05-13 Thomas Preud'homme <thomas.preudhomme@arm.com> PR rtl-optimization/64616 diff --git a/gcc/testsuite/gcc.target/i386/mpx/pr66048.cc b/gcc/testsuite/gcc.target/i386/mpx/pr66048.cc new file mode 100644 index 0000000..b29cd03 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/mpx/pr66048.cc @@ -0,0 +1,16 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fcheck-pointer-bounds -mmpx -march=corei7-avx" } */ + +struct c1 +{ + c1 (const c1 &other) : p (other.p) { }; + int *p; +}; + +struct c2 : public c1 { }; + +c1 +test (c2 a) +{ + return a; +} |