From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:48941) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aVPmQ-0004C6-1Q for qemu-devel@nongnu.org; Mon, 15 Feb 2016 15:29:58 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aVPmM-0001yZ-SM for qemu-devel@nongnu.org; Mon, 15 Feb 2016 15:29:57 -0500 Received: from mail-qg0-x236.google.com ([2607:f8b0:400d:c04::236]:34360) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aVPmM-0001yV-K5 for qemu-devel@nongnu.org; Mon, 15 Feb 2016 15:29:54 -0500 Received: by mail-qg0-x236.google.com with SMTP id b67so118716618qgb.1 for ; Mon, 15 Feb 2016 12:29:54 -0800 (PST) Sender: Richard Henderson References: <1455535767-28194-1-git-send-email-rth@twiddle.net> From: Richard Henderson Message-ID: <56C23539.6000805@twiddle.net> Date: Tue, 16 Feb 2016 07:29:45 +1100 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Subject: Re: [Qemu-devel] [PULL 0/5] tcg queued patches List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Peter Maydell Cc: QEMU Developers On 02/16/2016 12:04 AM, Peter Maydell wrote: > On 15 February 2016 at 11:29, Richard Henderson wrote: >> ---------------------------------------------------------------- >> Richard Henderson (5): >> tcg: Work around clang bug wrt enum ranges, part 2 >> tcg: Implement indirect memory registers >> tcg: Allocate indirect_base temporaries in a different order >> target-sparc: Tidy global register initialization >> target-sparc: Use global registers for the register window >> >> target-sparc/translate.c | 196 ++++++++++++++++++++++------------------------- >> tcg/tcg.c | 138 +++++++++++++++++++++++---------- >> tcg/tcg.h | 2 + >> 3 files changed, 192 insertions(+), 144 deletions(-) > > This failed to build on the i686-w64-mingw32 compiler > ("i686-w64-mingw32-gcc (GCC) 4.8.2", from the Ubuntu > gcc-mingw-w64-i686 package version 4.8.2-10ubuntu2+12): > > target-sparc/translate.c: In function ‘gen_intermediate_code’: > target-sparc/translate.c:299:24: error: array subscript is above array > bounds [-Werror=array-bounds] > return cpu_regs[reg]; > ^ > > Fiddling around with the source file to see which call to > gen_dest_gpr() is provoking this shows that it's the one > in gen_ldda_asi() at line 2157 -- if I change the second > argument from 'rd + 1' to 'rd' it compiles OK. > > Changing the call site of gen_ldda_asi at line 4727 so its last > argument is 'rd & ~1' rather than 'rd' also suppresses the > error. (That can't possibly change the semantics because we've > just done "if (rd & 1) goto illegal_insn;"...) > > I'm generally reluctant to suggest compiler bugs, but this does > look rather like a compiler bug... There are at least 5 such bugs open against gcc at the moment. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56456 I couldn't reproduce this quickly with a freshly built gcc 4.8 branch on i686-linux. Could you please file a gcc bug with your preprocessed source? There's a chance it isn't a duplicate, but... In the meantime... hmm. I don't suppose removing the inline helps? Probably not, since there's only one caller... Otherwise I guess we should go with your "rd & ~1" workaround. r~