qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PULL 0/5] tcg queued patches


From: Richard Henderson
Subject: Re: [Qemu-devel] [PULL 0/5] tcg queued patches
Date: Tue, 16 Feb 2016 07:29:45 +1100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.5.0

On 02/16/2016 12:04 AM, Peter Maydell wrote:
On 15 February 2016 at 11:29, Richard Henderson <address@hidden> 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~



reply via email to

[Prev in Thread] Current Thread [Next in Thread]