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: 27bb4de72b * Port cleanup attribute to Oracle Studio 12.5 Date: Thu, 15 Jun 2017 11:46:14 -0700 Organization: UCLA Computer Science Department Message-ID: References: NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------1C0E9150DC941E4EA7200690" X-Trace: blaine.gmane.org 1497552396 13694 195.159.176.226 (15 Jun 2017 18:46:36 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Thu, 15 Jun 2017 18:46:36 +0000 (UTC) User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.1.0 To: Philipp Stephani , Emacs developers Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Thu Jun 15 20:46:26 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 1dLZmj-00030a-Og for ged-emacs-devel@m.gmane.org; Thu, 15 Jun 2017 20:46:26 +0200 Original-Received: from localhost ([::1]:55434 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dLZmo-0003dj-Uw for ged-emacs-devel@m.gmane.org; Thu, 15 Jun 2017 14:46:30 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:49870) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dLZmh-0003dd-Mf for emacs-devel@gnu.org; Thu, 15 Jun 2017 14:46:25 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dLZmd-0002Bh-NI for emacs-devel@gnu.org; Thu, 15 Jun 2017 14:46:23 -0400 Original-Received: from zimbra.cs.ucla.edu ([131.179.128.68]:51338) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dLZmd-0002BB-D9 for emacs-devel@gnu.org; Thu, 15 Jun 2017 14:46:19 -0400 Original-Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id C478F1600A1; Thu, 15 Jun 2017 11:46:17 -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 7tZ6SxqVY9qm; Thu, 15 Jun 2017 11:46:16 -0700 (PDT) Original-Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 2C9F81600A6; Thu, 15 Jun 2017 11:46:16 -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 WdlwoyZiYcDN; Thu, 15 Jun 2017 11:46:16 -0700 (PDT) Original-Received: from Penguin.CS.UCLA.EDU (Penguin.CS.UCLA.EDU [131.179.64.200]) by zimbra.cs.ucla.edu (Postfix) with ESMTPSA id 66B101600A1; Thu, 15 Jun 2017 11:46:15 -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:215648 Archived-At: This is a multi-part message in MIME format. --------------1C0E9150DC941E4EA7200690 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit On 06/15/2017 05:54 AM, Philipp Stephani wrote: > I've considered a couple of options. I think the simplest and most > portable one would be to compile as C++, which has destructors built > into the language. That would require some autoconf and makefile hacking, but it would work. That is, if modules are enabled, and __attribute__ ((cleanup)) is not available but a C++ compiler is available, then the build process could use the C++ compiler. Admittedly this is low priority. > How about using #pragma clang diagnostic push/pop/ignore to ignore the > warnings in the specific statements where they arise and we know that > they are false positives? I'd much prefer that over disabling them > globally in configure, because most of the time the warnings are useful. Although many warnings are useful, in my experience these particular warnings are not useful for Emacs. That is, the hassle they cause by false alarms costs more than the benefits of actual bugs that they fix. It's OK to disable such warnings globally. > > And I'm still puzzled as to why you're getting the Clang warnings > but I > am not. Are you using an older Clang? Are you passing it extra warning > options? > > > I'm using the Apple fork on macOS. It's mostly identical to upstream > Clang and compiles Emacs just fine, but it is a fork and not 100% > identical. I also get some of the warnings only when building with -O3 > (haven't checked other optimization levels). I just now applied the attached patch, configured with: ./configure --enable-gcc-warnings CC=clang CFLAGS='-O3' and had no problems on Fedora 25. If you have a problem with this patch, can you please send relevant output from 'clang --version' and 'make V=1'? Here's the output for me: clang version 3.9.1 (tags/RELEASE_391/final) Target: x86_64-unknown-linux-gnu Thread model: posix InstalledDir: /usr/bin make -C lib all make[1]: Entering directory '/home/eggert/src/gnu/emacs/static-checking/lib' clang -c -MMD -MF deps/strftime.d -MP -fno-common -W -Wabi -Waddress -Wall -Wattributes -Wbuiltin-macro-redefined -Wchar-subscripts -Wcomment -Wcomments -Wdangling-else -Wdate-time -Wdeprecated -Wdeprecated-declarations -Wdisabled-optimization -Wdiv-by-zero -Wduplicate-decl-specifier -Wempty-body -Wendif-labels -Wenum-compare -Wexpansion-to-defined -Wextra -Wformat-extra-args -Wformat-security -Wformat-y2k -Wformat-zero-length -Wignored-attributes -Wignored-qualifiers -Wimplicit -Wimplicit-function-declaration -Wimplicit-int -Wincompatible-pointer-types -Winit-self -Wint-conversion -Wint-to-pointer-cast -Winvalid-pch -Wlogical-not-parentheses -Wmain -Wmissing-declarations -Wmissing-include-dirs -Wmissing-prototypes -Wmultichar -Wnarrowing -Wnested-externs -Wnonnull -Wnull-dereference -Wodr -Wold-style-definition -Woverflow -Wpacked -Wparentheses -Wpointer-arith -Wpointer-sign -Wpointer-to-int-cast -Wpragmas -Wreturn-type -Wsequence-point -Wshift-count-negative -Wshift-count-overflow -Wshift-negative-value -Wsizeof-array-argument -Wsizeof-pointer-memaccess -Wstrict-aliasing -Wstrict-prototypes -Wswitch-bool -Wtautological-compare -Wtrigraphs -Wuninitialized -Wunknown-pragmas -Wunused -Wunused-function -Wunused-label -Wunused-local-typedefs -Wunused-result -Wunused-value -Wunused-variable -Wvarargs -Wvariadic-macros -Wvolatile-register-var -Wwrite-strings -Wno-missing-field-initializers -Wredundant-decls -Wno-missing-field-initializers -Wno-sign-compare -Wno-type-limits -Wno-unused-parameter -Wno-format-nonliteral -Wno-missing-braces -Wno-tautological-compare -Wno-tautological-constant-out-of-range-compare -Werror -O3 -I. -I../src -I. -I./../src strftime.c [no warnings] ... clang -fno-common -W -Wabi -Waddress -Wall -Wattributes -Wbuiltin-macro-redefined -Wchar-subscripts -Wcomment -Wcomments -Wdangling-else -Wdate-time -Wdeprecated -Wdeprecated-declarations -Wdisabled-optimization -Wdiv-by-zero -Wduplicate-decl-specifier -Wempty-body -Wendif-labels -Wenum-compare -Wexpansion-to-defined -Wextra -Wformat-extra-args -Wformat-security -Wformat-y2k -Wformat-zero-length -Wignored-attributes -Wignored-qualifiers -Wimplicit -Wimplicit-function-declaration -Wimplicit-int -Wincompatible-pointer-types -Winit-self -Wint-conversion -Wint-to-pointer-cast -Winvalid-pch -Wlogical-not-parentheses -Wmain -Wmissing-declarations -Wmissing-include-dirs -Wmissing-prototypes -Wmultichar -Wnarrowing -Wnested-externs -Wnonnull -Wnull-dereference -Wodr -Wold-style-definition -Woverflow -Wpacked -Wparentheses -Wpointer-arith -Wpointer-sign -Wpointer-to-int-cast -Wpragmas -Wreturn-type -Wsequence-point -Wshift-count-negative -Wshift-count-overflow -Wshift-negative-value -Wsizeof-array-argument -Wsizeof-pointer-memaccess -Wstrict-aliasing -Wstrict-prototypes -Wswitch-bool -Wtautological-compare -Wtrigraphs -Wuninitialized -Wunknown-pragmas -Wunused -Wunused-function -Wunused-label -Wunused-local-typedefs -Wunused-result -Wunused-value -Wunused-variable -Wvarargs -Wvariadic-macros -Wvolatile-register-var -Wwrite-strings -Wno-missing-field-initializers -Wredundant-decls -Wno-missing-field-initializers -Wno-sign-compare -Wno-type-limits -Wno-unused-parameter -Wno-format-nonliteral -Wno-missing-braces -Wno-tautological-compare -Wno-tautological-constant-out-of-range-compare -Werror -I. -I../src -I../lib -I. -I./../src -I./../lib -O3 make-docfile.c ../lib/libgnu.a -o make-docfile [no warnings] ... make[1]: Leaving directory '/home/eggert/src/gnu/emacs/static-checking/lib-src' make -C src VCSWITNESS='$(srcdir)/../.git/logs/HEAD' all make[1]: Entering directory '/home/eggert/src/gnu/emacs/static-checking/src' ... clang -c -Demacs -I. -I. -I../lib -I../lib -pthread -isystem /usr/include/gtk-3.0 -isystem /usr/include/at-spi2-atk/2.0 -isystem /usr/include/at-spi-2.0 -isystem /usr/include/dbus-1.0 -isystem /usr/lib64/dbus-1.0/include -isystem /usr/include/gtk-3.0 -isystem /usr/include/gio-unix-2.0/ -isystem /usr/include/cairo -isystem /usr/include/pango-1.0 -isystem /usr/include/harfbuzz -isystem /usr/include/pango-1.0 -isystem /usr/include/atk-1.0 -isystem /usr/include/cairo -isystem /usr/include/pixman-1 -isystem /usr/include/freetype2 -isystem /usr/include/libpng16 -isystem /usr/include/freetype2 -isystem /usr/include/libdrm -isystem /usr/include/libpng16 -isystem /usr/include/gdk-pixbuf-2.0 -isystem /usr/include/libpng16 -isystem /usr/include/glib-2.0 -isystem /usr/lib64/glib-2.0/include -isystem /usr/include/freetype2 -isystem /usr/include/libpng16 -isystem /usr/include/freetype2 -isystem /usr/include/libpng16 -isystem /usr/include/alsa -pthread -isystem /usr/include/librsvg-2.0 -isystem /usr/include/gdk-pixbuf-2.0 -isystem /usr/include/libpng16 -isystem /usr/include/cairo -isystem /usr/include/glib-2.0 -isystem /usr/lib64/glib-2.0/include -isystem /usr/include/pixman-1 -isystem /usr/include/freetype2 -isystem /usr/include/libpng16 -isystem /usr/include/freetype2 -isystem /usr/include/libdrm -isystem /usr/include/libpng16 -isystem /usr/include/libpng16 -isystem /usr/include/libxml2 -isystem /usr/include/dbus-1.0 -isystem /usr/lib64/dbus-1.0/include -pthread -isystem /usr/include/glib-2.0 -isystem /usr/lib64/glib-2.0/include -pthread -isystem /usr/include/gconf/2 -isystem /usr/include/dbus-1.0 -isystem /usr/lib64/dbus-1.0/include -isystem /usr/include/glib-2.0 -isystem /usr/lib64/glib-2.0/include -isystem /usr/include/glib-2.0 -isystem /usr/lib64/glib-2.0/include -isystem /usr/include/freetype2 -isystem /usr/include/libpng16 -isystem /usr/include/freetype2 -isystem /usr/include/libpng16 -isystem /usr/include/freetype2 -isystem /usr/include/libpng16 -isystem /usr/include/freetype2 -isystem /usr/include/libpng16 -MMD -MF deps/emacs.d -MP -isystem /usr/include/p11-kit-1 -Werror -fno-common -W -Wabi -Waddress -Wall -Wattributes -Wbuiltin-macro-redefined -Wchar-subscripts -Wcomment -Wcomments -Wdangling-else -Wdate-time -Wdeprecated -Wdeprecated-declarations -Wdisabled-optimization -Wdiv-by-zero -Wduplicate-decl-specifier -Wempty-body -Wendif-labels -Wenum-compare -Wexpansion-to-defined -Wextra -Wformat-extra-args -Wformat-security -Wformat-y2k -Wformat-zero-length -Wignored-attributes -Wignored-qualifiers -Wimplicit -Wimplicit-function-declaration -Wimplicit-int -Wincompatible-pointer-types -Winit-self -Wint-conversion -Wint-to-pointer-cast -Winvalid-pch -Wlogical-not-parentheses -Wmain -Wmissing-declarations -Wmissing-include-dirs -Wmissing-prototypes -Wmultichar -Wnarrowing -Wnested-externs -Wnonnull -Wnull-dereference -Wodr -Wold-style-definition -Woverflow -Wpacked -Wparentheses -Wpointer-arith -Wpointer-sign -Wpointer-to-int-cast -Wpragmas -Wreturn-type -Wsequence-point -Wshift-count-negative -Wshift-count-overflow -Wshift-negative-value -Wsizeof-array-argument -Wsizeof-pointer-memaccess -Wstrict-aliasing -Wstrict-prototypes -Wswitch-bool -Wtautological-compare -Wtrigraphs -Wuninitialized -Wunknown-pragmas -Wunused -Wunused-function -Wunused-label -Wunused-local-typedefs -Wunused-result -Wunused-value -Wunused-variable -Wvarargs -Wvariadic-macros -Wvolatile-register-var -Wwrite-strings -Wno-missing-field-initializers -Wredundant-decls -Wno-missing-field-initializers -Wno-sign-compare -Wno-type-limits -Wno-unused-parameter -Wno-format-nonliteral -Wno-missing-braces -Wno-tautological-compare -Wno-tautological-constant-out-of-range-compare -O3 emacs.c [no warnings] ... --------------1C0E9150DC941E4EA7200690 Content-Type: text/x-patch; name="nowarnings.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="nowarnings.patch" diff --git a/lib-src/make-docfile.c b/lib-src/make-docfile.c index 85bcc8b..9470bd6 100644 --- a/lib-src/make-docfile.c +++ b/lib-src/make-docfile.c @@ -224,11 +224,7 @@ put_filename (char *filename) for (tmp = filename; *tmp; tmp++) { - /* Use separate variable to silence a Clang warning on macOS. - Clang takes offence of the additional set of parantheses - generated by the macro. */ - bool is_sep = IS_DIRECTORY_SEP (*tmp); - if (is_sep) + if (IS_DIRECTORY_SEP (*tmp)) filename = tmp + 1; } diff --git a/lib/strftime.c b/lib/strftime.c index 18c899d..99bee4e 100644 --- a/lib/strftime.c +++ b/lib/strftime.c @@ -1123,23 +1123,18 @@ __strftime_internal (STREAM_OR_CHAR_T *s, STRFTIME_ARG (size_t maxsize) if (modifier == L_('E')) goto bad_format; - { - /* Use a new variable here instead of reusing number_value - because Clang complains about the self-assignment - generated by DO_NUMBER. */ - ptrdiff_t n = ns; - if (width == -1) - width = 9; - else - { - /* Take an explicit width less than 9 as a precision. */ - int j; - for (j = width; j < 9; j++) - n /= 10; - } + number_value = ns; + if (width == -1) + width = 9; + else + { + /* Take an explicit width less than 9 as a precision. */ + int j; + for (j = width; j < 9; j++) + number_value /= 10; + } - DO_NUMBER (width, n); - } + DO_NUMBER (width, number_value); #endif case L_('n'): diff --git a/src/emacs.c b/src/emacs.c index 08430de..da8df1b 100644 --- a/src/emacs.c +++ b/src/emacs.c @@ -832,7 +832,7 @@ main (int argc, char **argv) (https://www.cygwin.com/ml/cygwin/2015-07/msg00096.html). */ struct rlimit rlim; if (getrlimit (RLIMIT_STACK, &rlim) == 0 - && rlim.rlim_cur <= LONG_MAX) + && 0 <= rlim.rlim_cur && rlim.rlim_cur <= LONG_MAX) { rlim_t lim = rlim.rlim_cur; @@ -866,7 +866,7 @@ main (int argc, char **argv) right thing anyway. */ long pagesize = getpagesize (); newlim += pagesize - 1; - if (rlim.rlim_max < newlim) + if (0 <= rlim.rlim_max && rlim.rlim_max < newlim) newlim = rlim.rlim_max; newlim -= newlim % pagesize; --------------1C0E9150DC941E4EA7200690--