From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from xry111.site (xry111.site [IPv6:2001:470:683e::1]) by sourceware.org (Postfix) with ESMTPS id 93DA03858C2A; Sat, 24 Jun 2023 12:14:31 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 93DA03858C2A Authentication-Results: sourceware.org; dmarc=pass (p=reject dis=none) header.from=xry111.site Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=xry111.site DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=xry111.site; s=default; t=1687608867; bh=5HvemF3R0rdSbzLIbjaV2KT+ngKMgHBVcUm0rFg+M0o=; h=Subject:From:To:Cc:Date:In-Reply-To:References:From; b=dSOc9alSnX6L9HZdTGH2nHCr05S0Nucm/sZgg5TEE+iPVIOU/S9W8TR29f3iFlnjS /I7XUBEEl0TyDoWcyEHbow9GK2gQ1rHBpi46SUUjjfSnwCJKB5XCRkjw1u3ER3mVfE ApTmJS0qr8erS8MIgg66FlsOI6poBBk4hXgk4gmQ= Received: from [192.168.124.11] (unknown [61.150.43.122]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-256) server-signature ECDSA (P-384) server-digest SHA384) (Client did not present a certificate) (Authenticated sender: xry111@xry111.site) by xry111.site (Postfix) with ESMTPSA id 742BA6627F; Sat, 24 Jun 2023 08:14:26 -0400 (EDT) Message-ID: <270cc948b2433f001ef3fb585520201752ac1a92.camel@xry111.site> Subject: Re: [PATCH 1/2] c++: implement __is_const built-in trait From: Xi Ruoyao To: Ken Matsui , gcc-patches@gcc.gnu.org Cc: libstdc++@gcc.gnu.org Date: Sat, 24 Jun 2023 20:14:24 +0800 In-Reply-To: <20230624103848.68000-1-kmatsui@cs.washington.edu> References: <20230322001142.13422-1-kmatsui@cs.washington.edu> <20230624103848.68000-1-kmatsui@cs.washington.edu> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable User-Agent: Evolution 3.48.3 MIME-Version: 1.0 X-Spam-Status: No, score=-5.5 required=5.0 tests=BAYES_00,BODY_8BITS,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,LIKELY_SPAM_FROM,RCVD_IN_BARRACUDACENTRAL,SPF_HELO_PASS,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE 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: Please use [PATCH v3 1/2] next time, now it's not easy to find the latest version of the series (I'm not sure if the number "3" is correct). On Sat, 2023-06-24 at 03:38 -0700, Ken Matsui via Gcc-patches wrote: > This patch implements built-in trait for std::is_const. >=20 > gcc/cp/ChangeLog: >=20 > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0* cp-trait.def: Define __= is_const. > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0* constraint.cc (diagnose= _trait_expr): Handle CPTK_IS_CONST. > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0* semantics.cc (trait_exp= r_value): Likewise. > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0(finish_trait_expr): Like= wise. >=20 > gcc/testsuite/ChangeLog: >=20 > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0* g++.dg/ext/has-builtin-= 1.C: Test existence of __is_const. > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0* g++.dg/ext/is_const.C: = New test. >=20 > Signed-off-by: Ken Matsui > --- > =C2=A0gcc/cp/constraint.cc=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= |=C2=A0 3 +++ > =C2=A0gcc/cp/cp-trait.def=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0 |=C2=A0 1 + > =C2=A0gcc/cp/semantics.cc=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0 |=C2=A0 4 ++++ > =C2=A0gcc/testsuite/g++.dg/ext/has-builtin-1.C |=C2=A0 3 +++ > =C2=A0gcc/testsuite/g++.dg/ext/is_const.C=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 |= 19 +++++++++++++++++++ > =C2=A05 files changed, 30 insertions(+) > =C2=A0create mode 100644 gcc/testsuite/g++.dg/ext/is_const.C >=20 > diff --git a/gcc/cp/constraint.cc b/gcc/cp/constraint.cc > index 8cf0f2d0974..ff4ae831def 100644 > --- a/gcc/cp/constraint.cc > +++ b/gcc/cp/constraint.cc > @@ -3751,6 +3751,9 @@ diagnose_trait_expr (tree expr, tree args) > =C2=A0=C2=A0=C2=A0=C2=A0 case CPTK_IS_UNION: > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 inform (loc, "=C2=A0 %qT is not a un= ion", t1); > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 break; > +=C2=A0=C2=A0=C2=A0 case CPTK_IS_CONST: > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 inform (loc, "=C2=A0 %qT is not a const t= ype", t1); > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 break; > =C2=A0=C2=A0=C2=A0=C2=A0 case CPTK_IS_AGGREGATE: > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 inform (loc, "=C2=A0 %qT is not an a= ggregate", t1); > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 break; > diff --git a/gcc/cp/cp-trait.def b/gcc/cp/cp-trait.def > index 8b7fece0cc8..b40b475b86d 100644 > --- a/gcc/cp/cp-trait.def > +++ b/gcc/cp/cp-trait.def > @@ -82,6 +82,7 @@ DEFTRAIT_EXPR (IS_TRIVIALLY_ASSIGNABLE, > "__is_trivially_assignable", 2) > =C2=A0DEFTRAIT_EXPR (IS_TRIVIALLY_CONSTRUCTIBLE, > "__is_trivially_constructible", -1) > =C2=A0DEFTRAIT_EXPR (IS_TRIVIALLY_COPYABLE, "__is_trivially_copyable", 1) > =C2=A0DEFTRAIT_EXPR (IS_UNION, "__is_union", 1) > +DEFTRAIT_EXPR (IS_CONST, "__is_const", 1) > =C2=A0DEFTRAIT_EXPR (REF_CONSTRUCTS_FROM_TEMPORARY, > "__reference_constructs_from_temporary", 2) > =C2=A0DEFTRAIT_EXPR (REF_CONVERTS_FROM_TEMPORARY, > "__reference_converts_from_temporary", 2) > =C2=A0/* FIXME Added space to avoid direct usage in GCC 13.=C2=A0 */ > diff --git a/gcc/cp/semantics.cc b/gcc/cp/semantics.cc > index 8fb47fd179e..011ba8e46e1 100644 > --- a/gcc/cp/semantics.cc > +++ b/gcc/cp/semantics.cc > @@ -12079,6 +12079,9 @@ trait_expr_value (cp_trait_kind kind, tree > type1, tree type2) > =C2=A0=C2=A0=C2=A0=C2=A0 case CPTK_IS_ENUM: > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return type_code1 =3D=3D ENUMERAL_TY= PE; > =C2=A0 > +=C2=A0=C2=A0=C2=A0 case CPTK_IS_CONST: > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return CP_TYPE_CONST_P (type1); > + > =C2=A0=C2=A0=C2=A0=C2=A0 case CPTK_IS_FINAL: > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return CLASS_TYPE_P (type1) && CLASS= TYPE_FINAL (type1); > =C2=A0 > @@ -12296,6 +12299,7 @@ finish_trait_expr (location_t loc, > cp_trait_kind kind, tree type1, tree type2) > =C2=A0=C2=A0=C2=A0=C2=A0 case CPTK_IS_ENUM: > =C2=A0=C2=A0=C2=A0=C2=A0 case CPTK_IS_UNION: > =C2=A0=C2=A0=C2=A0=C2=A0 case CPTK_IS_SAME: > +=C2=A0=C2=A0=C2=A0 case CPTK_IS_CONST: > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 break; > =C2=A0 > =C2=A0=C2=A0=C2=A0=C2=A0 case CPTK_IS_LAYOUT_COMPATIBLE: > diff --git a/gcc/testsuite/g++.dg/ext/has-builtin-1.C > b/gcc/testsuite/g++.dg/ext/has-builtin-1.C > index f343e153e56..965309a333a 100644 > --- a/gcc/testsuite/g++.dg/ext/has-builtin-1.C > +++ b/gcc/testsuite/g++.dg/ext/has-builtin-1.C > @@ -146,3 +146,6 @@ > =C2=A0#if !__has_builtin (__remove_cvref) > =C2=A0# error "__has_builtin (__remove_cvref) failed" > =C2=A0#endif > +#if !__has_builtin (__is_const) > +# error "__has_builtin (__is_const) failed" > +#endif > diff --git a/gcc/testsuite/g++.dg/ext/is_const.C > b/gcc/testsuite/g++.dg/ext/is_const.C > new file mode 100644 > index 00000000000..8f2d7c2fce9 > --- /dev/null > +++ b/gcc/testsuite/g++.dg/ext/is_const.C > @@ -0,0 +1,19 @@ > +// { dg-do compile { target c++11 } } > + > +#include > + > +using namespace __gnu_test; > + > +#define SA(X) static_assert((X),#X) > + > +// Positive tests. > +SA(__is_const(const int)); > +SA(__is_const(const volatile int)); > +SA(__is_const(cClassType)); > +SA(__is_const(cvClassType)); > + > +// Negative tests. > +SA(!__is_const(int)); > +SA(!__is_const(volatile int)); > +SA(!__is_const(ClassType)); > +SA(!__is_const(vClassType)); --=20 Xi Ruoyao School of Aerospace Science and Technology, Xidian University