From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ams.source.kernel.org (ams.source.kernel.org [145.40.68.75]) by sourceware.org (Postfix) with ESMTPS id 0384A3858D1E for ; Sun, 8 Oct 2023 13:05:09 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 0384A3858D1E Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=kernel.org Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=kernel.org Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by ams.source.kernel.org (Postfix) with ESMTP id 4ECE3B80B6E; Sun, 8 Oct 2023 13:05:07 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 79F24C433C8; Sun, 8 Oct 2023 13:05:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1696770306; bh=5ezXMOuR9SzARDic5O5cdN0KUqgSWwfgPd/hW/glNmc=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=YjeX8xIVcNW0K9UVDIShkDmq328IJQKgj8GVUhMvgrFy/f19aERLBEQWtf3GMkdZC AQ7YqRq47nIDQqXNv9clzrAx+a3T7chKDI29gNY1pHByZf1cffc380cYaQCmMtLsc8 dWXk3nxOPwwBF57D+ZO5GppuyoEGo0tuz7flKBirIlSHkR7plZuteso4bfC2IQsQzL M2D/t2N9TfR+/pxlUT8BPRQDK4jkbdLsN5cHpZX9ueStpfEDdyDGh+71eubPRQ7pZZ eUd1erocoBybh8CTa47XVeR3CGk6PJbHitajoGEuktYCaenEiKtJIpFgfgYy+Fef3x axRUKvQ4LH4sw== Date: Sun, 8 Oct 2023 15:05:00 +0200 From: Alejandro Colomar To: gcc-patches@gcc.gnu.org Cc: Doug McIlroy , "G. Branden Robinson" , Ralph Corderoy , Dave Kemper , Larry McVoy , Andrew Pinski , Jonathan Wakely , Andrew Clayton , Martin Uecker , David Malcolm Subject: Ping: [PATCH v5] C, ObjC: Add -Wunterminated-string-initialization Message-ID: References: <20231001162400.68141-1-alx@kernel.org> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha512; protocol="application/pgp-signature"; boundary="TKk3EECCcyj52IOM" Content-Disposition: inline In-Reply-To: <20231001162400.68141-1-alx@kernel.org> X-Spam-Status: No, score=-10.4 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,SPF_HELO_NONE,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --TKk3EECCcyj52IOM Content-Type: text/plain; protected-headers=v1; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Date: Sun, 8 Oct 2023 15:05:00 +0200 From: Alejandro Colomar To: gcc-patches@gcc.gnu.org Cc: Doug McIlroy , "G. Branden Robinson" , Ralph Corderoy , Dave Kemper , Larry McVoy , Andrew Pinski , Jonathan Wakely , Andrew Clayton , Martin Uecker , David Malcolm Subject: Ping: [PATCH v5] C, ObjC: Add -Wunterminated-string-initialization Hi, Gentle ping here. Thanks, Alex On Sun, Oct 01, 2023 at 06:24:00PM +0200, Alejandro Colomar wrote: > Warn about the following: >=20 > char s[3] =3D "foo"; >=20 > Initializing a char array with a string literal of the same length as > the size of the array is usually a mistake. Rarely is the case where > one wants to create a non-terminated character sequence from a string > literal. >=20 > In some cases, for writing faster code, one may want to use arrays > instead of pointers, since that removes the need for storing an array of > pointers apart from the strings themselves. >=20 > char *log_levels[] =3D { "info", "warning", "err" }; > vs. > char log_levels[][7] =3D { "info", "warning", "err" }; >=20 > This forces the programmer to specify a size, which might change if a > new entry is later added. Having no way to enforce null termination is > very dangerous, however, so it is useful to have a warning for this, so > that the compiler can make sure that the programmer didn't make any > mistakes. This warning catches the bug above, so that the programmer > will be able to fix it and write: >=20 > char log_levels[][8] =3D { "info", "warning", "err" }; >=20 > This warning already existed as part of -Wc++-compat, but this patch > allows enabling it separately. It is also included in -Wextra, since > it may not always be desired (when unterminated character sequences are > wanted), but it's likely to be desired in most cases. >=20 > Since Wc++-compat now includes this warning, the test has to be modified > to expect the text of the new warning too, in . >=20 > Link: > Link: > Link: > Acked-by: Doug McIlroy > Cc: "G. Branden Robinson" > Cc: Ralph Corderoy > Cc: Dave Kemper > Cc: Larry McVoy > Cc: Andrew Pinski > Cc: Jonathan Wakely > Cc: Andrew Clayton > Cc: Martin Uecker > Cc: David Malcolm > Signed-off-by: Alejandro Colomar > --- >=20 > v5: >=20 > - Fix existing C++-compat tests. [reported by ] >=20 >=20 > gcc/c-family/c.opt | 4 ++++ > gcc/c/c-typeck.cc | 6 +++--- > gcc/testsuite/gcc.dg/Wcxx-compat-14.c | 2 +- > gcc/testsuite/gcc.dg/Wunterminated-string-initialization.c | 6 ++++++ > 4 files changed, 14 insertions(+), 4 deletions(-) > create mode 100644 gcc/testsuite/gcc.dg/Wunterminated-string-initializat= ion.c >=20 > diff --git a/gcc/c-family/c.opt b/gcc/c-family/c.opt > index 44b9c862c14..e8f6b836836 100644 > --- a/gcc/c-family/c.opt > +++ b/gcc/c-family/c.opt > @@ -1407,6 +1407,10 @@ Wunsuffixed-float-constants > C ObjC Var(warn_unsuffixed_float_constants) Warning > Warn about unsuffixed float constants. > =20 > +Wunterminated-string-initialization > +C ObjC Var(warn_unterminated_string_initialization) Warning LangEnabledB= y(C ObjC,Wextra || Wc++-compat) > +Warn about character arrays initialized as unterminated character sequen= ces by a string literal. > + > Wunused > C ObjC C++ ObjC++ LangEnabledBy(C ObjC C++ ObjC++,Wall) > ; documented in common.opt > diff --git a/gcc/c/c-typeck.cc b/gcc/c/c-typeck.cc > index e55e887da14..7df9de819ed 100644 > --- a/gcc/c/c-typeck.cc > +++ b/gcc/c/c-typeck.cc > @@ -8399,11 +8399,11 @@ digest_init (location_t init_loc, tree type, tree= init, tree origtype, > pedwarn_init (init_loc, 0, > ("initializer-string for array of %qT " > "is too long"), typ1); > - else if (warn_cxx_compat > + else if (warn_unterminated_string_initialization > && compare_tree_int (TYPE_SIZE_UNIT (type), len) < 0) > - warning_at (init_loc, OPT_Wc___compat, > + warning_at (init_loc, OPT_Wunterminated_string_initialization, > ("initializer-string for array of %qT " > - "is too long for C++"), typ1); > + "is too long"), typ1); > if (compare_tree_int (TYPE_SIZE_UNIT (type), len) < 0) > { > unsigned HOST_WIDE_INT size > diff --git a/gcc/testsuite/gcc.dg/Wcxx-compat-14.c b/gcc/testsuite/gcc.dg= /Wcxx-compat-14.c > index 23783711be6..6df0ee197cc 100644 > --- a/gcc/testsuite/gcc.dg/Wcxx-compat-14.c > +++ b/gcc/testsuite/gcc.dg/Wcxx-compat-14.c > @@ -2,5 +2,5 @@ > /* { dg-options "-Wc++-compat" } */ > =20 > char a1[] =3D "a"; > -char a2[1] =3D "a"; /* { dg-warning "C\[+\]\[+\]" } */ > +char a2[1] =3D "a"; /* { dg-warning "initializer-string for array of 'ch= ar' is too long" } */ > char a3[2] =3D "a"; > diff --git a/gcc/testsuite/gcc.dg/Wunterminated-string-initialization.c b= /gcc/testsuite/gcc.dg/Wunterminated-string-initialization.c > new file mode 100644 > index 00000000000..13d5dbc6640 > --- /dev/null > +++ b/gcc/testsuite/gcc.dg/Wunterminated-string-initialization.c > @@ -0,0 +1,6 @@ > +/* { dg-do compile } */ > +/* { dg-options "-Wunterminated-string-initialization" } */ > + > +char a1[] =3D "a"; > +char a2[1] =3D "a"; /* { dg-warning "initializer-string for array of 'ch= ar' is too long" } */ > +char a3[2] =3D "a"; > --=20 > 2.40.1 >=20 --=20 --TKk3EECCcyj52IOM Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEE6jqH8KTroDDkXfJAnowa+77/2zIFAmUiqP0ACgkQnowa+77/ 2zIvTw//XYqWjAnbi0ZrlnqN28dME0G2qpafr+E/0M81gAfVdiQUEwejTB7j7jdR +r8VGPamGSdVMDowaTjpyYPJX32+SBf5T/b0aMIs9LrmCSXBF8YcGtke9vIku7RV mngeDubPNyEL/DHrO7Juwi584f8TuXu4/gHcOhEoZew9ZAbUwwTrS8cZg7FZSWju ED6dyyt5/pLbPpgzYO8wpTBIV9l/NQP8bmj+dZXOXqUblkRDsnrTI/XA5BSfeke1 6yGdVDb2Dk4PTnKBrCjLx3BOWDJe9EMso3tcojoyBsCZIrNE6gDw2cWdH5Yl+PY8 K/YcelSUFzwD0sh0vHrKvhU3dV+9hIHeeMZB46JJuOmyaPsGa60THDvLaTeiMvF2 9ylLinVGYEBsw8dyBEAvZkRQmYC0bEXOelp04KYysItHy7wXbIEUhjhvl9dQvjxj rCNdyVAScOllTVUdMjb+iu25S37dOOM5pv/LeJCOWG611lRqa5eLopHJ0S8qaEm9 qkgIORAbRU/v6FXk/WVnVSXkfq+A0s0r3tXWIFkz5iQL1TMZwZEGgYPCifSfvOk3 QbDT3rXSmFuD4fYpLNyQaIuCChGoadwsGpf6Z6Bs6TE/jYZUMR7i9X8bSyqZImrv rb4Ma/gnEJ+5gWL2Ivq8gOU9TaeoyF0xXOLzI+oZb8xQfqgelic= =91Vj -----END PGP SIGNATURE----- --TKk3EECCcyj52IOM--