From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-qk1-x732.google.com (mail-qk1-x732.google.com [IPv6:2607:f8b0:4864:20::732]) by sourceware.org (Postfix) with ESMTPS id 6D3033853804; Wed, 12 May 2021 15:39:12 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 6D3033853804 Received: by mail-qk1-x732.google.com with SMTP id f18so723319qko.7; Wed, 12 May 2021 08:39:12 -0700 (PDT) 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=dr7PaJIUII2VkQQv+UhVafGnab66dGkk2Wh3c4aXDN0=; b=m1NurF2OBz6FGAtoQE/Py7YRwXpaddBlSREzki0BvmxvY2VNTfXs3KqqK+8maho+r1 H/Hn/Je36pGPEOsSwj1VDCSateQ/1u0ZIxm5+p9hW+E/r+9os1Zr3QTquYsL8oG3JFWz PXU3ZF/KH52E9QHlxjtSXGdcHjCUkwU5mgrk2E9njMxDFQbq+Br5H8/lxOI8/x/TsONs Zsiu3aYiUhsIZiY3gw181R156xL5cjJQehqQhAwmRqY1tdjGdD0GfnKwz1L/w+ZHyip1 GeKju5asYWmMESG8b4UakUnSj8LbfzCzqMojpj9f1JBXYC6BynRGHsPNXeXH5bQC38ef /HNQ== X-Gm-Message-State: AOAM531BCpfqL6O881PKAX00FP7bCRrzCb8DtPt1sonrQRrJEfQSmR+U XPrgAoC1YcmeHdzDQp8EQWQg8piJRbaa+Ivwt3c= X-Google-Smtp-Source: ABdhPJxmx10a8Yr+0gZYAyYD0ONgL7NXngfqm61N9uJfJujuqFogPUrl+V7QDFdKhWYGIUtSH21AIfg8Q6JNWmM2VO0= X-Received: by 2002:a05:620a:12f2:: with SMTP id f18mr10145396qkl.122.1620833952088; Wed, 12 May 2021 08:39:12 -0700 (PDT) MIME-Version: 1.0 References: <20210511200031.GZ3008@redhat.com> <20210512091833.GA3008@redhat.com> In-Reply-To: From: Antony Polukhin Date: Wed, 12 May 2021 18:38:59 +0300 Message-ID: Subject: Re: [PATCH] PR libstdc++/89728 diagnose some missuses of [locale.convenience] functions To: Jonathan Wakely Cc: "libstdc++" , gcc-patches List Content-Type: multipart/mixed; boundary="000000000000f4845205c223cf9e" X-Spam-Status: No, score=-9.9 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, KAM_SHORT, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: libstdc++@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libstdc++ mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 May 2021 15:39:14 -0000 --000000000000f4845205c223cf9e Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable =D1=81=D1=80, 12 =D0=BC=D0=B0=D1=8F 2021 =D0=B3. =D0=B2 17:44, Jonathan Wak= ely : > > On 12/05/21 12:58 +0300, Antony Polukhin wrote: > >=D1=81=D1=80, 12 =D0=BC=D0=B0=D1=8F 2021 =D0=B3. =D0=B2 12:18, Jonathan = Wakely : > ><...> > >> Or just leave it undefined, as libc++ seems to do according to your > >> comment in PR 89728: > >> > >> error: implicit instantiation of undefined template 'std::__1::ctype >' > >> > >> Was your aim to have a static_assert that gives a more descriptive > >> error? We could leave it undefined in C++98 and have the static assert > >> for C++11 and up. > > > >Leaving it undefined would be the best. It would allow SFINAE on ctype > >and a compile time error is informative enough. > > > >However, there may be users who instantiate ctype in a > >shared library without ctype template specializations in > >the main executable. Making the default ctype undefined would break > >their compilation: > > > >#include > >// no ctype specialization > >c =3D std::tolower(ThierChar{42}, locale_from_shared_library()); // OK > >right now in libstdc++, fails on libc++ > > What I meant was leaving the partial specialization undefined, not the > primary template, i.e. > > --- a/libstdc++-v3/include/bits/locale_facets.h > +++ b/libstdc++-v3/include/bits/locale_facets.h > @@ -1476,6 +1476,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION > }; > #endif //_GLIBCXX_USE_WCHAR_T > > + template > + class ctype >; > + > /// class ctype_byname [22.2.1.2]. > template > class ctype_byname : public ctype<_CharT> > > This makes your test fail with errors like this: > > In file included from /home/jwakely/gcc/12/include/c++/12.0.0/locale:40, > from loc.C:1: > /home/jwakely/gcc/12/include/c++/12.0.0/bits/locale_facets.h: In instanti= ation of 'bool std::isspace(_CharT, const std::locale&) [with _CharT =3D st= d::__cxx11::basic_string]': > loc.C:16:15: required from here > /home/jwakely/gcc/12/include/c++/12.0.0/bits/locale_facets.h:2600:47: err= or: invalid use of incomplete type 'const class std::ctype >' > 2600 | { return use_facet >(__loc).is(ctype_base::spa= ce, __c); } > | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~ > > But it shouldn't affect the uses of ctype. > > What do you think? Good idea. That way the compiler message points directly to the misused function. Patch is in attachment --=20 Best regards, Antony Polukhin --000000000000f4845205c223cf9e Content-Type: text/plain; charset="US-ASCII"; name="ctype_compile_time_diag-7.txt" Content-Disposition: attachment; filename="ctype_compile_time_diag-7.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kolmkb7q0 ZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIGIv bGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9sb2NhbGVfZmFjZXRzLmgKaW5kZXggMDM3MjRjZi4u NWNhNDMxZSAxMDA2NDQKLS0tIGEvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9sb2NhbGVfZmFj ZXRzLmgKKysrIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9sb2NhbGVfZmFjZXRzLmgKQEAg LTY3MSw2ICs2NzEsMTEgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KICAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgIGxvY2FsZTo6aWQgY3R5cGU8X0NoYXJUPjo6aWQ7 CiAKKyAgLy8gSW5jb21wbGV0ZSB0byBwcm92aWRlIGEgY29tcGlsZSB0aW1lIGRpYWdub3N0aWNz IGZvciBjb21tb24gbWlzdXNlCisgIC8vIG9mIFtsb2NhbGUuY29udmVuaWVuY2VdIGZ1bmN0aW9u cyB3aXRoIGJhc2ljX3N0cmluZyBhcyBhIGNoYXJhY3RlciB0eXBlLgorICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBjbGFz cyBjdHlwZTxiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ID47CisKICAgLyoq CiAgICAqICBAYnJpZWYgIFRoZSBjdHlwZTxjaGFyPiBzcGVjaWFsaXphdGlvbi4KICAgICogIEBp bmdyb3VwIGxvY2FsZXMKZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My90ZXN0c3VpdGUvMjJfbG9j YWxlL2N0eXBlL2lzL3N0cmluZy84OTcyOF9uZWcuY2MgYi9saWJzdGRjKystdjMvdGVzdHN1aXRl LzIyX2xvY2FsZS9jdHlwZS9pcy9zdHJpbmcvODk3MjhfbmVnLmNjCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLmNjYWIzYTIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzdGRjKyst djMvdGVzdHN1aXRlLzIyX2xvY2FsZS9jdHlwZS9pcy9zdHJpbmcvODk3MjhfbmVnLmNjCkBAIC0w LDAgKzEsNzMgQEAKKy8vIHsgZGctZG8gY29tcGlsZSB9CisKKy8vIENvcHlyaWdodCAoQykgMjAy MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFy dCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0 aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNo ZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMs IG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxp YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK Ky8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y ZSBkZXRhaWxzLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNl ZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcv bGljZW5zZXMvPi4KKworLy8geyBkZy1lcnJvciAiY29tcGxldGUiICIiIHsgdGFyZ2V0ICotKi0q IH0gMCB9CisKKyNpbmNsdWRlIDxsb2NhbGU+CisKK3RlbXBsYXRlIDxjbGFzcyBDaGFyLCBpbnQg ST4KK3N0cnVjdCB0cmFpdDogc3RkOjpjaGFyX3RyYWl0czxDaGFyPiB7fTsKKwordGVtcGxhdGUg PGNsYXNzIENoYXIsIGludCBJPgorc3RkOjpiYXNpY19zdHJpbmc8Q2hhciwgdHJhaXQ8Q2hhciwg ST4gPiBtYWtlX3N0cigpCit7CisgIHJldHVybiBzdGQ6OmJhc2ljX3N0cmluZzxDaGFyLCB0cmFp dDxDaGFyLCBJPiA+KCk7Cit9CisKK3ZvaWQgdGVzdDAxKCkKK3sKKyAgY29uc3Qgc3RkOjpsb2Nh bGUmIGxvYyA9IHN0ZDo6bG9jYWxlOjpjbGFzc2ljKCk7CisKKyAgc3RkOjppc3NwYWNlKHN0ZDo6 c3RyaW5ne30sIGxvYyk7CQkvLyB7IGRnLWVycm9yICJyZXF1aXJlZCBmcm9tIGhlcmUiIH0KKyAg c3RkOjppc3ByaW50KG1ha2Vfc3RyPGNoYXIsIDA+KCksIGxvYyk7CS8vIHsgZGctZXJyb3IgInJl cXVpcmVkIGZyb20gaGVyZSIgfQorICBzdGQ6OmlzY250cmwobWFrZV9zdHI8Y2hhciwgMT4oKSwg bG9jKTsJLy8geyBkZy1lcnJvciAicmVxdWlyZWQgZnJvbSBoZXJlIiB9CisgIHN0ZDo6aXN1cHBl cihtYWtlX3N0cjxjaGFyLCAyPigpLCBsb2MpOwkvLyB7IGRnLWVycm9yICJyZXF1aXJlZCBmcm9t IGhlcmUiIH0KKyAgc3RkOjppc2xvd2VyKG1ha2Vfc3RyPGNoYXIsIDM+KCksIGxvYyk7CS8vIHsg ZGctZXJyb3IgInJlcXVpcmVkIGZyb20gaGVyZSIgfQorICBzdGQ6OmlzYWxwaGEobWFrZV9zdHI8 Y2hhciwgND4oKSwgbG9jKTsJLy8geyBkZy1lcnJvciAicmVxdWlyZWQgZnJvbSBoZXJlIiB9Cisg IHN0ZDo6aXNkaWdpdChtYWtlX3N0cjxjaGFyLCA1PigpLCBsb2MpOwkvLyB7IGRnLWVycm9yICJy ZXF1aXJlZCBmcm9tIGhlcmUiIH0KKyAgc3RkOjppc3B1bmN0KG1ha2Vfc3RyPGNoYXIsIDY+KCks IGxvYyk7CS8vIHsgZGctZXJyb3IgInJlcXVpcmVkIGZyb20gaGVyZSIgfQorICBzdGQ6OmlzeGRp Z2l0KG1ha2Vfc3RyPGNoYXIsIDc+KCksIGxvYyk7CS8vIHsgZGctZXJyb3IgInJlcXVpcmVkIGZy b20gaGVyZSIgfQorICBzdGQ6OmlzYWxudW0obWFrZV9zdHI8Y2hhciwgOD4oKSwgbG9jKTsJLy8g eyBkZy1lcnJvciAicmVxdWlyZWQgZnJvbSBoZXJlIiB9CisgIHN0ZDo6aXNncmFwaChtYWtlX3N0 cjxjaGFyLCA5PigpLCBsb2MpOwkvLyB7IGRnLWVycm9yICJyZXF1aXJlZCBmcm9tIGhlcmUiIH0K KyAgc3RkOjppc2JsYW5rKG1ha2Vfc3RyPGNoYXIsIDEwPigpLCBsb2MpOwkvLyB7IGRnLWVycm9y ICJyZXF1aXJlZCBmcm9tIGhlcmUiIH0KKyAgc3RkOjp0b3VwcGVyKG1ha2Vfc3RyPGNoYXIsIDEx PigpLCBsb2MpOwkvLyB7IGRnLWVycm9yICJyZXF1aXJlZCBmcm9tIGhlcmUiIH0KKyAgc3RkOjp0 b2xvd2VyKG1ha2Vfc3RyPGNoYXIsIDEyPigpLCBsb2MpOwkvLyB7IGRnLWVycm9yICJyZXF1aXJl ZCBmcm9tIGhlcmUiIH0KK30KKworI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCit2b2lkIHRl c3QwMigpCit7CisgIGNvbnN0IHN0ZDo6bG9jYWxlJiBsb2MgPSBzdGQ6OmxvY2FsZTo6Y2xhc3Np YygpOworCisgIHN0ZDo6aXNzcGFjZShzdGQ6OndzdHJpbmd7fSwgbG9jKTsJCS8vIHsgZGctZXJy b3IgInJlcXVpcmVkIGZyb20gaGVyZSIgfQorICBzdGQ6OmlzcHJpbnQobWFrZV9zdHI8d2NoYXJf dCwgMD4oKSwgbG9jKTsJLy8geyBkZy1lcnJvciAicmVxdWlyZWQgZnJvbSBoZXJlIiB9CisgIHN0 ZDo6aXNjbnRybChtYWtlX3N0cjx3Y2hhcl90LCAxPigpLCBsb2MpOwkvLyB7IGRnLWVycm9yICJy ZXF1aXJlZCBmcm9tIGhlcmUiIH0KKyAgc3RkOjppc3VwcGVyKG1ha2Vfc3RyPHdjaGFyX3QsIDI+ KCksIGxvYyk7CS8vIHsgZGctZXJyb3IgInJlcXVpcmVkIGZyb20gaGVyZSIgfQorICBzdGQ6Omlz bG93ZXIobWFrZV9zdHI8d2NoYXJfdCwgMz4oKSwgbG9jKTsJLy8geyBkZy1lcnJvciAicmVxdWly ZWQgZnJvbSBoZXJlIiB9CisgIHN0ZDo6aXNhbHBoYShtYWtlX3N0cjx3Y2hhcl90LCA0PigpLCBs b2MpOwkvLyB7IGRnLWVycm9yICJyZXF1aXJlZCBmcm9tIGhlcmUiIH0KKyAgc3RkOjppc2RpZ2l0 KG1ha2Vfc3RyPHdjaGFyX3QsIDU+KCksIGxvYyk7CS8vIHsgZGctZXJyb3IgInJlcXVpcmVkIGZy b20gaGVyZSIgfQorICBzdGQ6OmlzcHVuY3QobWFrZV9zdHI8d2NoYXJfdCwgNj4oKSwgbG9jKTsJ Ly8geyBkZy1lcnJvciAicmVxdWlyZWQgZnJvbSBoZXJlIiB9CisgIHN0ZDo6aXN4ZGlnaXQobWFr ZV9zdHI8d2NoYXJfdCwgNz4oKSwgbG9jKTsJLy8geyBkZy1lcnJvciAicmVxdWlyZWQgZnJvbSBo ZXJlIiB9CisgIHN0ZDo6aXNhbG51bShtYWtlX3N0cjx3Y2hhcl90LCA4PigpLCBsb2MpOwkvLyB7 IGRnLWVycm9yICJyZXF1aXJlZCBmcm9tIGhlcmUiIH0KKyAgc3RkOjppc2dyYXBoKG1ha2Vfc3Ry PHdjaGFyX3QsIDk+KCksIGxvYyk7CS8vIHsgZGctZXJyb3IgInJlcXVpcmVkIGZyb20gaGVyZSIg fQorICBzdGQ6OmlzYmxhbmsobWFrZV9zdHI8d2NoYXJfdCwgMTA+KCksIGxvYyk7CS8vIHsgZGct ZXJyb3IgInJlcXVpcmVkIGZyb20gaGVyZSIgfQorICBzdGQ6OnRvdXBwZXIobWFrZV9zdHI8d2No YXJfdCwgMTE+KCksIGxvYyk7CS8vIHsgZGctZXJyb3IgInJlcXVpcmVkIGZyb20gaGVyZSIgfQor ICBzdGQ6OnRvbG93ZXIobWFrZV9zdHI8d2NoYXJfdCwgMTI+KCksIGxvYyk7CS8vIHsgZGctZXJy b3IgInJlcXVpcmVkIGZyb20gaGVyZSIgfQorfQorI2VuZGlmCg== --000000000000f4845205c223cf9e--