From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 2614 invoked by alias); 4 Nov 2015 10:49:13 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 2590 invoked by uid 89); 4 Nov 2015 10:49:11 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.6 required=5.0 tests=BAYES_00,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=ham version=3.3.2 X-HELO: mail-yk0-f172.google.com Received: from mail-yk0-f172.google.com (HELO mail-yk0-f172.google.com) (209.85.160.172) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Wed, 04 Nov 2015 10:49:10 +0000 Received: by ykft191 with SMTP id t191so64656456ykf.0 for ; Wed, 04 Nov 2015 02:49:08 -0800 (PST) MIME-Version: 1.0 X-Received: by 10.129.88.68 with SMTP id m65mr608701ywb.230.1446634148208; Wed, 04 Nov 2015 02:49:08 -0800 (PST) Received: by 10.13.202.132 with HTTP; Wed, 4 Nov 2015 02:49:08 -0800 (PST) In-Reply-To: <1446072524-17431-1-git-send-email-notasas@gmail.com> References: <1446072524-17431-1-git-send-email-notasas@gmail.com> Date: Wed, 04 Nov 2015 10:49:00 -0000 Message-ID: Subject: Re: [PATCH][4.9/5 Backport] PR rtl-optimization/67037 Use copy_rtx when necessary From: Grazvydas Ignotas To: gcc-patches@gcc.gnu.org Cc: Bernd Edlinger , Grazvydas Ignotas Content-Type: text/plain; charset=UTF-8 X-SW-Source: 2015-11/txt/msg00323.txt.bz2 Can anyone commit this, please? On Thu, Oct 29, 2015 at 12:48 AM, Grazvydas Ignotas wrote: > Hi, > > This is the 4.9 and GCC 5 backport of patch from PR67037 that's already in trunk. > I've build it on 4.9 and confirmed that it works. > > Grazvydas > > Backport from mainline > 2015-09-30 Bernd Edlinger > > PR rtl-optimization/67037 > * lra-constraints.c (process_addr_reg): Use copy_rtx when necessary. > > testsuite: > 2015-09-30 Bernd Edlinger > > PR rtl-optimization/67037 > * gcc.c-torture/execute/pr67037.c: New test. > --- > gcc/lra-constraints.c | 2 +- > gcc/testsuite/gcc.c-torture/execute/pr67037.c | 49 +++++++++++++++++++++++++++ > 2 files changed, 50 insertions(+), 1 deletion(-) > create mode 100644 gcc/testsuite/gcc.c-torture/execute/pr67037.c > > diff --git a/gcc/lra-constraints.c b/gcc/lra-constraints.c > index ae8f3cd..919b127 100644 > --- a/gcc/lra-constraints.c > +++ b/gcc/lra-constraints.c > @@ -1203,7 +1203,7 @@ process_addr_reg (rtx *loc, rtx *before, rtx *after, enum reg_class cl) > if (after != NULL) > { > start_sequence (); > - lra_emit_move (reg, new_reg); > + lra_emit_move (before_p ? copy_rtx (reg) : reg, new_reg); > emit_insn (*after); > *after = get_insns (); > end_sequence (); > diff --git a/gcc/testsuite/gcc.c-torture/execute/pr67037.c b/gcc/testsuite/gcc.c-torture/execute/pr67037.c > new file mode 100644 > index 0000000..3119d32 > --- /dev/null > +++ b/gcc/testsuite/gcc.c-torture/execute/pr67037.c > @@ -0,0 +1,49 @@ > +long (*extfunc)(); > + > +static inline void lstrcpynW( short *d, const short *s, int n ) > +{ > + unsigned int count = n; > + > + while ((count > 1) && *s) > + { > + count--; > + *d++ = *s++; > + } > + if (count) *d = 0; > +} > + > +int __attribute__((noinline,noclone)) > +badfunc(int u0, int u1, int u2, int u3, > + short *fsname, unsigned int fsname_len) > +{ > + static const short ntfsW[] = {'N','T','F','S',0}; > + char superblock[2048+3300]; > + int ret = 0; > + short *p; > + > + if (extfunc()) > + return 0; > + p = (void *)extfunc(); > + if (p != 0) > + goto done; > + > + extfunc(superblock); > + > + lstrcpynW(fsname, ntfsW, fsname_len); > + > + ret = 1; > +done: > + return ret; > +} > + > +static long f() > +{ > + return 0; > +} > + > +int main() > +{ > + short buf[6]; > + extfunc = f; > + return !badfunc(0, 0, 0, 0, buf, 6); > +} > -- > 1.9.1 >