From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Paul Eggert Newsgroups: gmane.emacs.devel Subject: Re: [PATCH] Clean up a couple of compiler warnings Date: Sat, 20 May 2017 23:07:34 -0700 Organization: UCLA Computer Science Department Message-ID: References: <20170518202450.75747-1-phst@google.com> NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------0059A2D60E691C2630E32BE1" X-Trace: blaine.gmane.org 1495346874 6894 195.159.176.226 (21 May 2017 06:07:54 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Sun, 21 May 2017 06:07:54 +0000 (UTC) User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.1.1 To: Philipp Stephani , Philipp Stephani , emacs-devel@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Sun May 21 08:07:50 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 1dCK1s-0001fw-OQ for ged-emacs-devel@m.gmane.org; Sun, 21 May 2017 08:07:48 +0200 Original-Received: from localhost ([::1]:36500 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dCK1y-0006ft-CQ for ged-emacs-devel@m.gmane.org; Sun, 21 May 2017 02:07:54 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:36131) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dCK1o-0006fm-LC for emacs-devel@gnu.org; Sun, 21 May 2017 02:07:46 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dCK1l-0007cT-81 for emacs-devel@gnu.org; Sun, 21 May 2017 02:07:44 -0400 Original-Received: from zimbra.cs.ucla.edu ([131.179.128.68]:45078) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dCK1k-0007XC-Th for emacs-devel@gnu.org; Sun, 21 May 2017 02:07:41 -0400 Original-Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id B542A160051; Sat, 20 May 2017 23:07:38 -0700 (PDT) Original-Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id RsWOjWGwfHCA; Sat, 20 May 2017 23:07:34 -0700 (PDT) Original-Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id CBC2316007F; Sat, 20 May 2017 23:07:34 -0700 (PDT) X-Virus-Scanned: amavisd-new at zimbra.cs.ucla.edu Original-Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id qcjqgnO58Aaq; Sat, 20 May 2017 23:07:34 -0700 (PDT) Original-Received: from [192.168.1.9] (unknown [47.153.188.248]) by zimbra.cs.ucla.edu (Postfix) with ESMTPSA id A217B160051; Sat, 20 May 2017 23:07:34 -0700 (PDT) In-Reply-To: Content-Language: en-US X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 131.179.128.68 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:215036 Archived-At: This is a multi-part message in MIME format. --------------0059A2D60E691C2630E32BE1 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: quoted-printable On 05/19/2017 02:31 AM, Philipp Stephani wrote: > Apparently on some systems mbstate_t is a nested struct, and the compil= er=20 > warns about missing braces. Note that memset to initialize a mbstate_t = is=20 > explicitly recommended in the libc manual: Yes, of course memset works (which is all that the glibc manual really sa= ys).=20 It's just that it's verbose and the verbosity isn't needed. I guess the problem here is that clang's -Wmissing-braces option generate= s false=20 alarms. The Clang folks may fix that someday. In the meantime I installed= the=20 first attached patch, to turn off that option for Clang. > you could now add > eassert (handlerlist =3D=3D *dummy); > or so to the cleanup function. Thanks, good idea, installed in the 2nd attached patch. > I think none of the four branches there work for macOS.=20 > https://developer.apple.com/legacy/library/documentation/Darwin/Referen= ce/ManPages/man2/pathconf.2.html is=20 > silent about case sensitivity, so we're already relying on some undocum= ented=20 > functionality. The getattrlist method is at least documented=20 > (https://developer.apple.com/legacy/library/documentation/Darwin/Refere= nce/ManPages/man2/getattrlist.2.html),=20 > it just needs to be implemented correctly. I'd suggest to only use a wo= rking=20 > version of getattrlist on macOS. I installed that in the 3rd attached patch, at least I hope it works. But= better=20 yet, let's drop the getattrlist stuff entirely, as it doesn't seem to be = needed=20 and is just wasting our maintenance time. I installed that in the 4th att= ached=20 patch. --------------0059A2D60E691C2630E32BE1 Content-Type: text/x-patch; name="0001-Port-enable-gcc-warnings-to-clang-3.9.1.patch" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="0001-Port-enable-gcc-warnings-to-clang-3.9.1.patch" =46rom a5acb3701a7b4ab8b82aede308d28a47a383ae9c Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Fri, 19 May 2017 16:05:31 -0700 Subject: [PATCH 1/2] Port --enable-gcc-warnings to clang 3.9.1 * configure.ac (WERROR_CFLAGS): Omit -Wmissing-braces for Clang, to shut off a false alarm. Problem reportd by Philipp Stephani in: http://lists.gnu.org/archive/html/emacs-devel/2017-05/msg00521.html --- configure.ac | 1 + 1 file changed, 1 insertion(+) diff --git a/configure.ac b/configure.ac index 03542a6..12e44d9 100644 --- a/configure.ac +++ b/configure.ac @@ -964,6 +964,7 @@ AC_DEFUN if test $emacs_cv_clang =3D yes; then nw=3D"$nw -Wcast-align" nw=3D"$nw -Wdouble-promotion" + nw=3D"$nw -Wmissing-braces" fi =20 # This causes too much noise in the MinGW build --=20 2.7.4 --------------0059A2D60E691C2630E32BE1 Content-Type: text/x-patch; name="0002-Add-handlerlist-assertion-to-module-code.patch" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="0002-Add-handlerlist-assertion-to-module-code.patch" =46rom 7d00410af69b3cbbf0e8fc9765f3bf9f5616286d Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Fri, 19 May 2017 16:15:07 -0700 Subject: [PATCH 2/2] Add handlerlist assertion to module code * src/emacs-module.c (module_reset_handlerlist): Check handlerlist. Suggested by Philipp Stephani in: http://lists.gnu.org/archive/html/emacs-devel/2017-05/msg00521.html --- src/emacs-module.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/emacs-module.c b/src/emacs-module.c index 5aa8a88..0bc1b6c 100644 --- a/src/emacs-module.c +++ b/src/emacs-module.c @@ -918,10 +918,12 @@ finalize_environment (struct emacs_env_private *env= ) /* Must be called after setting up a handler immediately before returning from the function. See the comments in lisp.h and the code in eval.c for details. The macros below arrange for this - function to be called automatically. DUMMY is ignored. */ + function to be called automatically. PHANDLERLIST points to a word + containing the handler list, for sanity checking. */ static void -module_reset_handlerlist (struct handler *const *dummy) +module_reset_handlerlist (struct handler *const *phandlerlist) { + eassert (handlerlist =3D=3D *phandlerlist); handlerlist =3D handlerlist->next; } =20 --=20 2.7.4 --------------0059A2D60E691C2630E32BE1 Content-Type: text/x-patch; name="0003-Narrow-DARWIN_OS_CASE_SENSITIVE_FIXME-to-1-choice.patch" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename*0="0003-Narrow-DARWIN_OS_CASE_SENSITIVE_FIXME-to-1-choice.patch" =46rom 075bd64609446e741a6efbcd6cd6e232db8d1df6 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Sat, 20 May 2017 22:51:32 -0700 Subject: [PATCH 1/2] Narrow DARWIN_OS_CASE_SENSITIVE_FIXME to 1 choice * etc/PROBLEMS: Document this (Bug#24441). * src/fileio.c (file_name_case_insensitive_p): Prefer pathconf with _PC_CASE_SENSITIVE, if it works, to DARWIN_OS_CASE_SENSITIVE_FIXME code. Support just one method for DARWIN_OS_CASE_SENSITIVE_FIXME, which matches the Apple documentation more precisely. --- etc/PROBLEMS | 5 ++--- src/fileio.c | 68 ++++++++++++++++++++----------------------------------= ------ 2 files changed, 24 insertions(+), 49 deletions(-) diff --git a/etc/PROBLEMS b/etc/PROBLEMS index e415887..ff88aa3 100644 --- a/etc/PROBLEMS +++ b/etc/PROBLEMS @@ -2486,9 +2486,8 @@ If you do, please send it to bug-gnu-emacs@gnu.org = so we can list it here. The implementation of that function on Mac OS X uses pathconf with the _PC_CASE_SENSITIVE flag. There have been reports that this use of pathconf does not work reliably. If you have a problem, please -recompile Emacs with -D DARWIN_OS_CASE_SENSITIVE_FIXME=3D1 or --D DARWIN_OS_CASE_SENSITIVE_FIXME=3D2, and file a bug report saying -whether this fixed your problem. +recompile Emacs with -D DARWIN_OS_CASE_SENSITIVE_FIXME, and file a bug +report saying whether this fixed your problem. =20 * Build-time problems =20 diff --git a/src/fileio.c b/src/fileio.c index e5e3505..17659b6 100644 --- a/src/fileio.c +++ b/src/fileio.c @@ -2256,65 +2256,41 @@ static bool file_name_case_insensitive_p (const char *filename) { /* Use pathconf with _PC_CASE_INSENSITIVE or _PC_CASE_SENSITIVE if - those flags are available. As of this writing (2016-11-14), + those flags are available. As of this writing (2017-05-20), Cygwin is the only platform known to support the former (starting - with Cygwin-2.6.1), and Mac OS X is the only platform known to - support the latter. - - There have been reports that pathconf with _PC_CASE_SENSITIVE - does not work reliably on Mac OS X. If you have a problem, - please recompile Emacs with -D DARWIN_OS_CASE_SENSITIVE_FIXME=3D1 o= r - -D DARWIN_OS_CASE_SENSITIVE_FIXME=3D2, and file a bug report saying= - whether this fixed your problem. */ + with Cygwin-2.6.1), and macOS is the only platform known to + support the latter. */ =20 #ifdef _PC_CASE_INSENSITIVE int res =3D pathconf (filename, _PC_CASE_INSENSITIVE); if (res >=3D 0) return res > 0; -#elif defined _PC_CASE_SENSITIVE && !defined DARWIN_OS_CASE_SENSITIVE_FI= XME +#elif defined _PC_CASE_SENSITIVE int res =3D pathconf (filename, _PC_CASE_SENSITIVE); if (res >=3D 0) return res =3D=3D 0; #endif =20 -#ifdef DARWIN_OS -# ifndef DARWIN_OS_CASE_SENSITIVE_FIXME - int DARWIN_OS_CASE_SENSITIVE_FIXME =3D 0; -# endif + /* There have been reports that pathconf with _PC_CASE_SENSITIVE + does not work reliably on Mac OS X. If you have a problem, + please recompile Emacs with -D DARWIN_OS_CASE_SENSITIVE_FIXME=3D1 o= r + -D DARWIN_OS_CASE_SENSITIVE_FIXME=3D2, and file a bug report saying= + whether this fixed your problem. */ =20 - if (DARWIN_OS_CASE_SENSITIVE_FIXME =3D=3D 1) - { - /* This is based on developer.apple.com's getattrlist man page. *= / - struct attrlist alist =3D {.volattr =3D ATTR_VOL_CAPABILITIES}; - vol_capabilities_attr_t vcaps; - if (getattrlist (filename, &alist, &vcaps, sizeof vcaps, 0) =3D=3D= 0) - { - if (vcaps.valid[VOL_CAPABILITIES_FORMAT] & VOL_CAP_FMT_CASE_SENSITIVE= ) - return ! (vcaps.capabilities[VOL_CAPABILITIES_FORMAT] - & VOL_CAP_FMT_CASE_SENSITIVE); - } - } -# if DARWIN_OS_CASE_SENSITIVE_FIXME =3D=3D 2 - { - /* The following is based on - http://lists.apple.com/archives/darwin-dev/2007/Apr/msg00010.html. - It is normally not even compiled, since it runs afoul of - static checking. See: - http://lists.gnu.org/archive/html/emacs-devel/2017-05/msg00495.html - */ - struct attrlist alist; - unsigned char buffer[sizeof (vol_capabilities_attr_t) + sizeof (si= ze_t)]; - - memset (&alist, 0, sizeof (alist)); - alist.volattr =3D ATTR_VOL_CAPABILITIES; - if (getattrlist (filename, &alist, buffer, sizeof (buffer), 0) - || !(alist.volattr & ATTR_VOL_CAPABILITIES)) - return 0; - vol_capabilities_attr_t *vcaps =3D buffer; - return !(vcaps->capabilities[0] & VOL_CAP_FMT_CASE_SENSITIVE); - } +#ifdef DARWIN_OS_CASE_SENSITIVE_FIXME +# ifdef VOL_CAP_FMT_CASE_SENSITIVE + { + struct attrlist alist =3D {.bitmapcount =3D ATTR_BIT_MAP_COUNT, + .volattr =3D ATTR_VOL_INFO | ATTR_VOL_CAPABILITIES}; + struct { uint32_t len; vol_capabilities_attr_t caps; } vcaps + __attribute__ ((aligned (4), packed)); + int i =3D VOL_CAPABILITIES_FORMAT; + if (getattrlist (filename, &alist, &vcaps, sizeof vcaps, 0) =3D=3D 0= + && (vcaps.caps.valid[i] & VOL_CAP_FMT_CASE_SENSITIVE)) + return ! (vcaps.caps.capabilities[i] & VOL_CAP_FMT_CASE_SENSITIVE)= ; + } # endif -#endif /* DARWIN_OS */ +#endif =20 #if defined CYGWIN || defined DOS_NT return true; --=20 2.7.4 --------------0059A2D60E691C2630E32BE1 Content-Type: text/x-patch; name="0004-Remove-DARWIN_OS_CASE_SENSITIVE_FIXME-code.patch" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="0004-Remove-DARWIN_OS_CASE_SENSITIVE_FIXME-code.patch" =46rom b35293dfd0e9dd95a88ac01051655d0d2d105992 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Sat, 20 May 2017 22:55:17 -0700 Subject: [PATCH 2/2] Remove DARWIN_OS_CASE_SENSITIVE_FIXME code It does not appear to be needed (Bug#24441). * etc/PROBLEMS: Remove DARWIN_OS_CASE_SENSITIVE_FIXME stuff. * src/fileio.c (file_name_case_insensitive_p): Remove DARWIN_OS_CASE_SENSITIVE_FIXME code. --- etc/PROBLEMS | 10 ---------- src/fileio.c | 21 --------------------- 2 files changed, 31 deletions(-) diff --git a/etc/PROBLEMS b/etc/PROBLEMS index ff88aa3..593eb6b 100644 --- a/etc/PROBLEMS +++ b/etc/PROBLEMS @@ -2479,16 +2479,6 @@ please call support for your X-server and see if y= ou can get a fix. If you do, please send it to bug-gnu-emacs@gnu.org so we can list it her= e. =20 =20 -* Runtime problems specific to Mac OS X - -** On Mac OS X, file-name-case-insensitive-p may be unreliable - -The implementation of that function on Mac OS X uses pathconf with the -_PC_CASE_SENSITIVE flag. There have been reports that this use of -pathconf does not work reliably. If you have a problem, please -recompile Emacs with -D DARWIN_OS_CASE_SENSITIVE_FIXME, and file a bug -report saying whether this fixed your problem. - * Build-time problems =20 ** Configuration diff --git a/src/fileio.c b/src/fileio.c index 17659b6..c21056e 100644 --- a/src/fileio.c +++ b/src/fileio.c @@ -2271,27 +2271,6 @@ file_name_case_insensitive_p (const char *filename= ) return res =3D=3D 0; #endif =20 - /* There have been reports that pathconf with _PC_CASE_SENSITIVE - does not work reliably on Mac OS X. If you have a problem, - please recompile Emacs with -D DARWIN_OS_CASE_SENSITIVE_FIXME=3D1 o= r - -D DARWIN_OS_CASE_SENSITIVE_FIXME=3D2, and file a bug report saying= - whether this fixed your problem. */ - -#ifdef DARWIN_OS_CASE_SENSITIVE_FIXME -# ifdef VOL_CAP_FMT_CASE_SENSITIVE - { - struct attrlist alist =3D {.bitmapcount =3D ATTR_BIT_MAP_COUNT, - .volattr =3D ATTR_VOL_INFO | ATTR_VOL_CAPABILITIES}; - struct { uint32_t len; vol_capabilities_attr_t caps; } vcaps - __attribute__ ((aligned (4), packed)); - int i =3D VOL_CAPABILITIES_FORMAT; - if (getattrlist (filename, &alist, &vcaps, sizeof vcaps, 0) =3D=3D 0= - && (vcaps.caps.valid[i] & VOL_CAP_FMT_CASE_SENSITIVE)) - return ! (vcaps.caps.capabilities[i] & VOL_CAP_FMT_CASE_SENSITIVE)= ; - } -# endif -#endif - #if defined CYGWIN || defined DOS_NT return true; #else --=20 2.7.4 --------------0059A2D60E691C2630E32BE1--