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: Peter Maydell
Subject: Re: [Qemu-devel] [PULL 0/5] tcg queued patches
Date: Mon, 15 Feb 2016 13:04:37 +0000

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...

thanks
-- PMM



reply via email to

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