From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx0a-00641c01.pphosted.com (mx0a-00641c01.pphosted.com [205.220.165.146]) by sourceware.org (Postfix) with ESMTPS id 0128F385E03D; Wed, 10 Jan 2024 19:59:20 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 0128F385E03D Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=gcc.gnu.org Authentication-Results: sourceware.org; spf=fail smtp.mailfrom=gcc.gnu.org ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 0128F385E03D Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=205.220.165.146 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1704916764; cv=none; b=fdZiKu380VKlO+Vk3C3S5AOqPMyeMnpTsPHAzvY2CCVfojgTYm5m+8IgatevwmZCYrkeZZNJRhmLdxOwwUHdDEc8n+HdGta4oMp6W+FnRA+gHNPB9IaIoDkogoQLmjlpyTOY7VkcKv0FClYyuKnb5KEiNrNcH8qf84SSECzZmcc= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1704916764; c=relaxed/simple; bh=mHARLXaUpeNXxoQGWAJKcPSzkU7v1Wqs7wk0j6hzmfU=; h=Date:From:To:Subject:Message-ID:MIME-Version; b=d4Xu+wHEl41mTK6u7ldkp7MkR+lM5ad54RBkfUqMSmM/ZRWVMdEQFe3aARjVXtkV7czQtKLEdbVKwitWKMkC90mU+wfJnwZ0IEKxs6TgASrruElm5he5Rk2Mu9bgv9t5nRZl+/B+4K8E7A0++PKt9WfrmRIGxXcXs+SVw1D1FgI= ARC-Authentication-Results: i=1; server2.sourceware.org Received: from pps.filterd (m0247471.ppops.net [127.0.0.1]) by mx0a-00641c01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 40AJtrc3031919; Wed, 10 Jan 2024 19:59:20 GMT Received: from mxout23.cac.washington.edu (mxout23.cac.washington.edu [140.142.32.140]) by mx0a-00641c01.pphosted.com (PPS) with ESMTPS id 3vj0y6rvmh-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 10 Jan 2024 19:59:19 +0000 Received: from smtp.washington.edu (smtp.washington.edu [140.142.234.157]) by mxout23.cac.washington.edu (8.14.4+UW20.07/8.14.4+UW22.04) with ESMTP id 40AJx0IH001005 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 10 Jan 2024 11:59:00 -0800 X-Auth-Received: from Kens-MacBook-Pro-4.local ([10.154.75.53]) (authenticated authid=kmatsui@cs.washington.edu) by smtp.washington.edu (8.16.1+UW21.10/8.14.4+UW19.10) with ESMTPSA id 40AJx05q021391 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 10 Jan 2024 11:59:00 -0800 X-UW-Orig-Sender: kmatsui@smtp.washington.edu Date: Wed, 10 Jan 2024 11:59:00 -0800 From: Ken Matsui To: Jonathan Wakely Cc: gcc-patches@gcc.gnu.org, libstdc++@gcc.gnu.org Subject: Re: [PATCH 13/14] c++: Implement __is_scalar built-in trait Message-ID: <7yfccdytyexn4xbuqzelmfzjzvrt43ige6pq6u3i2l75tsqdbw@6or5fhay7axe> References: <20240110194031.2384005-1-kmatsui@gcc.gnu.org> <20240110194031.2384005-14-kmatsui@gcc.gnu.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20240110194031.2384005-14-kmatsui@gcc.gnu.org> X-Proofpoint-ORIG-GUID: Ej30WFAY33pC9EPxet8D1R7ISSc8TBiC X-Proofpoint-GUID: Ej30WFAY33pC9EPxet8D1R7ISSc8TBiC X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.997,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2024-01-10_10,2024-01-10_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 bulkscore=0 mlxlogscore=645 clxscore=1034 suspectscore=0 adultscore=0 mlxscore=0 spamscore=0 impostorscore=0 malwarescore=0 lowpriorityscore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2311290000 definitions=main-2401100158 X-Spam-Status: No, score=-12.8 required=5.0 tests=BAYES_00,GIT_PATCH_0,JMQ_SPF_NEUTRAL,KAM_DMARC_STATUS,KAM_SHORT,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_NEUTRAL,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: On 01-10 (01:23), Ken Matsui wrote: > This patch implements built-in trait for std::is_scalar. > > gcc/cp/ChangeLog: > > * cp-trait.def: Define __is_scalar. > * constraint.cc (diagnose_trait_expr): Handle CPTK_IS_SCALAR. > * semantics.cc (trait_expr_value): Likewise. > (finish_trait_expr): Likewise. > > gcc/testsuite/ChangeLog: > > * g++.dg/ext/has-builtin-1.C: Test existence of __is_scalar. > * g++.dg/ext/is_scalar.C: New test. > > Signed-off-by: Ken Matsui > --- > gcc/cp/constraint.cc | 3 +++ > gcc/cp/cp-trait.def | 1 + > gcc/cp/semantics.cc | 10 +++++++++ > gcc/testsuite/g++.dg/ext/has-builtin-1.C | 3 +++ > gcc/testsuite/g++.dg/ext/is_scalar.C | 28 ++++++++++++++++++++++++ > 5 files changed, 45 insertions(+) > create mode 100644 gcc/testsuite/g++.dg/ext/is_scalar.C > > diff --git a/gcc/cp/constraint.cc b/gcc/cp/constraint.cc > index d2e41aa053d..7293f33c676 100644 > --- a/gcc/cp/constraint.cc > +++ b/gcc/cp/constraint.cc > @@ -3810,6 +3810,9 @@ diagnose_trait_expr (tree expr, tree args) > case CPTK_IS_SAME: > inform (loc, " %qT is not the same as %qT", t1, t2); > break; > + case CPTK_IS_SCALAR: > + inform (loc, " %qT is not a scalar type", t1); > + break; > case CPTK_IS_SCOPED_ENUM: > inform (loc, " %qT is not a scoped enum", t1); > break; > diff --git a/gcc/cp/cp-trait.def b/gcc/cp/cp-trait.def > index 6dac7622a7c..48e195b4938 100644 > --- a/gcc/cp/cp-trait.def > +++ b/gcc/cp/cp-trait.def > @@ -87,6 +87,7 @@ DEFTRAIT_EXPR (IS_POD, "__is_pod", 1) > DEFTRAIT_EXPR (IS_POLYMORPHIC, "__is_polymorphic", 1) > DEFTRAIT_EXPR (IS_REFERENCE, "__is_reference", 1) > DEFTRAIT_EXPR (IS_SAME, "__is_same", 2) > +DEFTRAIT_EXPR (IS_SCALAR, "__is_scalar", 1) > DEFTRAIT_EXPR (IS_SCOPED_ENUM, "__is_scoped_enum", 1) > DEFTRAIT_EXPR (IS_SIGNED, "__is_signed", 1) > DEFTRAIT_EXPR (IS_STD_LAYOUT, "__is_standard_layout", 1) > diff --git a/gcc/cp/semantics.cc b/gcc/cp/semantics.cc > index c3d6fc2d10f..2426ba629d9 100644 > --- a/gcc/cp/semantics.cc > +++ b/gcc/cp/semantics.cc > @@ -12545,6 +12545,15 @@ trait_expr_value (cp_trait_kind kind, tree type1, tree type2) > case CPTK_IS_SAME: > return same_type_p (type1, type2); > > + case CPTK_IS_SCALAR: > + return (TYPE_PTRDATAMEM_P (type1) > + || TREE_CODE (type1) == ENUMERAL_TYPE > + || integral_type_p (type1) > + || floating_point_type_p (type1) > + || TYPE_PTR_P (type1) > + || TYPE_PTRMEMFUNC_P (type1) > + || NULLPTR_TYPE_P (type1)); > + Hi Jonathan, Related to this Bugzilla report: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96710 do we want to update the is_scalar behavior? For this patch, I just followed the current implementation. > case CPTK_IS_SCOPED_ENUM: > return SCOPED_ENUM_P (type1); > > @@ -12744,6 +12753,7 @@ finish_trait_expr (location_t loc, cp_trait_kind kind, tree type1, tree type2) > case CPTK_IS_OBJECT: > case CPTK_IS_REFERENCE: > case CPTK_IS_SAME: > + case CPTK_IS_SCALAR: > case CPTK_IS_SCOPED_ENUM: > case CPTK_IS_SIGNED: > case CPTK_IS_UNION: > diff --git a/gcc/testsuite/g++.dg/ext/has-builtin-1.C b/gcc/testsuite/g++.dg/ext/has-builtin-1.C > index e3d16add403..c860f7e12ca 100644 > --- a/gcc/testsuite/g++.dg/ext/has-builtin-1.C > +++ b/gcc/testsuite/g++.dg/ext/has-builtin-1.C > @@ -143,6 +143,9 @@ > #if !__has_builtin (__is_same_as) > # error "__has_builtin (__is_same_as) failed" > #endif > +#if !__has_builtin (__is_scalar) > +# error "__has_builtin (__is_scalar) failed" > +#endif > #if !__has_builtin (__is_scoped_enum) > # error "__has_builtin (__is_scoped_enum) failed" > #endif > diff --git a/gcc/testsuite/g++.dg/ext/is_scalar.C b/gcc/testsuite/g++.dg/ext/is_scalar.C > new file mode 100644 > index 00000000000..ad4c2d7ea05 > --- /dev/null > +++ b/gcc/testsuite/g++.dg/ext/is_scalar.C > @@ -0,0 +1,28 @@ > +// { dg-do compile { target c++11 } } > + > +#define SA(X) static_assert((X),#X) > + > +#define SA_TEST_FN(TRAIT, TYPE, EXPECT) \ > + SA(TRAIT(TYPE) == EXPECT); \ > + SA(TRAIT(const TYPE) == EXPECT) > + > +#define SA_TEST_CATEGORY(TRAIT, TYPE, EXPECT) \ > + SA(TRAIT(TYPE) == EXPECT); \ > + SA(TRAIT(const TYPE) == EXPECT); \ > + SA(TRAIT(volatile TYPE) == EXPECT); \ > + SA(TRAIT(const volatile TYPE) == EXPECT) > + > +class ClassType { }; > +enum EnumType { e0 }; > + > +SA_TEST_CATEGORY(__is_scalar, int, true); > +SA_TEST_CATEGORY(__is_scalar, float, true); > +SA_TEST_CATEGORY(__is_scalar, EnumType, true); > +SA_TEST_CATEGORY(__is_scalar, int*, true); > +SA_TEST_FN(__is_scalar, int(*)(int), true); > +SA_TEST_CATEGORY(__is_scalar, int (ClassType::*), true); > +SA_TEST_FN(__is_scalar, int (ClassType::*) (int), true); > +SA_TEST_CATEGORY(__is_scalar, decltype(nullptr), true); > + > +// Sanity check. > +SA_TEST_CATEGORY(__is_scalar, ClassType, false); > -- > 2.43.0 >