From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-Status: No, score=-4.0 required=3.0 tests=AWL,BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED, RCVD_IN_MSPIKE_H4,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_PASS shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dcvr.yhbt.net (Postfix) with ESMTPS id 8534B1F5AE for ; Thu, 2 Jul 2020 00:27:08 +0000 (UTC) Received: from localhost ([::1]:36158 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jqn4F-0002pz-E9 for normalperson@yhbt.net; Wed, 01 Jul 2020 20:27:07 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54064) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jqn4B-0002oc-S6; Wed, 01 Jul 2020 20:27:03 -0400 Received: from zimbra.cs.ucla.edu ([131.179.128.68]:46352) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jqn46-0000gB-IR; Wed, 01 Jul 2020 20:27:03 -0400 Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 1B76F1600EA; Wed, 1 Jul 2020 17:26:55 -0700 (PDT) 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 u9IRGSCfE3uz; Wed, 1 Jul 2020 17:26:52 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 8214D1600F0; Wed, 1 Jul 2020 17:26:52 -0700 (PDT) X-Virus-Scanned: amavisd-new at zimbra.cs.ucla.edu 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 LNgzrPn-5cqI; Wed, 1 Jul 2020 17:26:52 -0700 (PDT) Received: from [192.168.1.9] (cpe-75-82-69-226.socal.res.rr.com [75.82.69.226]) by zimbra.cs.ucla.edu (Postfix) with ESMTPSA id 41C2B1600EA; Wed, 1 Jul 2020 17:26:52 -0700 (PDT) Subject: Re: coreutils and GCC -fanalyzer From: Paul Eggert To: =?UTF-8?Q?P=c3=a1draig_Brady?= References: <77400f8a-59ca-6d02-e5b1-e01ba0619237@draigBrady.com> <4aa67590-a0c3-603d-d2b1-f0751a28df29@cs.ucla.edu> <3a074086-47f7-638f-50a8-cd7ceb46a11a@draigBrady.com> <0f92f576-bf1c-e889-3e4a-a128455b5684@cs.ucla.edu> Autocrypt: addr=eggert@cs.ucla.edu; prefer-encrypt=mutual; keydata= LS0tLS1CRUdJTiBQR1AgUFVCTElDIEtFWSBCTE9DSy0tLS0tCgptUUlOQkV5QWNtUUJFQURB QXlIMnhvVHU3cHBHNUQzYThGTVpFb243NGRDdmM0K3ExWEEySjJ0QnkycHdhVHFmCmhweHhk R0E5Smo1MFVKM1BENGJTVUVnTjh0TFowc2FuNDdsNVhUQUZMaTI0NTZjaVNsNW04c0thSGxH ZHQ5WG0KQUF0bVhxZVpWSVlYL1VGUzk2ZkR6ZjR4aEVtbS95N0xiWUVQUWRVZHh1NDd4QTVL aFRZcDVibHRGM1dZRHoxWQpnZDdneDA3QXV3cDdpdzdlTnZub0RUQWxLQWw4S1lEWnpiRE5D UUdFYnBZM2VmWkl2UGRlSStGV1FONFcra2doCnkrUDZhdTZQcklJaFlyYWV1YTdYRGRiMkxT MWVuM1NzbUUzUWpxZlJxSS9BMnVlOEpNd3N2WGUvV0szOEV6czYKeDc0aVRhcUkzQUZINmls QWhEcXBNbmQvbXNTRVNORnQ3NkRpTzFaS1FNcjlhbVZQa25qZlBtSklTcWRoZ0IxRApsRWR3 MzRzUk9mNlY4bVp3MHhmcVQ2UEtFNDZMY0ZlZnpzMGtiZzRHT1JmOHZqRzJTZjF0azVlVThN Qml5Ti9iClowM2JLTmpOWU1wT0REUVF3dVA4NGtZTGtYMndCeHhNQWhCeHdiRFZadWR6eERa SjFDMlZYdWpDT0pWeHEya2wKakJNOUVUWXVVR3FkNzVBVzJMWHJMdzYrTXVJc0hGQVlBZ1Jy NytLY3dEZ0JBZndoUEJZWDM0blNTaUhsbUxDKwpLYUhMZUNMRjVaSTJ2S20zSEVlQ1R0bE9n N3haRU9OZ3d6TCtmZEtvK0Q2U29DOFJSeEpLczhhM3NWZkk0dDZDCm5yUXp2SmJCbjZneGRn Q3U1aTI5SjFRQ1lyQ1l2cWwyVXlGUEFLK2RvOTkvMWpPWFQ0bTI4MzZqMXdBUkFRQUIKdENC UVlYVnNJRVZuWjJWeWRDQThaV2RuWlhKMFFHTnpMblZqYkdFdVpXUjFQb2tDUGdRVEFRSUFL QVVDVElCeQpaQUliQXdVSkVzd0RBQVlMQ1FnSEF3SUdGUWdDQ1FvTEJCWUNBd0VDSGdFQ0Y0 QUFDZ2tRN1pmcERtS3FmalJSCkd3LytJajAzZGhZZllsL2dYVlJpdXpWMWdHcmJIayt0bmZy SS9DN2ZBZW9GelE1dFZnVmluU2hhUGtabzBIVFAKZjE4eDZJREVkQWlPOE1xbzF5cDBDdEht ekdNQ0o1MG80R3JnZmpscjZnLyt2dEVPS2JobGVzek4yWHBKdnB3TQoyUWdHdm4vbGFUTFV1 OFBIOWFSV1RzN3FKSlpLS0tBYjRzeFljOTJGZWhQdTZGT0QwZERpeWhsREFxNGxPVjJtCmRC cHpRYmlvam9aelFMTVF3anBnQ1RLMjU3MmVLOUVPRVF5U1VUaFhyU0l6NkFTZW5wNE5ZVEZI czl0dUpRdlgKazlnWkRkUFNsM2JwKzQ3ZEd4bHhFV0xwQklNN3pJT053NGtzNGF6Z1Q4bnZE WnhBNUlaSHR2cUJsSkxCT2JZWQowTGU2MVdwMHkzVGxCRGgycWRLOGVZTDQyNlc0c2NFTVN1 aWc1Z2I4T0F0UWlCVzZrMnNHVXh4ZWl2OG92V3U4CllBWmdLSmZ1b1dJK3VSbk1FZGRydVk4 SnNvTTU0S2FLdlppa2tLczJiZzFuZHRMVnpIcEo2cUZaQzdRVmplSFUKaDYvQm1ndmRqV1Ba WUZUdE4rS0E5Q1dYM0dRS0tnTjN1dTk4OHl6bkQ3TG5COThUNEVVSDFIQS9HbmZCcU1WMQpn cHpUdlBjNHFWUWluQ21Ja0VGcDgzemwrRzVmQ2pKSjNXN2l2ekNuWW80S2hLTHBGVW05N29r VEtSMkxXM3haCnpFVzRjTFNXTzM4N01USzNDekRPeDVxZTZzNGE5MVp1Wk0vai9UUWRUTERh cU5uODNrQTRIcTQ4VUhYWXhjSWgKK05kOGsvM3c2bEZ1b0swd3JPRml5d2pMeCswdXI1am1t YmVjQkdIYzF4ZGhBRkc1QWcwRVRJQnlaQUVRQUthRgo2NzhUOXd5SDR3alRyVjFQejNjREVv U25WLzBaVXJPVDM3cDFkY0d5ai9JWHExeDY3MEhSVmFoQW1rMHNacFljCjI1UEY5RDVHUFlI RldsTmp1UFU5NnJEbmRYQjNoZWRtQlJoTGRDNGJBWGpJNERWK2JtZFZlK3EvSU1ubFpSYVYK bG05RWlNQ1ZBUjZ3MTNzUmV1N3FYa1c5cjNSd1kyQXpYc2twL3RBZTRCUktyMVptYnZpMm5i blE2ZXBFQzQycgpSYngwQjFFaGpiSVFaNUpIR2syNGlQVDdMZEJnbk5tb3M1d1lqendObGtN UUQ1VDBZZHpoazdKK1V4d0E1bTQ2Cm1PaFJEQzJyRlYvQTBnbTVUTHk4RFhqdi9Fc2M0Z1lu WWFpNlNRcW5VRVZoNUx1VjhZQ0pCbmlqcytUaXc3MXgKMWljbW42eEdJNDVFdWdKT2dlYyty THlwWWdwVnA0eDBISTVUODhxQlJZQ2t4SDNLZzhRbytFV05BOUE0TFJROQpEWDhuam9uYTBn ZjBzMDN0b2NLOGtCTjY2VW9xcVB0SEJuYzRlTWdCeW1DZmxLMTJlS2ZkMllZeG55ZzljWmF6 CldBNVZzbHZUeHBtNzZoYmc1b2lBRUgvVmcvOE14SHlBblBoZnJnd3lQcm1KRWNWQmFmZHNw Sm5ZUXhCWU5jbzIKTEZQSWhsT3ZXaDhyNGF0K3MrTTNMYjI2b1VUY3psZ2RXMVNmM1NEQTc3 Qk1SbkYwRlF5RSs3QXpWNzlNQk40eQpraXFhZXpReHRhRjFGeS90dmtoZmZTbzh1K2R3RzBF Z0poK3RlMzhnVGNJU1ZyMEdJUHBsTHo2WWhqcmJIclBSCkYxQ041VXVMOURCR2p4dU4zNVJM TlZFZnRhNlJVRmxSNk5jdFRqdnJBQkVCQUFHSkFpVUVHQUVDQUE4RkFreUEKY21RQ0d3d0ZD UkxNQXdBQUNna1E3WmZwRG1LcWZqU3JIQS8rS3pBS3ZUeFJoQTlNV05MeEl5SjdTNXVKMTZn cwpUM29DalpyQktHRWhLTU9HWDRPMEdBNlZPRXJ5TzdRUkNDWWFoM294U0czOElBbk5laXdK WGdVOUJ6a2s4NVVHCmJQRWQ3SEdGL1ZTZUhDUXdXb3U2anFVRFRTRHZuOVloTlRkRzBLWFBN NzRhQyt4cjJab3cxTzJtaFhpaGdXS0QKMER3KzBMWVBuVU9zUTBLT0Z4SFhYWUhtUnJTMU9a UFU1OUJMdmMrVFJoSWhhZlNIS0x3YlhLKzZja2t4Qng2aAo4ejVjY3BHMFFzNGJGaGRGWW5G ckVpZURMb0dtbkUyWUxoZFY2c3dKOVZOQ1M2cExpRW9oVDNmbTdhWG0xNXRaCk9JeXpNWmhI UlNBUGJsWHhRMFpTV2pxOG9ScmNZTkZ4YzRXMVVScEFrQkNPWUpvWHZRZkQ1TDNscUFsOFRD cUQKVXpZeGhIL3RKaGJEZEhycUhINzY3amFEYVRCMStUYWxwLzJBTUt3Y1hOT2Rpa2xHeGJt SFZHNllHbDZnOExyYgpzdTlOWkVJNHlMbEh6dWlrdGhKV2d6KzN2WmhWR3lObHQrSE5Jb0Y2 Q2pETDJvbXU1Y0VxNFJESE00NFFxUGs2Cmw3TzBwVXZOMW1UNEIrUzFiMDhSS3BxbS9mZjAx NUUzN0hOVi9waUl2Smx4R0FZejhQU2Z1R0NCMXRoTVlxbG0KZ2RoZDkvQmFiR0ZiR0dZSEE2 VTQvVDV6cVUrZjZ4SHkxU3NBUVoxTVNLbEx3ZWtCSVQrNC9jTFJHcUNIam5WMApxNUgvVDZh N3Q1bVBrYnpTck9MU280cHVqK0lUb05qWXlZSURCV3pobEExOWF2T2ErcnZVam1IdEQzc0ZO N2NYCld0a0dvaThidU5jYnk0VT0KPUFMNm8KLS0tLS1FTkQgUEdQIFBVQkxJQyBLRVkgQkxP Q0stLS0tLQo= Organization: UCLA Computer Science Department Message-ID: <9d8897dc-b415-afce-bc34-b9f934b8f905@cs.ucla.edu> Date: Wed, 1 Jul 2020 17:26:51 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <0f92f576-bf1c-e889-3e4a-a128455b5684@cs.ucla.edu> Content-Type: multipart/mixed; boundary="------------3098EFBF3721EDA06E6597F4" Content-Language: en-US Received-SPF: pass client-ip=131.179.128.68; envelope-from=eggert@cs.ucla.edu; helo=zimbra.cs.ucla.edu X-detected-operating-system: by eggs.gnu.org: First seen = 2020/07/01 19:48:29 X-ACL-Warn: Detected OS = Linux 3.1-3.10 X-Spam_score_int: -41 X-Spam_score: -4.2 X-Spam_bar: ---- X-Spam_report: (-4.2 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: bug-gnulib@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Gnulib discussion list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?Q?Tim_R=c3=bchsen?= , Gnulib bugs , coreutils@gnu.org Errors-To: bug-gnulib-bounces+normalperson=yhbt.net@gnu.org Sender: "bug-gnulib" This is a multi-part message in MIME format. --------------3098EFBF3721EDA06E6597F4 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable On 5/23/20 9:08 AM, Paul Eggert wrote: > So I am thinking of killing two > stones by doing the following. >=20 > 1. Test for -fanalyzer, -Wall, -Wextra. >=20 > 2. Test for flags not automatically enabled by -fanalyzer, -Wall, -Wext= ra but > flags that we want anyway. >=20 > 3. Test for flags automatically enabled by -fanalyzer, -Wall, -Wextra t= hat are > also flags that we don't want. I did that in Gnulib by installing the attached patch. This could greatly increase compile times due to the -fanalyzer option, so let's keep an eye= out for that. On 5/23/20 9:22 AM, Tim R=C3=BChsen wrote: > This has been done for Wget2 > https://gitlab.com/gnuwget/wget2/-/blob/master/m4/wget_manywarnings.m4 > > Example usage at L123+: > https://gitlab.com/gnuwget/wget2/-/blob/master/configure.ac > > To make it usable for other projects, it needs some merging with the > manywarnings.m4 from gnulib, IMO. I would support any volunteer as good > as i can. Thanks. I think this different approach should be a win. I wanted to get = the old approach working with GCC 10.1 first though (and did that via the attache= d patch) before trying out this new method, so that we can verify that swit= ching from old to new methods improves 'configure' performance without changing= the set of flags given to GCC. Perhaps we can wait for a bit for a shakeout p= eriod for -fanalyzer etc., and then look into switching methods. --------------3098EFBF3721EDA06E6597F4 Content-Type: text/x-patch; charset=UTF-8; name="0001-manywarnings-improve-port-to-GCC-10.1.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="0001-manywarnings-improve-port-to-GCC-10.1.patch" >From 3831e2e9f355c557b0c0ed9712548b62feaf694f Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Wed, 1 Jul 2020 17:00:51 -0700 Subject: [PATCH] manywarnings: improve port to GCC 10.1 * build-aux/gcc-warning.spec: Also list warnings that are default or are enabled by already-given flags. This lets us speed up checking for attributes, and makes the generated compilation commands shorter. Add -Wanalyzer-too-complex (too much noise). * m4/manywarnings.m4 (gl_MANYWARN_COMPLEMENT) (gl_MANYWARN_ALL_GCC): Use gl_AS_VAR_APPEND to append to shell variables that may have long values. (gl_MANYWARN_ALL_GCC): Omit flags that are default or are consequences of other flags, to speed up checking and shorten commands. --- ChangeLog | 12 +++ build-aux/gcc-warning.spec | 144 ++++++++++++++++++++++++-- m4/manywarnings.m4 | 206 ++++++------------------------------- 3 files changed, 181 insertions(+), 181 deletions(-) diff --git a/ChangeLog b/ChangeLog index edb63b348..6115ab946 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,17 @@ 2020-07-01 Paul Eggert + manywarnings: improve port to GCC 10.1 + * build-aux/gcc-warning.spec: Also list warnings that are default + or are enabled by already-given flags. This lets us speed up + checking for attributes, and makes the generated compilation + commands shorter. Add -Wanalyzer-too-complex (too much noise). + * m4/manywarnings.m4 (gl_MANYWARN_COMPLEMENT) + (gl_MANYWARN_ALL_GCC): Use gl_AS_VAR_APPEND to append + to shell variables that may have long values. + (gl_MANYWARN_ALL_GCC): Omit flags that are default or are + consequences of other flags, to speed up checking and + shorten commands. + tests: pacify gcc -fanalyzer on zerosize_ptr * tests/test-memcasecmp.c (main): * tests/test-memchr.c (main): diff --git a/build-aux/gcc-warning.spec b/build-aux/gcc-warning.spec index 89a0bc734..6c0602be4 100644 --- a/build-aux/gcc-warning.spec +++ b/build-aux/gcc-warning.spec @@ -1,24 +1,51 @@ # options to filter out, and why --all-warnings alias for -Wall --extra-warnings alias for -Wextra +-W alias for -Wextra -Wabi this is now a no-op -Wabi-tag c++ -Wabi= c++ +-Wabsolute-value enabled by -Wextra +-Waddress enabled by -Wall +-Waddress-of-packed-member default -Waggregate-return obsolescent +-Waggressive-loop-optimizations default -Waliasing fortran -Walign-commons fortran -Waligned-new=[none|global|all] c++ --Walloc-size-larger-than= handled specially by gl_MANYWARN_ALL_GCC +-Walloc-size-larger-than= defaults to PTRDIFF_MAX -Walloc-zero Gnulib fixes this problem -Walloca we like alloca in small doses -Walloca-larger-than= FIXME: choose something sane? -Wampersand fortran +-Wanalyzer-double-fclose enabled by -fanalyzer +-Wanalyzer-double-free enabled by -fanalyzer +-Wanalyzer-exposure-through-output-file enabled by -fanalyzer +-Wanalyzer-file-leak enabled by -fanalyzer +-Wanalyzer-free-of-non-heap enabled by -fanalyzer +-Wanalyzer-malloc-leak enabled by -fanalyzer +-Wanalyzer-null-argument enabled by -fanalyzer +-Wanalyzer-null-dereference enabled by -fanalyzer +-Wanalyzer-possible-null-argument enabled by -fanalyzer +-Wanalyzer-possible-null-dereference enabled by -fanalyzer +-Wanalyzer-stale-setjmp-buffer implied by -fanalyzer +-Wanalyzer-tainted-array-index FIXME maybe? too much noise +-Wanalyzer-too-complex enabled by -fanalyzer +-Wanalyzer-unsafe-call-within-signal-handler enabled by -fanalyzer +-Wanalyzer-use-after-free enabled by -fanalyzer +-Wanalyzer-use-of-pointer-in-stale-stack-frame enabled by -fanalyzer -Warray-bounds covered by -Warray-bounds= -Warray-bounds=<0,2> handled specially by gl_MANYWARN_ALL_GCC -Warray-temporaries fortran -Wassign-intercept objc/objc++ -Wattribute-alias covered by -Wattribute-alias=2 -Wattribute-alias=<0,2> handled specially by gl_MANYWARN_ALL_GCC +-Wattribute-warning default +-Wattributes default +-Wbool-compare enabled by -Wall +-Wbool-operation enabled by -Wall +-Wbuiltin-declaration-mismatch default +-Wbuiltin-macro-redefined default -Wc++-compat only useful for code meant to be compiled by a C++ compiler -Wc++0x-compat c++ -Wc++11-compat c++ @@ -31,63 +58,120 @@ -Wc11-c2x-compat c compatibility -Wc90-c99-compat c compatibility -Wc99-c11-compat c compatibility +-Wcannot-profile default +-Wcast-align enabled by -Wcast-align=strict +-Wcast-function-type enabled by -Wextra -Wcast-qual FIXME maybe? too much noise; encourages bad changes -Wcast-result D -Wcatch-value c++ -Wcatch-value=<0,3> c++ +-Wchar-subscripts enabled by -Wall -Wcharacter-truncation fortran -Wchkp deprecated -Wclass-conversion c++ and objc++ -Wclass-memaccess c++ +-Wclobbered enabled by -Wextra -Wcomma-subscript c++ and objc++ +-Wcomment enabled by -Wall +-Wcomments alias for -Wcomment -Wcompare-reals fortran -Wconditionally-supported c++ and objc++ -Wconversion FIXME maybe? too much noise; encourages bad changes -Wconversion-extra fortran -Wconversion-null c++ and objc++ +-Wcoverage-mismatch default +-Wcpp default -Wctor-dtor-privacy c++ +-Wdangling-else enabled by -Wparentheses -Wdeclaration-after-statement FIXME: do not want. others may -Wdelete-incomplete c++ and objc++ -Wdelete-non-virtual-dtor c++ +-Wdeprecated default -Wdeprecated-copy c++ and objc++ -Wdeprecated-copy-dtor c++ and objc++ +-Wdeprecated-declarations default +-Wdesignated-init default +-Wdiscarded-array-qualifiers default +-Wdiscarded-qualifiers default -Wdo-subscript fortran +-Wdiv-by-zero default +-Wduplicate-decl-specifier enabled by -Wall -Weffc++ c++ +-Wempty-body enabled by -Wextra +-Wenum-compare enabled by -Wall +-Wenum-conversion enabled by -Wextra +-Wendif-labels default -Werror-implicit-function-declaration deprecated +-Wexpansion-to-defined enabled by -Wextra -Wextra-semi c++ -Wfloat-conversion FIXME maybe? borderline. some will want this -Wfloat-equal FIXME maybe? borderline. some will want this -Wformat covered by -Wformat=2 +-Wformat-contains-nul default +-Wformat-diag enabled by -Wformat=2 +-Wformat-extra-args enabled by -Wformat=2 +-Wformat-nonliteral enabled by -Wformat=2 -Wformat-overflow<0,2> gcc --help=warnings artifact -Wformat-overflow=<0,2> handled specially by gl_MANYWARN_ALL_GCC +-Wformat-security enabled by -Wformat=2 -Wformat-truncation covered by -Wformat-truncation=2 -Wformat-truncation=<0,2> handled specially by gl_MANYWARN_ALL_GCC +-Wformat-y2k enabled by -Wformat=2 +-Wformat-zero-length enabled by -Wformat=2 -Wformat=<0,2> gcc --help=warnings artifact +-Wframe-address enabled by -Wall -Wframe-larger-than= FIXME: choose something sane? +-Wfree-nonheap-object default -Wfunction-elimination fortran +-Whsa default +-Wif-not-aligned default +-Wignored-attributes default +-Wignored-qualifiers enabled by -Wextra +-Wimplicit enabled by -Wall -Wimplicit-fallthrough covered by -Wimplicit-fallthrough=2 -Wimplicit-fallthrough=<0,5> handled specially by gl_MANYWARN_ALL_GCC +-Wimplicit-function-declaration enabled by -Wimplicit +-Wimplicit-int enabled by -Wimplicit -Wimplicit-interface fortran -Wimplicit-procedure fortran -Winaccessible-base c++ and objc++ +-Wincompatible-pointer-types default -Winherited-variadic-ctor c++ -Winit-list-lifetime c++ and objc++ +-Wint-conversion default +-Wint-in-bool-context enabled by -Wall +-Wint-to-pointer-cast default -Winteger-division fortran -Wintrinsic-shadow fortran -Wintrinsics-std fortran +-Winvalid-memory-model default -Winvalid-offsetof c++ and objc++ -Wjump-misses-init only useful for code meant to be compiled by a C++ compiler -Wlarger-than- gcc --help=warnings artifact -Wlarger-than= FIXME: choose something sane? -Wline-truncation fortran -Wliteral-suffix c++ and objc++ +-Wlogical-not-parentheses enabled by -Wall -Wlong-long obsolescent -Wlto-type-mismatch c++ and objc++ +-Wmain enabled by -Wall +-Wmaybe-uninitialized enabled by -Wall or -Wextra +-Wmemset-elt-size enabled by -Wall +-Wmemset-transposed-args enabled by -Wall +-Wmisleading-indentation enabled by -Wall -Wmismatched-tags c++ and objc++ +-Wmissing-attributes enabled by -Wall +-Wmissing-braces enabled by -Wall +-Wmissing-field-initializers enabled by -Wextra -Wmissing-format-attribute obsolescent -Wmissing-noreturn obsolescent +-Wmissing-parameter-type enabled by -Wextra +-Wmissing-profile default +-Wmultichar default -Wmultiple-inheritance c++ and objc++ +-Wmultistatement-macros enabled by -Wall -Wnamespaces c++ +-Wnarrowing enabled by -Wall -Wno-alloc-size-larger-than see -Walloc-size-larger-than -Wno-alloca-larger-than see -Walloca-larger-than -Wno-frame-larger-than see -Wframe-larger-than @@ -98,21 +182,35 @@ -Wnoexcept-type c++ -Wnon-template-friend c++ -Wnon-virtual-dtor c++ --Wnormalized covered by -Wnormalized= --Wnormalized=[none|id|nfc|nfkc] handled specially by gl_MANYWARN_ALL_GCC +-Wnonnull enabled by -Wall or -Wformat +-Wnonnull-compare enabled by -Wall +-Wnormalized default +-Wnormalized=[none|id|nfc|nfkc] defaults to nfc +-Wodr default -Wold-style-cast c++ and objc++ +-Wold-style-declaration enabled by -Wextra +-Woverflow default -Woverloaded-virtual c++ +-Woverride-init enabled by -Wextra -Woverride-init-side-effects c++ and objc++ -Woverwrite-recursive fortran +-Wpacked-bitfield-compat default +-Wpacked-not-aligned enabled by -Wall -Wpadded FIXME maybe? warns about "stabil" member in /usr/include/bits/timex.h +-Wparentheses enabled by -Wall -Wpedantic FIXME: too strict? -Wpessimizing-move c++ and objc++ -Wplacement-new c++ -Wplacement-new=<0,2> c++ -Wpmf-conversions c++ and objc++ +-Wpointer-compare default +-Wpointer-sign enabled by -Wall +-Wpointer-to-int-cast default +-Wpragmas default -Wprio-ctor-dtor c++ -Wproperty-assign-default objc++ -Wprotocol objc++ +-Wpsabi default -Wreal-q-constant fortran -Wrealloc-lhs fortran -Wrealloc-lhs-all fortran @@ -121,53 +219,87 @@ -Wredundant-tags c++ and objc++ -Wregister c++ and objc++ -Wreorder c++ and objc++ +-Wrestrict enabled by -Wall +-Wreturn-local-addr default +-Wreturn-type enabled by -Wall +-Wscalar-storage-order default -Wselector objc and objc++ +-Wsequence-point enabled by -Wall -Wshadow-compatible-local covered by -Wshadow -Wshadow-ivar objc -Wshadow-local covered by -Wshadow -Wshadow=compatible-local covered by -Wshadow -Wshadow=global covered by -Wshadow -Wshadow=local covered by -Wshadow +-Wshift-count-negative default +-Wshift-count-overflow default +-Wshift-negative-value enabled by -Wextra -Wshift-overflow covered by -Wshift-overflow=2 -Wshift-overflow=<0,2> gcc --help=warnings artifact -Wsign-compare FIXME maybe? borderline. some will want this -Wsign-conversion FIXME maybe? borderline. some will want this -Wsign-promo c++ and objc++ -Wsized-deallocation c++ and objc++ +-Wsizeof-array-argument default +-Wsizeof-pointer-div enabled by -Wall +-Wsizeof-pointer-memaccess enabled by -Wall -Wstack-usage= FIXME: choose something sane? +-Wstrict-aliasing enabled by -Wall -Wstrict-aliasing=<0,3> FIXME: choose something sane? -Wstrict-null-sentinel c++ and objc++ -Wstrict-overflow=<0,5> FIXME: choose something sane? -Wstrict-selector-match objc and objc++ --Wstringop-overflow covered by -Wstringop-overflow= --Wstringop-overflow=<0,4> handled specially by gl_MANYWARN_ALL_GCC +-Wstring-compare enabled by -Wextra +-Wstringop-overflow covered by -Wstringop-overflow=2 +-Wstringop-overflow=<0,4> defaults to 2 +-Wstringop-truncation default -Wsubobject-linkage c++ and objc++ -Wsuggest-override c++ and objc++ -Wsurprising fortran +-Wswitch enabled by -Wall +-Wswitch-bool default -Wswitch-default https://lists.gnu.org/r/bug-gnulib/2018-05/msg00179.html -Wswitch-enum FIXME maybe? borderline. some will want this +-Wswitch-outside-range default +-Wswitch-unreachable default -Wsynth deprecated -Wtabs fortran -Wtarget-lifetime fortran +-Wtautological-compare enabled by -Wall -Wtemplates c++ and objc++ -Wterminate c++ and objc++ -Wtraditional obsolescent -Wtraditional-conversion obsolescent +-Wtrigraphs enabled by -Wall +-Wtype-limits enabled by -Wextra -Wundeclared-selector objc and objc++ -Wundef FIXME maybe? too many false positives -Wundefined-do-loop fortran -Wunderflow fortran -Wunreachable-code obsolescent no-op -Wunsuffixed-float-constants triggers warning in gnulib's timespec.h --Wunused-const-variable covered by -Wunusec-const-variable=2 +-Wunused enabled by -Wall +-Wunused-but-set-parameter enabled by -Wunused +-Wunused-but-set-variable enabled by -Wunused +-Wunused-const-variable covered by -Wunused-const-variable=2 -Wunused-const-variable=<0,2> gcc --help=warnings artifact -Wunused-dummy-argument fortran +-Wunused-function enabled by -Wunused +-Wunused-label enabled by -Wunused +-Wunused-local-typedefs enabled by -Wunused +-Wunused-parameter enabled by -Wunused +-Wunused-result enabled by -Wunused +-Wunused-value enabled by -Wunused +-Wunused-variable enabled by -Wunused -Wuse-without-only fortran -Wuseless-cast c++ and objc++ +-Wvarargs default -Wvirtual-inheritance c++ -Wvirtual-move-assign c++ -Wvla-larger-than= handled specially by gl_MANYWARN_ALL_GCC -Wvolatile c++ and objc++ +-Wvolatile-register-var enabled by -Wall -Wzero-as-null-pointer-constant c++ and objc++ +-Wzero-length-bounds enabled by -Wall -Wzerotrip fortran -frequire-return-statement go diff --git a/m4/manywarnings.m4 b/m4/manywarnings.m4 index 719bafb29..d18da048d 100644 --- a/m4/manywarnings.m4 +++ b/m4/manywarnings.m4 @@ -1,4 +1,4 @@ -# manywarnings.m4 serial 19 +# manywarnings.m4 serial 20 dnl Copyright (C) 2008-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -21,7 +21,7 @@ AC_DEFUN([gl_MANYWARN_COMPLEMENT], *" $gl_warn_item "*) ;; *) - gl_warn_set="$gl_warn_set $gl_warn_item" + gl_AS_VAR_APPEND([gl_warn_set], [" $gl_warn_item"]) ;; esac done @@ -49,12 +49,12 @@ m4_defun([gl_MANYWARN_ALL_GCC(C)], AC_REQUIRE([AC_PROG_CC]) if test -n "$GCC"; then - dnl Check if -W -Werror -Wno-missing-field-initializers is supported + dnl Check if -Wextra -Werror -Wno-missing-field-initializers is supported dnl with the current $CC $CFLAGS $CPPFLAGS. AC_CACHE_CHECK([whether -Wno-missing-field-initializers is supported], [gl_cv_cc_nomfi_supported], [gl_save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -W -Werror -Wno-missing-field-initializers" + CFLAGS="$CFLAGS -Wextra -Werror -Wno-missing-field-initializers" AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[]], [[]])], [gl_cv_cc_nomfi_supported=yes], @@ -68,7 +68,7 @@ m4_defun([gl_MANYWARN_ALL_GCC(C)], AC_CACHE_CHECK([whether -Wno-missing-field-initializers is needed], [gl_cv_cc_nomfi_needed], [gl_save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -W -Werror" + CFLAGS="$CFLAGS -Wextra -Werror" AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[int f (void) @@ -105,153 +105,41 @@ m4_defun([gl_MANYWARN_ALL_GCC(C)], # To compare this list to your installed GCC's, run this Bash command: # # comm -3 \ - # <((sed -n 's/^ *\(-[^ 0-9][^ ]*\) .*/\1/p' manywarnings.m4; \ + # <((sed -n 's/^ *\(-[^ 0-9][^ ]*\).*/\1/p' manywarnings.m4; \ # awk '/^[^#]/ {print $1}' ../build-aux/gcc-warning.spec) | sort) \ # <(LC_ALL=C gcc --help=warnings | sed -n 's/^ \(-[^ ]*\) .*/\1/p' | sort) - gl_manywarn_set= - for gl_manywarn_item in -fno-common \ - -W \ - -Wabsolute-value \ - -Waddress \ - -Waddress-of-packed-member \ - -Waggressive-loop-optimizations \ + $1= + for gl_manywarn_item in -fanalyzer -fno-common \ -Wall \ - -Wanalyzer-double-fclose \ - -Wanalyzer-double-free \ - -Wanalyzer-exposure-through-output-file \ - -Wanalyzer-file-leak \ - -Wanalyzer-free-of-non-heap \ - -Wanalyzer-malloc-leak \ - -Wanalyzer-null-argument \ - -Wanalyzer-null-dereference \ - -Wanalyzer-possible-null-argument \ - -Wanalyzer-possible-null-dereference \ - -Wanalyzer-stale-setjmp-buffer \ - -Wanalyzer-tainted-array-index \ - -Wanalyzer-too-complex \ - -Wanalyzer-unsafe-call-within-signal-handler \ - -Wanalyzer-use-after-free \ - -Wanalyzer-use-of-pointer-in-stale-stack-frame \ -Warith-conversion \ - -Wattribute-warning \ - -Wattributes \ -Wbad-function-cast \ - -Wbool-compare \ - -Wbool-operation \ - -Wbuiltin-declaration-mismatch \ - -Wbuiltin-macro-redefined \ - -Wcannot-profile \ - -Wcast-align \ -Wcast-align=strict \ - -Wcast-function-type \ - -Wchar-subscripts \ - -Wclobbered \ - -Wcomment \ - -Wcomments \ - -Wcoverage-mismatch \ - -Wcpp \ - -Wdangling-else \ -Wdate-time \ - -Wdeprecated \ - -Wdeprecated-declarations \ - -Wdesignated-init \ -Wdisabled-optimization \ - -Wdiscarded-array-qualifiers \ - -Wdiscarded-qualifiers \ - -Wdiv-by-zero \ -Wdouble-promotion \ -Wduplicated-branches \ -Wduplicated-cond \ - -Wduplicate-decl-specifier \ - -Wempty-body \ - -Wendif-labels \ - -Wenum-compare \ - -Wenum-conversion \ - -Wexpansion-to-defined \ -Wextra \ - -Wformat-contains-nul \ - -Wformat-diag \ - -Wformat-extra-args \ - -Wformat-nonliteral \ - -Wformat-security \ -Wformat-signedness \ - -Wformat-y2k \ - -Wformat-zero-length \ - -Wframe-address \ - -Wfree-nonheap-object \ - -Whsa \ - -Wif-not-aligned \ - -Wignored-attributes \ - -Wignored-qualifiers \ - -Wimplicit \ - -Wimplicit-function-declaration \ - -Wimplicit-int \ - -Wincompatible-pointer-types \ -Winit-self \ -Winline \ - -Wint-conversion \ - -Wint-in-bool-context \ - -Wint-to-pointer-cast \ - -Winvalid-memory-model \ -Winvalid-pch \ - -Wlogical-not-parentheses \ -Wlogical-op \ - -Wmain \ - -Wmaybe-uninitialized \ - -Wmemset-elt-size \ - -Wmemset-transposed-args \ - -Wmisleading-indentation \ - -Wmissing-attributes \ - -Wmissing-braces \ -Wmissing-declarations \ - -Wmissing-field-initializers \ -Wmissing-include-dirs \ - -Wmissing-parameter-type \ - -Wmissing-profile \ -Wmissing-prototypes \ - -Wmultichar \ - -Wmultistatement-macros \ - -Wnarrowing \ -Wnested-externs \ - -Wnonnull \ - -Wnonnull-compare \ -Wnull-dereference \ - -Wodr \ - -Wold-style-declaration \ -Wold-style-definition \ -Wopenmp-simd \ - -Woverflow \ -Woverlength-strings \ - -Woverride-init \ -Wpacked \ - -Wpacked-bitfield-compat \ - -Wpacked-not-aligned \ - -Wparentheses \ -Wpointer-arith \ - -Wpointer-compare \ - -Wpointer-sign \ - -Wpointer-to-int-cast \ - -Wpragmas \ - -Wpsabi \ - -Wrestrict \ - -Wreturn-local-addr \ - -Wreturn-type \ - -Wscalar-storage-order \ - -Wsequence-point \ -Wshadow \ - -Wshift-count-negative \ - -Wshift-count-overflow \ - -Wshift-negative-value \ - -Wsizeof-array-argument \ - -Wsizeof-pointer-div \ - -Wsizeof-pointer-memaccess \ -Wstack-protector \ - -Wstrict-aliasing \ -Wstrict-overflow \ -Wstrict-prototypes \ - -Wstring-compare \ - -Wstringop-truncation \ -Wsuggest-attribute=cold \ -Wsuggest-attribute=const \ -Wsuggest-attribute=format \ @@ -260,95 +148,63 @@ m4_defun([gl_MANYWARN_ALL_GCC(C)], -Wsuggest-attribute=pure \ -Wsuggest-final-methods \ -Wsuggest-final-types \ - -Wswitch \ - -Wswitch-bool \ - -Wswitch-outside-range \ - -Wswitch-unreachable \ -Wsync-nand \ -Wsystem-headers \ - -Wtautological-compare \ -Wtrampolines \ - -Wtrigraphs \ - -Wtype-limits \ -Wuninitialized \ -Wunknown-pragmas \ -Wunsafe-loop-optimizations \ - -Wunused \ - -Wunused-but-set-parameter \ - -Wunused-but-set-variable \ - -Wunused-function \ - -Wunused-label \ - -Wunused-local-typedefs \ -Wunused-macros \ - -Wunused-parameter \ - -Wunused-result \ - -Wunused-value \ - -Wunused-variable \ - -Wvarargs \ -Wvariadic-macros \ -Wvector-operation-performance \ -Wvla \ - -Wvolatile-register-var \ -Wwrite-strings \ - -Wzero-length-bounds \ \ ; do - gl_manywarn_set="$gl_manywarn_set $gl_manywarn_item" + gl_AS_VAR_APPEND([$1], [" $gl_manywarn_item"]) done # gcc --help=warnings outputs an unusual form for these options; list # them here so that the above 'comm' command doesn't report a false match. - # Would prefer "min (PTRDIFF_MAX, SIZE_MAX)", but it must be a literal. - # Also, AC_COMPUTE_INT requires it to fit in a long; it is 2**63 on - # the only platforms where it does not fit in a long, so make that - # a special case. - AC_MSG_CHECKING([max safe object size]) - AC_COMPUTE_INT([gl_alloc_max], - [LONG_MAX < (PTRDIFF_MAX < (size_t) -1 ? PTRDIFF_MAX : (size_t) -1) - ? -1 - : PTRDIFF_MAX < (size_t) -1 ? (long) PTRDIFF_MAX : (long) (size_t) -1], - [[#include - #include - #include - ]], - [gl_alloc_max=2147483647]) - case $gl_alloc_max in - -1) gl_alloc_max=9223372036854775807;; - esac - AC_MSG_RESULT([$gl_alloc_max]) - gl_manywarn_set="$gl_manywarn_set -Walloc-size-larger-than=$gl_alloc_max" - gl_manywarn_set="$gl_manywarn_set -Warray-bounds=2" - gl_manywarn_set="$gl_manywarn_set -Wattribute-alias=2" - gl_manywarn_set="$gl_manywarn_set -Wformat-overflow=2" - gl_manywarn_set="$gl_manywarn_set -Wformat-truncation=2" - gl_manywarn_set="$gl_manywarn_set -Wimplicit-fallthrough=5" - gl_manywarn_set="$gl_manywarn_set -Wnormalized=nfc" - gl_manywarn_set="$gl_manywarn_set -Wshift-overflow=2" - gl_manywarn_set="$gl_manywarn_set -Wstringop-overflow=2" - gl_manywarn_set="$gl_manywarn_set -Wunused-const-variable=2" - gl_manywarn_set="$gl_manywarn_set -Wvla-larger-than=4031" + gl_AS_VAR_APPEND([$1], [' -Warray-bounds=2']) + gl_AS_VAR_APPEND([$1], [' -Wattribute-alias=2']) + gl_AS_VAR_APPEND([$1], [' -Wformat-overflow=2']) + gl_AS_VAR_APPEND([$1], [' -Wformat=2']) + gl_AS_VAR_APPEND([$1], [' -Wformat-truncation=2']) + gl_AS_VAR_APPEND([$1], [' -Wimplicit-fallthrough=5']) + gl_AS_VAR_APPEND([$1], [' -Wshift-overflow=2']) + gl_AS_VAR_APPEND([$1], [' -Wunused-const-variable=2']) + gl_AS_VAR_APPEND([$1], [' -Wvla-larger-than=4031']) # These are needed for older GCC versions. if test -n "$GCC"; then case `($CC --version) 2>/dev/null` in 'gcc (GCC) '[[0-3]].* | \ 'gcc (GCC) '4.[[0-7]].*) - gl_manywarn_set="$gl_manywarn_set -fdiagnostics-show-option" - gl_manywarn_set="$gl_manywarn_set -funit-at-a-time" + gl_AS_VAR_APPEND([$1], [' -fdiagnostics-show-option']) + gl_AS_VAR_APPEND([$1], [' -funit-at-a-time']) ;; esac fi # Disable specific options as needed. if test "$gl_cv_cc_nomfi_needed" = yes; then - gl_manywarn_set="$gl_manywarn_set -Wno-missing-field-initializers" + gl_AS_VAR_APPEND([$1], [' -Wno-missing-field-initializers']) fi if test "$gl_cv_cc_uninitialized_supported" = no; then - gl_manywarn_set="$gl_manywarn_set -Wno-uninitialized" + gl_AS_VAR_APPEND([$1], [' -Wno-uninitialized']) fi - $1=$gl_manywarn_set + # Some warnings have too many false alarms in GCC 10.1. + # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93695 + gl_AS_VAR_APPEND([$1], [' -Wno-analyzer-double-free']) + # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94458 + gl_AS_VAR_APPEND([$1], [' -Wno-analyzer-malloc-leak']) + # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94851 + gl_AS_VAR_APPEND([$1], [' -Wno-analyzer-null-dereference']) + # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95758 + gl_AS_VAR_APPEND([$1], [' -Wno-analyzer-use-after-free']) AC_LANG_POP([C]) ]) -- 2.17.1 --------------3098EFBF3721EDA06E6597F4--