From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:43792) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YOq64-0006aD-GQ for qemu-devel@nongnu.org; Fri, 20 Feb 2015 11:06:33 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YOq63-0007W8-EZ for qemu-devel@nongnu.org; Fri, 20 Feb 2015 11:06:32 -0500 Received: from mx1.redhat.com ([209.132.183.28]:64995) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YOq63-0007VG-7H for qemu-devel@nongnu.org; Fri, 20 Feb 2015 11:06:31 -0500 From: =?UTF-8?q?Radim=20Kr=C4=8Dm=C3=A1=C5=99?= Date: Fri, 20 Feb 2015 17:06:16 +0100 Message-Id: <1424448376-15599-3-git-send-email-rkrcmar@redhat.com> In-Reply-To: <1424448376-15599-1-git-send-email-rkrcmar@redhat.com> References: <1424448376-15599-1-git-send-email-rkrcmar@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Subject: [Qemu-devel] [PATCH 2/2] milkymist-pfpu: fix GCC 5.0.0 aggressive-loop-optimizations warning List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Paolo Bonzini , Michael Walle , Peter Maydell man gcc: Warn if in a loop with constant number of iterations the compiler detects undefined behavior in some statement during one or more of the iterations. Milkymist pfpu has no jump instructions, so checking for MICROCODE_WORDS instructions should have kept us in bounds of s->microcode, but i++ allowed one loop too many, hw/misc/milkymist-pfpu.c: In function =E2=80=98pfpu_write=E2=80=99: hw/misc/milkymist-pfpu.c:365:20: error: loop exit may only be reached a= fter undefined behavior [-Werror=3Daggressive-loop-optimizations] if (i++ >=3D MICROCODE_WORDS) { ^ hw/misc/milkymist-pfpu.c:167:14: note: possible undefined statement is = here uint32_t insn =3D s->microcode[pc]; ^ The code can still access out of bounds, because it presumes that PC regi= ster always begins at 0, and we allow writing to it. Signed-off-by: Radim Kr=C4=8Dm=C3=A1=C5=99 --- v2: used a simpler solution [Paolo, Peter] hw/misc/milkymist-pfpu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/misc/milkymist-pfpu.c b/hw/misc/milkymist-pfpu.c index 609f33f9cd14..08b604f13f4b 100644 --- a/hw/misc/milkymist-pfpu.c +++ b/hw/misc/milkymist-pfpu.c @@ -362,7 +362,7 @@ static void pfpu_start(MilkymistPFPUState *s) i =3D 0; while (pfpu_decode_insn(s)) { /* decode at most MICROCODE_WORDS instructions */ - if (i++ >=3D MICROCODE_WORDS) { + if (++i >=3D MICROCODE_WORDS) { error_report("milkymist_pfpu: too many instructions = " "executed in microcode. No VECTOUT?"); break; --=20 2.3.0