From df113ce7de77eba567568d47c0d0e3d5ebd98559 Mon Sep 17 00:00:00 2001 From: Steve Ellcey Date: Thu, 28 Jan 2016 22:28:04 +0000 Subject: [PATCH] re PR target/68400 (ICE in change_address_1, at emit-rtl.c:2125) PR target/68400 * gcc.target/mips/mips.exp (mips_option_groups): Add stack-protector. * gcc.target/mips/pr68400.c: New test. From-SVN: r232954 --- gcc/testsuite/ChangeLog | 6 ++++++ gcc/testsuite/gcc.target/mips/mips.exp | 1 + gcc/testsuite/gcc.target/mips/pr68400.c | 28 ++++++++++++++++++++++++++++ 3 files changed, 35 insertions(+) create mode 100644 gcc/testsuite/gcc.target/mips/pr68400.c diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 0957d2f..fc1e4ee 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2016-01-28 Steve Ellcey + + PR target/68400 + * gcc.target/mips/mips.exp (mips_option_groups): Add stack-protector. + * gcc.target/mips/pr68400.c: New test. + 2016-01-28 Martin Sebor PR target/17381 diff --git a/gcc/testsuite/gcc.target/mips/mips.exp b/gcc/testsuite/gcc.target/mips/mips.exp index f191331..ff9c99a 100644 --- a/gcc/testsuite/gcc.target/mips/mips.exp +++ b/gcc/testsuite/gcc.target/mips/mips.exp @@ -257,6 +257,7 @@ set mips_option_groups { lsa "(|!)HAS_LSA" section_start "-Wl,--section-start=.*" frame-header "-mframe-header-opt|-mno-frame-header-opt" + stack-protector "-fstack-protector" } for { set option 0 } { $option < 32 } { incr option } { diff --git a/gcc/testsuite/gcc.target/mips/pr68400.c b/gcc/testsuite/gcc.target/mips/pr68400.c new file mode 100644 index 0000000..1099568 --- /dev/null +++ b/gcc/testsuite/gcc.target/mips/pr68400.c @@ -0,0 +1,28 @@ +/* PR target/pr68400 + This was triggering an ICE in change_address_1 when compiled with -Os. */ + +/* { dg-do compile } */ +/* { dg-options "-fstack-protector -mips16" } */ + +typedef struct s { + unsigned long long d; + long long t; +} p; + +int sh(int x, unsigned char *buf) +{ + p *uhdr = (p *)buf; + unsigned int i = 0; + uhdr->d = ((uhdr->d & 0xff00000000000000LL) >> 56) + | ((uhdr->d & 0x0000ff0000000000LL) >> 24) + | ((uhdr->d & 0x00000000ff000000LL) << 8) + | ((uhdr->d & 0x00000000000000ffLL) << 56); + uhdr->t = ((uhdr->t & 0xff00000000000000LL) >> 56) + | ((uhdr->t & 0x0000ff0000000000LL) >> 24) + | ((uhdr->t & 0x000000ff00000000LL) >> 8) + | ((uhdr->t & 0x00000000ff000000LL) << 8) + | ((uhdr->t & 0x000000000000ff00LL) << 40) + | ((uhdr->t & 0x00000000000000ffLL) << 56); + i += 4; + if (x < i) return 0; else return 1; +} -- 2.7.4