From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Philipp Stephani Newsgroups: gmane.emacs.devel Subject: Re: Suspicious warning in W64 build Date: Sun, 17 Sep 2017 14:52:16 +0000 Message-ID: References: <1017454172.910810.1504618695244@mail.libero.it> <837ex9x7vf.fsf@gnu.org> <83tw0cwcle.fsf@gnu.org> <83h8wcw3td.fsf@gnu.org> <83377vx3d0.fsf@gnu.org> <83ingnq01t.fsf@gnu.org> <83fubrpxsv.fsf@gnu.org> <83r2v9masw.fsf@gnu.org> <86a81xrndl.fsf@gmail.com> <83a81wmijy.fsf@gnu.org> <83vakkklto.fsf@gnu.org> <83poarlrcj.fsf@gnu.org> <83h8w3krx1.fsf@gnu.org> <83bmm9jt23.fsf@gnu.org> NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: multipart/alternative; boundary="001a113dd4344f64b3055963c612" X-Trace: blaine.gmane.org 1505660003 29253 195.159.176.226 (17 Sep 2017 14:53:23 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Sun, 17 Sep 2017 14:53:23 +0000 (UTC) Cc: fabrice.popineau@centralesupelec.fr, andrewjmoreton@gmail.com, emacs-devel@gnu.org To: Eli Zaretskii , Paul Eggert Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Sun Sep 17 16:53:17 2017 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dtawe-0007PO-9N for ged-emacs-devel@m.gmane.org; Sun, 17 Sep 2017 16:53:16 +0200 Original-Received: from localhost ([::1]:60872 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dtawl-0004xn-Qq for ged-emacs-devel@m.gmane.org; Sun, 17 Sep 2017 10:53:23 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:47726) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dtaw4-0004xH-4f for emacs-devel@gnu.org; Sun, 17 Sep 2017 10:52:43 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dtavz-0002QU-1K for emacs-devel@gnu.org; Sun, 17 Sep 2017 10:52:39 -0400 Original-Received: from mail-oi0-x236.google.com ([2607:f8b0:4003:c06::236]:51239) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dtavt-0002Mc-Ny; Sun, 17 Sep 2017 10:52:29 -0400 Original-Received: by mail-oi0-x236.google.com with SMTP id i6so3657537oih.8; Sun, 17 Sep 2017 07:52:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=L5DfzhPyR6k2zEO4qV0Ni7nFLxnkwNjklIwC+GyXqAk=; b=lryZ+KPs4LYDMB79TwIkwr2b0WsHWhoBqYcvCxFdIlghf/KaepMcwB6fjhXb1XWb5F +kwOZeZNQ+h66gyS0xW2dkevCnCLp9KVppAUp+/9qmq1ebx+PJSmTxiG04ZLw5CHCep+ LOXxhRlhdo+S6eK13SLqJ54Js42ljMDZZG60FbUJ5XmyifiMpZ1TjwTnnQeINHDJSa9y 72Ou/7/H/5tnoPUecCewmzYQjpCQdGvjHzFhksS+89tEuKIk6NfQh1bgbipjH8fqUAE8 C6Shp5tvsQ30rmYzy8KyzJSC194ho1h48xAgcXmyhQ79GDTYlzzLbTji8S7PpCguEz1J f0ew== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=L5DfzhPyR6k2zEO4qV0Ni7nFLxnkwNjklIwC+GyXqAk=; b=bFyiZZ2oGeU5IvfCWrfmma0xAyrqsF8pPu35zp3d559vuw3PL6L4jtJZaDUhtwkOUG 3isA9Y8xWdOle0/6fAYbCoIZ0Aor3WjhO2pp2BXj3ORhxlZYNOjbXp3RdjoO/J9NzydB /4m2Uv0pKw3U5f/v5icW4H/5uSLhVAAxmkxDXRkKdXJPKHFDXM5EELR7S1tjMppLBWD7 vYiUTWnVkSziPDw09bR8GTTwfcubyjPwd1oHZd6crBkUzTjn0Ivg8HTuBm5uwvgs01Cl s40d4x2tsCcU9U2Njwm8ZfkiCOuOdU07Xuj1dTO/VVc0lsyRdqf68kZSsXNJKgDLmKyL UlLw== X-Gm-Message-State: AHPjjUjZTK2urtyxNdlLjJmPRycq4s2aCLWchOjueZJqVkNCnS5Rsl6T NDlBt3D7RsuYb5Yqu23Uj7rgqHwWue1cQnPg0lb87Q== X-Google-Smtp-Source: AOwi7QDl+w7HEfIkWW2DMrWNrRqVCoKPFZQniZSxvb/9HGIkn4/RrI+skjoslZKUe5/oKDJ7iTt84/Lop+38+N4WArs= X-Received: by 10.202.64.194 with SMTP id n185mr3504450oia.77.1505659947277; Sun, 17 Sep 2017 07:52:27 -0700 (PDT) In-Reply-To: <83bmm9jt23.fsf@gnu.org> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4003:c06::236 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.org gmane.emacs.devel:218409 Archived-At: --001a113dd4344f64b3055963c612 Content-Type: text/plain; charset="UTF-8" Eli Zaretskii schrieb am So., 17. Sep. 2017 um 16:31 Uhr: > > Cc: andrewjmoreton@gmail.com, emacs-devel@gnu.org > > From: Paul Eggert > > Date: Sun, 17 Sep 2017 00:01:09 -0700 > > > > Why was the attached patch needed? What warning did it suppress? > > I wrote about that in > > http://lists.gnu.org/archive/html/emacs-devel/2017-09/msg00448.html > > The warning is this: > > ../../emacs/src/data.c: In function 'minmax_driver': > ../../emacs/src/data.c:3022:9: warning: 'accum.i' may be used > uninitialized in this function [-Wmaybe-uninitialized] > return accum; > ^~~~~ > > Which seems to mean that even eassume is sometimes not enough to > convince GCC 7 that the code is correct: > > static Lisp_Object > minmax_driver (ptrdiff_t nargs, Lisp_Object *args, > enum Arith_Comparison comparison) > { > eassume (0 < nargs); <<<<<<<<<<<<<<<<<<<<<<< > Lisp_Object accum; > for (ptrdiff_t argnum = 0; argnum < nargs; argnum++) > { > Lisp_Object val = args[argnum]; > CHECK_NUMBER_OR_FLOAT_COERCE_MARKER (val); > if (argnum == 0 || !NILP (arithcompare (val, accum, comparison))) > accum = val; > else if (FLOATP (accum) && isnan (XFLOAT_DATA (accum))) > return accum; > } > return accum; > } > > Since nargs > 0, the loop is always entered, but GCC seems to miss that. > How about rewriting the function body like this: { Lisp_Object accum = args[0]; CHECK_NUMBER_OR_FLOAT_COERCE_MARKER (accum); for (ptrdiff_t argnum = 1; ...) { if (FLOATP (accum) && isnan (...)) break; ... } return accum; } --001a113dd4344f64b3055963c612 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable


Eli Za= retskii <eliz@gnu.org> schrieb am= So., 17. Sep. 2017 um 16:31=C2=A0Uhr:
> Cc: = andrewjmoreton@gmail.com, emacs-devel@gnu.org
> From: Paul Eggert <eggert@cs.ucla.edu>
> Date: Sun, 17 Sep 2017 00:01:09 -0700
>
> Why was the attached patch needed? What warning did it suppress?

I wrote about that in

=C2=A0 http://lists.gnu.org/archi= ve/html/emacs-devel/2017-09/msg00448.html

The warning is this:

=C2=A0 ../../emacs/src/data.c: In function 'minmax_driver':
=C2=A0 ../../emacs/src/data.c:3022:9: warning: 'accum.i' may be use= d uninitialized in this function [-Wmaybe-uninitialized]
=C2=A0 return accum;
=C2=A0 ^~~~~

Which seems to mean that even eassume is sometimes not enough to
convince GCC 7 that the code is correct:

=C2=A0 static Lisp_Object
=C2=A0 minmax_driver (ptrdiff_t nargs, Lisp_Object *args,
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0enum Arith_Co= mparison comparison)
=C2=A0 {
=C2=A0 =C2=A0 eassume (0 < nargs);=C2=A0 <<<<<<<<= ;<<<<<<<<<<<<<<<
=C2=A0 =C2=A0 Lisp_Object accum;
=C2=A0 =C2=A0 for (ptrdiff_t argnum =3D 0; argnum < nargs; argnum++)
=C2=A0 =C2=A0 =C2=A0 {
=C2=A0 =C2=A0 =C2=A0 =C2=A0 Lisp_Object val =3D args[argnum];
=C2=A0 =C2=A0 =C2=A0 =C2=A0 CHECK_NUMBER_OR_FLOAT_COERCE_MARKER (val);
=C2=A0 =C2=A0 =C2=A0 =C2=A0 if (argnum =3D=3D 0 || !NILP (arithcompare (val= , accum, comparison)))
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 accum =3D val;
=C2=A0 =C2=A0 =C2=A0 =C2=A0 else if (FLOATP (accum) && isnan (XFLOA= T_DATA (accum)))
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 return accum;
=C2=A0 =C2=A0 =C2=A0 }
=C2=A0 =C2=A0 return accum;
=C2=A0 }

Since nargs > 0, the loop is always entered, but GCC seems to miss that.=

How about rewriting the function body like= this:

{
=C2=A0 Lisp_Object accum =3D ar= gs[0];
=C2=A0 CHECK_NUMBER_OR_FLOAT_COERCE_MARKER (accum);
<= div>=C2=A0 for (ptrdiff_t argnum =3D 1; ...)
=C2=A0 =C2=A0 {
=C2=A0 =C2=A0 =C2=A0 if (FLOATP (accum) && isnan (...)) break= ;
=C2=A0 =C2=A0 =C2=A0 ...
=C2=A0 =C2=A0 }
= =C2=A0 return accum;
}=C2=A0
--001a113dd4344f64b3055963c612--