From patchwork Mon Jun 12 22:22:26 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ken Matsui X-Patchwork-Id: 106920 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:994d:0:b0:3d9:f83d:47d9 with SMTP id k13csp168715vqr; Mon, 12 Jun 2023 15:28:02 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ5LXgpGZ7DPOcmACWEqgW508xsKv6gLIhZUSGzRDcHveuhSG/pHy22ruMDo//j2wQ6DgW+W X-Received: by 2002:aa7:cf02:0:b0:514:ae18:1637 with SMTP id a2-20020aa7cf02000000b00514ae181637mr5594338edy.23.1686608882754; Mon, 12 Jun 2023 15:28:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1686608882; cv=none; d=google.com; s=arc-20160816; b=iJMqHswPuDdc3ZJgyCqJ8BskSfal9KV3Ewoh21H70PrqW7C5sRJGBO8M4ykfgOc6hf nsCkCqjA8vh9Y5kW+/yU7yTJyA88oKP6P0NC4VjJDSvDG+IehfX2wFunlfMb7xqlQwMW u3YrWyLCRwgidFobk8omxgemJCcFzvanrxSjMs7BIVqQk9468POHdkOkV459eiGaTuo8 ZHoVB+etmFxcLgfY5samDjoO0V1QAQM1d25RT0S7Qla2bAcV2UWi6rb8CYlZweM+1UHV zTQoAGy7h24uNMbnOjm+ssn7HpG9gSYElwJ2X1njZuPxSA2fte8sZSYbBo5+GcZlSAxw FTaQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:reply-to:from:list-subscribe:list-help:list-post :list-archive:list-unsubscribe:list-id:precedence :content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:dmarc-filter:delivered-to :dkim-signature:dkim-filter; bh=9SMc1X72W34ObhJqoBl5i2zWXqv4ycryFhIrUGzTALQ=; b=R4MAmAiA9te1gPP2p2iJ0jMCFYyReO7Y/gDT0487tw8hv5u8omCrf5QdXVSnO6GN4H Q3qgkGHpmwkdPsRjB0T4U6L66/6laOJYrORSGAo5LT9YQN+V/H3Cd7N+NUnZQWkHn5Uq lP4PHqozMerM3QVdkiIAod8dWyp1k6P7nrX3J53TnVABnXHt6fArpFHt5K8ZKJN4yzDx WGeOw/OaOW32p4IQRFe58Btk2IxmdRllgFf7TZAWuf16T+oKMdDlTJ2Df5Kt4udfRi1D Yx+9TDOpq3ClKIQSBA8Efw91N2iYVIaGy0uQq36gWJGnJaE/phH79a+31d6ZdY+CUuKd eUqw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=AI+ArV1+; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnu.org Received: from sourceware.org (ip-8-43-85-97.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id o8-20020aa7c7c8000000b00516452905f5si6644529eds.233.2023.06.12.15.28.02 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 12 Jun 2023 15:28:02 -0700 (PDT) Received-SPF: pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) client-ip=8.43.85.97; Authentication-Results: mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=AI+ArV1+; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnu.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 0361E3855587 for ; Mon, 12 Jun 2023 22:27:24 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 0361E3855587 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1686608844; bh=9SMc1X72W34ObhJqoBl5i2zWXqv4ycryFhIrUGzTALQ=; h=To:Cc:Subject:Date:In-Reply-To:References:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=AI+ArV1+pqQ1wwBWiiWmO5IpUT9r7lmEHnUzk7J8PisEs8UluVmBYxdb+se/Q7nqe N1ZOeOJrwPI+QkmyLcE2TI6VuxqfTLjw/thcV5mGQOci6CCrMO9kUqEZVDU7Wk8EkL tqIpeWOXYb8Z/XhTrTT7F9yxyW0an5FyurAguAMQ= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mx0b-00641c01.pphosted.com (mx0b-00641c01.pphosted.com [205.220.177.146]) by sourceware.org (Postfix) with ESMTPS id A6F8F3858C33; Mon, 12 Jun 2023 22:26:37 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org A6F8F3858C33 Received: from pps.filterd (m0247477.ppops.net [127.0.0.1]) by mx0a-00641c01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 35CMPt0u011683; Mon, 12 Jun 2023 22:26:37 GMT Received: from mxout22.s.uw.edu (mxout22.s.uw.edu [128.95.242.222]) by mx0a-00641c01.pphosted.com (PPS) with ESMTPS id 3r64pu3xq7-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 12 Jun 2023 22:26:37 +0000 Received: from smtp.washington.edu (smtp.washington.edu [128.208.60.132]) by mxout22.s.uw.edu (8.14.4+UW20.07/8.14.4+UW22.04) with ESMTP id 35CMQ5lb012813 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 12 Jun 2023 15:26:05 -0700 X-Auth-Received: from localhost.localdomain ([10.154.74.234]) (authenticated authid=kmatsui) by smtp.washington.edu (8.16.1+UW21.10/8.14.4+UW19.10) with ESMTPSA id 35CMPHWq012136 (version=TLSv1.2 cipher=DHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT); Mon, 12 Jun 2023 15:26:05 -0700 X-UW-Orig-Sender: kmatsui@smtp.washington.edu To: gcc-patches@gcc.gnu.org Cc: libstdc++@gcc.gnu.org, Ken Matsui Subject: [PATCH v5 1/6] c++: implement __is_reference built-in trait Date: Mon, 12 Jun 2023 15:22:26 -0700 Message-ID: <20230612222515.20102-2-kmatsui@cs.washington.edu> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230612222515.20102-1-kmatsui@cs.washington.edu> References: <20230611024657.42846-1-kmatsui@cs.washington.edu> <20230612222515.20102-1-kmatsui@cs.washington.edu> MIME-Version: 1.0 X-Proofpoint-GUID: EPjMcIz0WWFyJ4UpTovq11Jzkm0AYub7 X-Proofpoint-ORIG-GUID: EPjMcIz0WWFyJ4UpTovq11Jzkm0AYub7 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.254,Aquarius:18.0.957,Hydra:6.0.573,FMLib:17.11.176.26 definitions=2023-06-12_16,2023-06-12_02,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 suspectscore=0 clxscore=1015 malwarescore=0 mlxlogscore=937 mlxscore=0 phishscore=0 priorityscore=1501 spamscore=0 impostorscore=0 bulkscore=0 lowpriorityscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2305260000 definitions=main-2306120193 X-Spam-Status: No, score=-13.9 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, RCVD_IN_DNSWL_LOW, SPF_HELO_NONE, 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 X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Ken Matsui via Gcc-patches From: Ken Matsui Reply-To: Ken Matsui Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org Sender: "Gcc-patches" X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1761403504084199226?= X-GMAIL-MSGID: =?utf-8?q?1768537595901755764?= This patch implements built-in trait for std::is_reference. gcc/cp/ChangeLog: * cp-trait.def: Define __is_reference. * constraint.cc (diagnose_trait_expr): Handle CPTK_IS_REFERENCE. * semantics.cc (trait_expr_value): Likewise. (finish_trait_expr): Likewise. gcc/testsuite/ChangeLog: * g++.dg/ext/has-builtin-1.C: Test existence of __is_reference. * g++.dg/ext/is_reference.C: New test. Signed-off-by: Ken Matsui --- gcc/cp/constraint.cc | 3 +++ gcc/cp/cp-trait.def | 1 + gcc/cp/semantics.cc | 4 +++ gcc/testsuite/g++.dg/ext/has-builtin-1.C | 3 +++ gcc/testsuite/g++.dg/ext/is_reference.C | 34 ++++++++++++++++++++++++ 5 files changed, 45 insertions(+) create mode 100644 gcc/testsuite/g++.dg/ext/is_reference.C diff --git a/gcc/cp/constraint.cc b/gcc/cp/constraint.cc index 8cf0f2d0974..f6951ee2670 100644 --- a/gcc/cp/constraint.cc +++ b/gcc/cp/constraint.cc @@ -3705,6 +3705,9 @@ diagnose_trait_expr (tree expr, tree args) case CPTK_HAS_VIRTUAL_DESTRUCTOR: inform (loc, " %qT does not have a virtual destructor", t1); break; + case CPTK_IS_REFERENCE: + inform (loc, " %qT is not a reference", t1); + break; case CPTK_IS_ABSTRACT: inform (loc, " %qT is not an abstract class", t1); break; diff --git a/gcc/cp/cp-trait.def b/gcc/cp/cp-trait.def index 8b7fece0cc8..1e3310cd682 100644 --- a/gcc/cp/cp-trait.def +++ b/gcc/cp/cp-trait.def @@ -67,6 +67,7 @@ DEFTRAIT_EXPR (IS_CONVERTIBLE, "__is_convertible", 2) DEFTRAIT_EXPR (IS_EMPTY, "__is_empty", 1) DEFTRAIT_EXPR (IS_ENUM, "__is_enum", 1) DEFTRAIT_EXPR (IS_FINAL, "__is_final", 1) +DEFTRAIT_EXPR (IS_REFERENCE, "__is_reference", 1) DEFTRAIT_EXPR (IS_LAYOUT_COMPATIBLE, "__is_layout_compatible", 2) DEFTRAIT_EXPR (IS_LITERAL_TYPE, "__is_literal_type", 1) DEFTRAIT_EXPR (IS_NOTHROW_ASSIGNABLE, "__is_nothrow_assignable", 2) diff --git a/gcc/cp/semantics.cc b/gcc/cp/semantics.cc index a2e74a5d2c7..2f37bc353a1 100644 --- a/gcc/cp/semantics.cc +++ b/gcc/cp/semantics.cc @@ -12075,6 +12075,9 @@ trait_expr_value (cp_trait_kind kind, tree type1, tree type2) case CPTK_IS_FINAL: return CLASS_TYPE_P (type1) && CLASSTYPE_FINAL (type1); + case CPTK_IS_REFERENCE: + return type_code1 == REFERENCE_TYPE; + case CPTK_IS_LAYOUT_COMPATIBLE: return layout_compatible_type_p (type1, type2); @@ -12289,6 +12292,7 @@ finish_trait_expr (location_t loc, cp_trait_kind kind, tree type1, tree type2) case CPTK_IS_ENUM: case CPTK_IS_UNION: case CPTK_IS_SAME: + case CPTK_IS_REFERENCE: break; 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..b697673790c 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 @@ #if !__has_builtin (__remove_cvref) # error "__has_builtin (__remove_cvref) failed" #endif +#if !__has_builtin (__is_reference) +# error "__has_builtin (__is_reference) failed" +#endif diff --git a/gcc/testsuite/g++.dg/ext/is_reference.C b/gcc/testsuite/g++.dg/ext/is_reference.C new file mode 100644 index 00000000000..b5ce4db7afd --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/is_reference.C @@ -0,0 +1,34 @@ +// { dg-do compile { target c++11 } } + +#include + +using namespace __gnu_test; + +#define SA(X) static_assert((X),#X) +#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) + +// Positive tests. +SA_TEST_CATEGORY(__is_reference, int&, true); +SA_TEST_CATEGORY(__is_reference, ClassType&, true); +SA(__is_reference(int(&)(int))); +SA_TEST_CATEGORY(__is_reference, int&&, true); +SA_TEST_CATEGORY(__is_reference, ClassType&&, true); +SA(__is_reference(int(&&)(int))); +SA_TEST_CATEGORY(__is_reference, IncompleteClass&, true); + +// Negative tests +SA_TEST_CATEGORY(__is_reference, void, false); +SA_TEST_CATEGORY(__is_reference, int*, false); +SA_TEST_CATEGORY(__is_reference, int[3], false); +SA(!__is_reference(int(int))); +SA(!__is_reference(int(*const)(int))); +SA(!__is_reference(int(*volatile)(int))); +SA(!__is_reference(int(*const volatile)(int))); + +// Sanity check. +SA_TEST_CATEGORY(__is_reference, ClassType, false); +SA_TEST_CATEGORY(__is_reference, IncompleteClass, false); From patchwork Mon Jun 12 22:22:27 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ken Matsui X-Patchwork-Id: 106921 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:994d:0:b0:3d9:f83d:47d9 with SMTP id k13csp169013vqr; Mon, 12 Jun 2023 15:28:50 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ5PQSsruMQjmZ74wFobTDo0dFHnOiFTUT9dhtBCf2yUP4ZuR8BjXAkP/akLiVYs7pcliJJz X-Received: by 2002:a17:907:7f07:b0:96f:6c70:c012 with SMTP id qf7-20020a1709077f0700b0096f6c70c012mr9204059ejc.45.1686608930299; Mon, 12 Jun 2023 15:28:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1686608930; cv=none; d=google.com; s=arc-20160816; b=llERTFJ3XtGSp1MWxvXsYjjyfgp3jgtJBvisQSka/0GL+hDjh6EJqii5Of+w2TjoYm QbxlwInSe9xc5NA3P/uRO9Oy1jh76J6v1Q4JVIdlWK06fIrX+fgG224REPwdZgP6kz31 /g4d5DE1VsHDhG3Ytj/7CpSLabLAFOn46j4LhiKbJf5oA2bJ7+4pC3+AgzFexPylTFtx tG5le5CCGZhyz09DetF9nc/FhCQCle4ewwB0cQ3sVjs4DTDQ8DGiMZxhc9BD1mk2ZZWN mkn/KJwapM4TfNZIk5rjpYwozP5QW5aPt8jb5WRp5zChG6D+KJ8Es2zhLyuRUDycUOt+ es6w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:reply-to:from:list-subscribe:list-help:list-post :list-archive:list-unsubscribe:list-id:precedence :content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:dmarc-filter:delivered-to :dkim-signature:dkim-filter; bh=9zO52OB0mmjDRkmyHg7lw7x3AWyRv6b7DhbppmEASZE=; b=XMwZnGFuX7Rgv1YGdWP9/2JPJhzsBL+NtkjI/aDoQdPYDlQtd0zPUMKclpR4cSLAcT tCxvdr0RDH1R7OYWsN0qFYVfo07oBXIBujstuHOlurjLunS2AUoFARknYl+IXZO8bj9l qY6J8FuIixAj9u/z8UvDRp35os69vFNJAEVavuw1D/QxPoKgA/YRliec5qG6ikS/xBYM G17vMExrAuw/MawNiGc9i4rsQYaZtIo7emwqh9iRfB0+vH1HDZudXZrgiQhAXOZY8NR/ uyTiSOdboiw+3WtNipYMQY1TUaqcqBAQJKx2OGaxu3B7/h9dbom3tMhL5/+g/k34L2iZ 5afA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=sm1C+Vux; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnu.org Received: from sourceware.org (ip-8-43-85-97.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id pw7-20020a17090720a700b00965f62c51adsi5464640ejb.524.2023.06.12.15.28.50 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 12 Jun 2023 15:28:50 -0700 (PDT) Received-SPF: pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) client-ip=8.43.85.97; Authentication-Results: mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=sm1C+Vux; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnu.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id D490F38560B9 for ; Mon, 12 Jun 2023 22:28:20 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org D490F38560B9 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1686608900; bh=9zO52OB0mmjDRkmyHg7lw7x3AWyRv6b7DhbppmEASZE=; h=To:Cc:Subject:Date:In-Reply-To:References:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=sm1C+VuxAtsIAlQHLIxQkz6ArI2tRIeNzO+WUcFZtLVHAGbjoA7VCV1U+XsKiuEqE NPcX2xv/fnB6Axbdki9nlKw1wC9tS0HrqZeZsYcEr8J/SaF2ECIQC0HnS77Gdt746N JHcVHOlMth2u62zWYnnR9RM7Oms/sQdmlq1UGSSE= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mx0a-00641c01.pphosted.com (mx0a-00641c01.pphosted.com [205.220.165.146]) by sourceware.org (Postfix) with ESMTPS id 64CC63857724; Mon, 12 Jun 2023 22:26:55 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 64CC63857724 Received: from pps.filterd (m0247474.ppops.net [127.0.0.1]) by mx0a-00641c01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 35CMBiD6009129; Mon, 12 Jun 2023 22:26:54 GMT Received: from mxout26.s.uw.edu (mxout26.s.uw.edu [140.142.234.176]) by mx0a-00641c01.pphosted.com (PPS) with ESMTPS id 3r65enbmbf-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 12 Jun 2023 22:26:54 +0000 Received: from smtp.washington.edu (smtp.washington.edu [128.208.60.132]) by mxout26.s.uw.edu (8.14.4+UW20.07/8.14.4+UW22.04) with ESMTP id 35CMQkqV001218 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 12 Jun 2023 15:26:46 -0700 X-Auth-Received: from localhost.localdomain ([10.154.74.234]) (authenticated authid=kmatsui) by smtp.washington.edu (8.16.1+UW21.10/8.14.4+UW19.10) with ESMTPSA id 35CMPHWr012136 (version=TLSv1.2 cipher=DHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT); Mon, 12 Jun 2023 15:26:46 -0700 X-UW-Orig-Sender: kmatsui@smtp.washington.edu To: gcc-patches@gcc.gnu.org Cc: libstdc++@gcc.gnu.org, Ken Matsui Subject: [PATCH v5 2/6] libstdc++: use new built-in trait __is_reference for std::is_reference Date: Mon, 12 Jun 2023 15:22:27 -0700 Message-ID: <20230612222515.20102-3-kmatsui@cs.washington.edu> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230612222515.20102-1-kmatsui@cs.washington.edu> References: <20230611024657.42846-1-kmatsui@cs.washington.edu> <20230612222515.20102-1-kmatsui@cs.washington.edu> MIME-Version: 1.0 X-Proofpoint-GUID: S86u8hHFn5fcvoCw8X6FWvdOoqmPVw1V X-Proofpoint-ORIG-GUID: S86u8hHFn5fcvoCw8X6FWvdOoqmPVw1V X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.254,Aquarius:18.0.957,Hydra:6.0.573,FMLib:17.11.176.26 definitions=2023-06-12_16,2023-06-12_02,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 lowpriorityscore=0 bulkscore=0 priorityscore=1501 mlxscore=0 phishscore=0 clxscore=1015 impostorscore=0 malwarescore=0 mlxlogscore=915 adultscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2305260000 definitions=main-2306120193 X-Spam-Status: No, score=-14.0 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, RCVD_IN_DNSWL_LOW, SPF_HELO_NONE, 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 X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Ken Matsui via Gcc-patches From: Ken Matsui Reply-To: Ken Matsui Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org Sender: "Gcc-patches" X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1761403419712597188?= X-GMAIL-MSGID: =?utf-8?q?1768537645594275811?= This patch gets std::is_reference to dispatch to new built-in trait __is_reference. libstdc++-v3/ChangeLog: * include/std/type_traits (is_reference): Use __is_reference built-in trait. (is_reference_v): Likewise. Signed-off-by: Ken Matsui --- libstdc++-v3/include/std/type_traits | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/libstdc++-v3/include/std/type_traits b/libstdc++-v3/include/std/type_traits index 0e7a9c9c7f3..2a14df7e5f9 100644 --- a/libstdc++-v3/include/std/type_traits +++ b/libstdc++-v3/include/std/type_traits @@ -639,6 +639,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION // Composite type categories. /// is_reference +#if __has_builtin(__is_reference) + template + struct is_reference + : public __bool_constant<__is_reference(_Tp)> + { }; +#else template struct is_reference : public false_type @@ -653,6 +659,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION struct is_reference<_Tp&&> : public true_type { }; +#endif /// is_arithmetic template @@ -3192,12 +3199,19 @@ template inline constexpr bool is_class_v = __is_class(_Tp); template inline constexpr bool is_function_v = is_function<_Tp>::value; + +#if __has_builtin(__is_reference) +template + inline constexpr bool is_reference_v = __is_reference(_Tp); +#else template inline constexpr bool is_reference_v = false; template inline constexpr bool is_reference_v<_Tp&> = true; template inline constexpr bool is_reference_v<_Tp&&> = true; +#endif + template inline constexpr bool is_arithmetic_v = is_arithmetic<_Tp>::value; template From patchwork Mon Jun 12 22:22:28 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ken Matsui X-Patchwork-Id: 106922 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:994d:0:b0:3d9:f83d:47d9 with SMTP id k13csp169222vqr; Mon, 12 Jun 2023 15:29:22 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ4caRVTJTuKiJJiJYxMPks3LazJxJH0MKXwBB7BKO+YkT7w/K+cynLPVKu+TgVuyx8mZOmQ X-Received: by 2002:a17:907:707:b0:96a:1ec1:2c9f with SMTP id xb7-20020a170907070700b0096a1ec12c9fmr10067238ejb.12.1686608961535; Mon, 12 Jun 2023 15:29:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1686608961; cv=none; d=google.com; s=arc-20160816; b=h1m81lc5vFbk7ANKBd+oLNWkaQthgRod98PrShbxwh9VgUynyWEHFcdhA4Yyv8s1TC EAtZLAaNoCoOP/Fj3MkcplaB7ZNFOh2WiQcRK9Ne6QYX8WxZA84SzbIwtCVnZyJETDqa VVt2uD4DyPT/Wra408ln65Z19j6bGCmLoZ34RR27ErsLk32i7riHeRX4mBWHL1Jkz/nj NB0RA88TGlDKU3LaROfBgR0sTQXH8dGtoVFq8GfC/RXgbiwPJ7LiTcf4Ppltbw3rYqFr EqCUHp571yAE3dD/g4r0C/jIOy4xoOjZQfzgpHtdzrQ1coywz9QgVrwHSwOowbQSuQOx pKDA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:reply-to:from:list-subscribe:list-help:list-post :list-archive:list-unsubscribe:list-id:precedence :content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:dmarc-filter:delivered-to :dkim-signature:dkim-filter; bh=UzNUoI4dSZsW9nfCfNNAd4P3gkJqQDkV7Bd9y9Y02NA=; b=MFAC2HbWIL8juZJ1lwB7kIIzkZ27zKs36Zo2s9elYXj2r65E3HZpEgEOvKrUNXjLZ9 ak5UjezWNXstExNxvaw6oyT2Nua5mXarDFkEwro8gs6V8DfY90oJABeOOsW8glR7H9x8 6johbMDYVJI2hgOcaBXsj+JqRV/7/SJ9M8azldJIJdtVyEq1w2Da5Pu+79MD8dHqO0iM e8rL4SBDZ91I352nWv07fW2oyUuVM6MTJtoNydxi/CWjoIp/UWcmVPKyE1eZycJuy3jP it5KdlUctX4mR3ySltyqKdVYO676A9AEyPQEqPLSnEF4q7qjPxRoQRjaoPwyLBIe60I+ KW6g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=PXbRwSVP; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnu.org Received: from sourceware.org (ip-8-43-85-97.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id e2-20020a1709067e0200b0094f712dac55si5698990ejr.734.2023.06.12.15.29.21 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 12 Jun 2023 15:29:21 -0700 (PDT) Received-SPF: pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) client-ip=8.43.85.97; Authentication-Results: mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=PXbRwSVP; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnu.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 42F6A38558B6 for ; Mon, 12 Jun 2023 22:28:47 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 42F6A38558B6 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1686608927; bh=UzNUoI4dSZsW9nfCfNNAd4P3gkJqQDkV7Bd9y9Y02NA=; h=To:Cc:Subject:Date:In-Reply-To:References:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=PXbRwSVPBpKB9IESqbknnnKlIIacrBRConaNOhp8S8mdauiA7R+JojeheFmeygmcN M3gU4isrDuSh4Zlrl+VKlrR2oHbTIEmgoLo8Y4ENEiPaeXngYAeTG5b1rECrBOdK0+ Mypr0yoxHCfThsaxBbouPs8IANaNaYNIyr2kPTbk= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mx0b-00641c01.pphosted.com (mx0b-00641c01.pphosted.com [205.220.177.146]) by sourceware.org (Postfix) with ESMTPS id 3389E3856607; Mon, 12 Jun 2023 22:28:04 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 3389E3856607 Received: from pps.filterd (m0247476.ppops.net [127.0.0.1]) by mx0a-00641c01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 35CM6SV3004365; Mon, 12 Jun 2023 22:28:03 GMT Received: from mxout22.s.uw.edu (mxout22.s.uw.edu [128.95.242.222]) by mx0a-00641c01.pphosted.com (PPS) with ESMTPS id 3r68th1gkt-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 12 Jun 2023 22:28:03 +0000 Received: from smtp.washington.edu (smtp.washington.edu [128.208.60.132]) by mxout22.s.uw.edu (8.14.4+UW20.07/8.14.4+UW22.04) with ESMTP id 35CMRuId013275 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 12 Jun 2023 15:27:56 -0700 X-Auth-Received: from localhost.localdomain ([10.154.74.234]) (authenticated authid=kmatsui) by smtp.washington.edu (8.16.1+UW21.10/8.14.4+UW19.10) with ESMTPSA id 35CMPHWs012136 (version=TLSv1.2 cipher=DHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT); Mon, 12 Jun 2023 15:27:56 -0700 X-UW-Orig-Sender: kmatsui@smtp.washington.edu To: gcc-patches@gcc.gnu.org Cc: libstdc++@gcc.gnu.org, Ken Matsui Subject: [PATCH v5 3/6] c++: implement __is_function built-in trait Date: Mon, 12 Jun 2023 15:22:28 -0700 Message-ID: <20230612222515.20102-4-kmatsui@cs.washington.edu> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230612222515.20102-1-kmatsui@cs.washington.edu> References: <20230611024657.42846-1-kmatsui@cs.washington.edu> <20230612222515.20102-1-kmatsui@cs.washington.edu> MIME-Version: 1.0 X-Proofpoint-ORIG-GUID: I3VuzUkE7DUeXYF_W3gi0ZVtxkVVNQyL X-Proofpoint-GUID: I3VuzUkE7DUeXYF_W3gi0ZVtxkVVNQyL X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.254,Aquarius:18.0.957,Hydra:6.0.573,FMLib:17.11.176.26 definitions=2023-06-12_16,2023-06-12_02,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 priorityscore=1501 phishscore=0 mlxscore=0 suspectscore=0 spamscore=0 clxscore=1015 mlxlogscore=999 lowpriorityscore=0 malwarescore=0 adultscore=0 impostorscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2305260000 definitions=main-2306120193 X-Spam-Status: No, score=-14.0 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, RCVD_IN_DNSWL_LOW, SPF_HELO_NONE, 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 X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Ken Matsui via Gcc-patches From: Ken Matsui Reply-To: Ken Matsui Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org Sender: "Gcc-patches" X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1761403931159934367?= X-GMAIL-MSGID: =?utf-8?q?1768537678251285927?= This patch implements built-in trait for std::is_function. gcc/cp/ChangeLog: * cp-trait.def: Define __is_function. * constraint.cc (diagnose_trait_expr): Handle CPTK_IS_FUNCTION. * semantics.cc (trait_expr_value): Likewise. (finish_trait_expr): Likewise. gcc/testsuite/ChangeLog: * g++.dg/ext/has-builtin-1.C: Test existence of __is_function. * g++.dg/ext/is_function.C: New test. Signed-off-by: Ken Matsui --- gcc/cp/constraint.cc | 3 ++ gcc/cp/cp-trait.def | 1 + gcc/cp/semantics.cc | 4 ++ gcc/testsuite/g++.dg/ext/has-builtin-1.C | 3 ++ gcc/testsuite/g++.dg/ext/is_function.C | 58 ++++++++++++++++++++++++ 5 files changed, 69 insertions(+) create mode 100644 gcc/testsuite/g++.dg/ext/is_function.C diff --git a/gcc/cp/constraint.cc b/gcc/cp/constraint.cc index f6951ee2670..927605c6cb7 100644 --- a/gcc/cp/constraint.cc +++ b/gcc/cp/constraint.cc @@ -3754,6 +3754,9 @@ diagnose_trait_expr (tree expr, tree args) case CPTK_IS_UNION: inform (loc, " %qT is not a union", t1); break; + case CPTK_IS_FUNCTION: + inform (loc, " %qT is not a function", t1); + break; case CPTK_IS_AGGREGATE: inform (loc, " %qT is not an aggregate", t1); break; diff --git a/gcc/cp/cp-trait.def b/gcc/cp/cp-trait.def index 1e3310cd682..3cd3babc242 100644 --- a/gcc/cp/cp-trait.def +++ b/gcc/cp/cp-trait.def @@ -83,6 +83,7 @@ DEFTRAIT_EXPR (IS_TRIVIALLY_ASSIGNABLE, "__is_trivially_assignable", 2) DEFTRAIT_EXPR (IS_TRIVIALLY_CONSTRUCTIBLE, "__is_trivially_constructible", -1) DEFTRAIT_EXPR (IS_TRIVIALLY_COPYABLE, "__is_trivially_copyable", 1) DEFTRAIT_EXPR (IS_UNION, "__is_union", 1) +DEFTRAIT_EXPR (IS_FUNCTION, "__is_function", 1) DEFTRAIT_EXPR (REF_CONSTRUCTS_FROM_TEMPORARY, "__reference_constructs_from_temporary", 2) DEFTRAIT_EXPR (REF_CONVERTS_FROM_TEMPORARY, "__reference_converts_from_temporary", 2) /* FIXME Added space to avoid direct usage in GCC 13. */ diff --git a/gcc/cp/semantics.cc b/gcc/cp/semantics.cc index 2f37bc353a1..b976633645a 100644 --- a/gcc/cp/semantics.cc +++ b/gcc/cp/semantics.cc @@ -12072,6 +12072,9 @@ trait_expr_value (cp_trait_kind kind, tree type1, tree type2) case CPTK_IS_ENUM: return type_code1 == ENUMERAL_TYPE; + case CPTK_IS_FUNCTION: + return type_code1 == FUNCTION_TYPE; + case CPTK_IS_FINAL: return CLASS_TYPE_P (type1) && CLASSTYPE_FINAL (type1); @@ -12293,6 +12296,7 @@ finish_trait_expr (location_t loc, cp_trait_kind kind, tree type1, tree type2) case CPTK_IS_UNION: case CPTK_IS_SAME: case CPTK_IS_REFERENCE: + case CPTK_IS_FUNCTION: break; 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 b697673790c..90eb00ebf2d 100644 --- a/gcc/testsuite/g++.dg/ext/has-builtin-1.C +++ b/gcc/testsuite/g++.dg/ext/has-builtin-1.C @@ -149,3 +149,6 @@ #if !__has_builtin (__is_reference) # error "__has_builtin (__is_reference) failed" #endif +#if !__has_builtin (__is_function) +# error "__has_builtin (__is_function) failed" +#endif diff --git a/gcc/testsuite/g++.dg/ext/is_function.C b/gcc/testsuite/g++.dg/ext/is_function.C new file mode 100644 index 00000000000..2e1594b12ad --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/is_function.C @@ -0,0 +1,58 @@ +// { dg-do compile { target c++11 } } + +#include + +using namespace __gnu_test; + +#define SA(X) static_assert((X),#X) +#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) + +struct A +{ void fn(); }; + +template +struct AHolder { }; + +template +struct AHolder +{ using type = U; }; + +// Positive tests. +SA(__is_function(int (int))); +SA(__is_function(ClassType (ClassType))); +SA(__is_function(float (int, float, int[], int&))); +SA(__is_function(int (int, ...))); +SA(__is_function(bool (ClassType) const)); +SA(__is_function(AHolder::type)); + +void fn(); +SA(__is_function(decltype(fn))); + +// Negative tests. +SA_TEST_CATEGORY(__is_function, int, false); +SA_TEST_CATEGORY(__is_function, int*, false); +SA_TEST_CATEGORY(__is_function, int&, false); +SA_TEST_CATEGORY(__is_function, void, false); +SA_TEST_CATEGORY(__is_function, void*, false); +SA_TEST_CATEGORY(__is_function, void**, false); +SA_TEST_CATEGORY(__is_function, std::nullptr_t, false); + +SA_TEST_CATEGORY(__is_function, AbstractClass, false); +SA(!__is_function(int(&)(int))); +SA(!__is_function(int(*)(int))); + +SA_TEST_CATEGORY(__is_function, A, false); +SA_TEST_CATEGORY(__is_function, decltype(&A::fn), false); + +struct FnCallOverload +{ void operator()(); }; +SA_TEST_CATEGORY(__is_function, FnCallOverload, false); + +// Sanity check. +SA_TEST_CATEGORY(__is_function, ClassType, false); +SA_TEST_CATEGORY(__is_function, IncompleteClass, false); +SA_TEST_CATEGORY(__is_function, IncompleteUnion, false); From patchwork Mon Jun 12 22:22:29 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ken Matsui X-Patchwork-Id: 106923 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:994d:0:b0:3d9:f83d:47d9 with SMTP id k13csp169993vqr; Mon, 12 Jun 2023 15:31:11 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ6Gv9jQQB98DdQbSLEbFmwJuYwO9e2oGto24w4I+ZNjxMzrkOM4MUuclE3RnXdoxiQCTLtN X-Received: by 2002:aa7:c50e:0:b0:514:a302:c334 with SMTP id o14-20020aa7c50e000000b00514a302c334mr7661615edq.14.1686609071428; Mon, 12 Jun 2023 15:31:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1686609071; cv=none; d=google.com; s=arc-20160816; b=r7dSMN918U3XpUwkOgxdh+6DNysERI/UpqupXbY0S1xHmVVoHKGJDK3rGf4ec5fGUz MWC9tYxsZPeepi3uyxpt6sxrKE6vmSPn360o+WtQDXmiCm1O6Ym45W2kUyGwUhN/RC7x ug88ypaqUFBRsvpGkBrHHugoxOHLIMoy73m2y0Bf4nMEwmKhpfYXAhsSAGZfT4nWOJub hl27SVk1xxOJOcenqA/BOfsNqKb+Owk+h/J9ZKfUQBRJHGpyGUF2lcyR5STH0O5u4gbz 7hYFA0Ti9ou6H1VIilB2gm2JPuD+5Zxe6/NPOydGdNhhoZBtiu/G+FmnG6A7XhmFA54y TNHQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:reply-to:from:list-subscribe:list-help:list-post :list-archive:list-unsubscribe:list-id:precedence :content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:dmarc-filter:delivered-to :dkim-signature:dkim-filter; bh=04VewB/RAMm93cpFGTCtIDTISjoywraRjnRgozCa2o0=; b=LXMWHIz2OcKEDa92etSUC9/1A4tFBeSIEnvNGYCqR07fFiTiCHOGuQDkzaouflRsC3 wvH3H3YFpRMm+0O1bv0zIW0jI99+wM7ypMpvkRsytPZZ7z95MSXoVMpHxMhZnAkTgB8v mkZ+0cdMPYvpJAMDFtAcpip1D3f1HCKvC7XkR7B21n1XnZnxyntgnXegUSgqzqv+egv9 ly7K6wx2THC2Q17hvmX8qnXJX1/BsKB2r8+29gPUVEElXVSrFej7bD7ALrALANZgbuyy ZjImksmu9z3Xci/3Y0DFnPBWqK1yvDFBr1f3reKDdzggc8+D6xE/dCowGQuMpVGW9i0l Lkiw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=ZhTV2LPN; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnu.org Received: from sourceware.org (ip-8-43-85-97.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id l6-20020aa7d946000000b00514b957c9dfsi6383723eds.571.2023.06.12.15.31.11 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 12 Jun 2023 15:31:11 -0700 (PDT) Received-SPF: pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) client-ip=8.43.85.97; Authentication-Results: mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=ZhTV2LPN; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnu.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 7CE1B38425A6 for ; Mon, 12 Jun 2023 22:29:44 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 7CE1B38425A6 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1686608984; bh=04VewB/RAMm93cpFGTCtIDTISjoywraRjnRgozCa2o0=; h=To:Cc:Subject:Date:In-Reply-To:References:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=ZhTV2LPNtq0hw0EfWkeR4UTDTUD5ChaFasYqgjJ7Kx5Rhr0HmRL8UbKx0sgeMWPOJ BapEuj7dOqNnCJtw5QW6+0KB8OUsK+tMxARAr8fQYvkPdmvxhwGsKBhpx32xN/MHiM 46CnCnZnyGfNVVHUFt4g7p6GVt9IZKscUjm+FA9M= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mx0a-00641c01.pphosted.com (mx0a-00641c01.pphosted.com [205.220.165.146]) by sourceware.org (Postfix) with ESMTPS id 09C553857344; Mon, 12 Jun 2023 22:28:42 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 09C553857344 Received: from pps.filterd (m0247475.ppops.net [127.0.0.1]) by mx0a-00641c01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 35CMIcvZ013241; Mon, 12 Jun 2023 22:28:41 GMT Received: from mxout25.s.uw.edu (mxout25.s.uw.edu [140.142.234.175]) by mx0a-00641c01.pphosted.com (PPS) with ESMTPS id 3r68ys1fnm-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 12 Jun 2023 22:28:41 +0000 Received: from smtp.washington.edu (smtp.washington.edu [128.208.60.132]) by mxout25.s.uw.edu (8.14.4+UW20.07/8.14.4+UW22.04) with ESMTP id 35CMSLSn023499 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 12 Jun 2023 15:28:21 -0700 X-Auth-Received: from localhost.localdomain ([10.154.74.234]) (authenticated authid=kmatsui) by smtp.washington.edu (8.16.1+UW21.10/8.14.4+UW19.10) with ESMTPSA id 35CMPHWt012136 (version=TLSv1.2 cipher=DHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT); Mon, 12 Jun 2023 15:28:21 -0700 X-UW-Orig-Sender: kmatsui@smtp.washington.edu To: gcc-patches@gcc.gnu.org Cc: libstdc++@gcc.gnu.org, Ken Matsui Subject: [PATCH v5 4/6] libstdc++: use new built-in trait __is_function for std::is_function Date: Mon, 12 Jun 2023 15:22:29 -0700 Message-ID: <20230612222515.20102-5-kmatsui@cs.washington.edu> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230612222515.20102-1-kmatsui@cs.washington.edu> References: <20230611024657.42846-1-kmatsui@cs.washington.edu> <20230612222515.20102-1-kmatsui@cs.washington.edu> MIME-Version: 1.0 X-Proofpoint-ORIG-GUID: fR-aqO_C8V5tB3h0NdFEzO1ELT28kMW2 X-Proofpoint-GUID: fR-aqO_C8V5tB3h0NdFEzO1ELT28kMW2 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.254,Aquarius:18.0.957,Hydra:6.0.573,FMLib:17.11.176.26 definitions=2023-06-12_16,2023-06-12_02,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxlogscore=842 lowpriorityscore=0 adultscore=0 spamscore=0 impostorscore=0 malwarescore=0 clxscore=1015 phishscore=0 priorityscore=1501 mlxscore=0 suspectscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2305260000 definitions=main-2306120193 X-Spam-Status: No, score=-14.0 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, RCVD_IN_DNSWL_LOW, SPF_HELO_NONE, 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 X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Ken Matsui via Gcc-patches From: Ken Matsui Reply-To: Ken Matsui Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org Sender: "Gcc-patches" X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1761403780011068317?= X-GMAIL-MSGID: =?utf-8?q?1768537793357631370?= This patch gets std::is_function to dispatch to new built-in trait __is_function. libstdc++-v3/ChangeLog: * include/std/type_traits (is_function): Use __is_function built-in trait. (is_function_v): Likewise. Signed-off-by: Ken Matsui --- libstdc++-v3/include/std/type_traits | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/libstdc++-v3/include/std/type_traits b/libstdc++-v3/include/std/type_traits index 2a14df7e5f9..954b57518de 100644 --- a/libstdc++-v3/include/std/type_traits +++ b/libstdc++-v3/include/std/type_traits @@ -594,6 +594,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { }; /// is_function +#if __has_builtin(__is_function) + template + struct is_function + : public __bool_constant<__is_function(_Tp)> + { }; +#else template struct is_function : public __bool_constant::value> { }; @@ -605,6 +611,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template struct is_function<_Tp&&> : public false_type { }; +#endif #define __cpp_lib_is_null_pointer 201309L @@ -3197,8 +3204,14 @@ template inline constexpr bool is_union_v = __is_union(_Tp); template inline constexpr bool is_class_v = __is_class(_Tp); + +#if __has_builtin(__is_function) +template + inline constexpr bool is_function_v = __is_function(_Tp); +#else template inline constexpr bool is_function_v = is_function<_Tp>::value; +#endif #if __has_builtin(__is_reference) template From patchwork Mon Jun 12 22:22:30 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ken Matsui X-Patchwork-Id: 106925 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:994d:0:b0:3d9:f83d:47d9 with SMTP id k13csp170605vqr; Mon, 12 Jun 2023 15:32:31 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ4NqQBnq/lZRM5XOLeZJAfoIAcVwtTFOddx/seLR6/FlKYjpCcEJnPYyBBD9lNVrsTpkeJ3 X-Received: by 2002:a17:907:16a0:b0:978:4027:57eb with SMTP id hc32-20020a17090716a000b00978402757ebmr11284753ejc.47.1686609151573; Mon, 12 Jun 2023 15:32:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1686609151; cv=none; d=google.com; s=arc-20160816; b=SmcNMTO1GQGq321rtlpuTwwJI9c0jRQmMzJpNPSmWrKH4WCgenKZkdCdDzeJKsYVe4 YedhmwgkUe1tzyq6NvKjJY9w5j7w4RxaVBMfxxrVjC1rTHn7pVsv+LOtl8HxC7u2QYsa n7ketribOyCwP6CcsjWKFOh3mg590JQtrX9b3JxFfuyt2mEeBRp46T8Ic8hU6cnrl8sn JeMpkNfQfWbxyAFkTNzSRID28pROYoYGYQ4InJPLjINasiCb5VRndrIPco3O2CKDFvgC 3hCLgBPIVM2raWGMCZtS1HTAA+ZSjCMO0wPp+zEPghYo9KVLtD7ffNiz72YnlRHychD6 WGAw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:reply-to:from:list-subscribe:list-help:list-post :list-archive:list-unsubscribe:list-id:precedence :content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:dmarc-filter:delivered-to :dkim-signature:dkim-filter; bh=zPP7n+RieSq1lbKJHHYlGDnFFStsBWRMqzF46IlgDOQ=; b=Aqr43a2+t52cwVwWi4lk8ucFVIvy/mO/Fwvjf2ILFEpJQVijZ7H91sDgiDc93IP4qp nh0cCezCem9/N57GQ8FvIwSSEFR7BV2ezWSxCRUjcngqfvdWTRwiZPDPVNJ60VAZhooz 94pq+aFShlIosNtJT6PKOlhBFl2sJL1S9mICy0pGSvTMAu9392U3awziVi/1et1SQZ6n yOGPD3Usbax1gcohQjoN+5d/MArChMgSatMbTiQkBwldd8erO3vJf+MIeD+SWu+nvpMr j5Ethmu+RXNm6O4izNxFxVakL0G6nB0FIOhg3yKrq8NdtvELWObOvpKtAmwkGB7qwJ2d ooMQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=ERb9spQB; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnu.org Received: from sourceware.org (ip-8-43-85-97.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id p25-20020a1709061b5900b00977d0937136si2492585ejg.739.2023.06.12.15.32.31 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 12 Jun 2023 15:32:31 -0700 (PDT) Received-SPF: pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) client-ip=8.43.85.97; Authentication-Results: mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=ERb9spQB; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnu.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 20EF1385696A for ; Mon, 12 Jun 2023 22:31:00 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 20EF1385696A DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1686609060; bh=zPP7n+RieSq1lbKJHHYlGDnFFStsBWRMqzF46IlgDOQ=; h=To:Cc:Subject:Date:In-Reply-To:References:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=ERb9spQBDuORs8wZqRAGYznjGyfhBi/iF9YPMJnDt5OWj5kxOFIyluwVGguJ06JWB nRcwEMNp5ac+MrhqyvIHIU0HLsSoNJtdSd7+2FKdVgZBjP85rpwYWhrf+CoQEc1Dj0 9mgA3nQ1ylKk2NUilXiDTKQrFe8fuOhDVshkXuh0= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mx0b-00641c01.pphosted.com (mx0b-00641c01.pphosted.com [205.220.177.146]) by sourceware.org (Postfix) with ESMTPS id E9AA1385084C; Mon, 12 Jun 2023 22:29:34 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org E9AA1385084C Received: from pps.filterd (m0247478.ppops.net [127.0.0.1]) by mx0a-00641c01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 35CMGvxu024500; Mon, 12 Jun 2023 22:29:34 GMT Received: from mxout24.cac.washington.edu (mxout24.cac.washington.edu [140.142.234.158]) by mx0a-00641c01.pphosted.com (PPS) with ESMTPS id 3r69fks82x-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 12 Jun 2023 22:29:34 +0000 Received: from smtp.washington.edu (smtp.washington.edu [128.208.60.132]) by mxout24.cac.washington.edu (8.14.4+UW20.07/8.14.4+UW22.04) with ESMTP id 35CMT1gW012985 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 12 Jun 2023 15:29:02 -0700 X-Auth-Received: from localhost.localdomain ([10.154.74.234]) (authenticated authid=kmatsui) by smtp.washington.edu (8.16.1+UW21.10/8.14.4+UW19.10) with ESMTPSA id 35CMPHWu012136 (version=TLSv1.2 cipher=DHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT); Mon, 12 Jun 2023 15:29:01 -0700 X-UW-Orig-Sender: kmatsui@smtp.washington.edu To: gcc-patches@gcc.gnu.org Cc: libstdc++@gcc.gnu.org, Ken Matsui Subject: [PATCH v5 5/6] c++, libstdc++: implement __is_void built-in trait Date: Mon, 12 Jun 2023 15:22:30 -0700 Message-ID: <20230612222515.20102-6-kmatsui@cs.washington.edu> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230612222515.20102-1-kmatsui@cs.washington.edu> References: <20230611024657.42846-1-kmatsui@cs.washington.edu> <20230612222515.20102-1-kmatsui@cs.washington.edu> MIME-Version: 1.0 X-Proofpoint-ORIG-GUID: XGvl3uAPdA0tzoqAymnV19ipN3Al5NkQ X-Proofpoint-GUID: XGvl3uAPdA0tzoqAymnV19ipN3Al5NkQ X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.254,Aquarius:18.0.957,Hydra:6.0.573,FMLib:17.11.176.26 definitions=2023-06-12_16,2023-06-12_02,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 bulkscore=0 spamscore=0 mlxscore=0 clxscore=1015 priorityscore=1501 adultscore=0 mlxlogscore=999 phishscore=0 suspectscore=0 malwarescore=0 lowpriorityscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2305260000 definitions=main-2306120193 X-Spam-Status: No, score=-14.0 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, RCVD_IN_DNSWL_LOW, SPF_HELO_NONE, 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 X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Ken Matsui via Gcc-patches From: Ken Matsui Reply-To: Ken Matsui Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org Sender: "Gcc-patches" X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1761819584195766596?= X-GMAIL-MSGID: =?utf-8?q?1768537878065343666?= This patch implements built-in trait for std::is_void. Since the new built-in name is __is_void, to avoid unintentional macro replacement, this patch also involves the removal of the existing __is_void in helper_functions.h and cpp_type_traits.h and renaming __is_void to ____is_void in the test file, pr46567.C. gcc/cp/ChangeLog: * cp-trait.def: Define __is_void. * constraint.cc (diagnose_trait_expr): Handle CPTK_IS_VOID. * semantics.cc (trait_expr_value): Likewise. (finish_trait_expr): Likewise. gcc/testsuite/ChangeLog: * g++.dg/tm/pr46567.C (__is_void): Rename to ... (____is_void): ... this. * g++.dg/ext/has-builtin-1.C: Test existence of __is_void. * g++.dg/ext/is_void.C: New test. libstdc++-v3/ChangeLog: * include/debug/helper_functions.h (_DiffTraits): Stop using __is_void. * include/bits/cpp_type_traits.h (__is_void): Remove unused __is_void. * include/std/type_traits (is_void_v): Use __is_void built-in trait. Signed-off-by: Ken Matsui --- gcc/cp/constraint.cc | 3 ++ gcc/cp/cp-trait.def | 1 + gcc/cp/semantics.cc | 4 +++ gcc/testsuite/g++.dg/ext/has-builtin-1.C | 3 ++ gcc/testsuite/g++.dg/ext/is_void.C | 35 +++++++++++++++++++ gcc/testsuite/g++.dg/tm/pr46567.C | 6 ++-- libstdc++-v3/include/bits/cpp_type_traits.h | 15 -------- libstdc++-v3/include/debug/helper_functions.h | 5 ++- libstdc++-v3/include/std/type_traits | 6 ++++ 9 files changed, 57 insertions(+), 21 deletions(-) create mode 100644 gcc/testsuite/g++.dg/ext/is_void.C diff --git a/gcc/cp/constraint.cc b/gcc/cp/constraint.cc index 927605c6cb7..e8cd98eb2c7 100644 --- a/gcc/cp/constraint.cc +++ b/gcc/cp/constraint.cc @@ -3757,6 +3757,9 @@ diagnose_trait_expr (tree expr, tree args) case CPTK_IS_FUNCTION: inform (loc, " %qT is not a function", t1); break; + case CPTK_IS_VOID: + inform (loc, " %qT is not a void type", t1); + break; case CPTK_IS_AGGREGATE: inform (loc, " %qT is not an aggregate", t1); break; diff --git a/gcc/cp/cp-trait.def b/gcc/cp/cp-trait.def index 3cd3babc242..8e76668f6ed 100644 --- a/gcc/cp/cp-trait.def +++ b/gcc/cp/cp-trait.def @@ -84,6 +84,7 @@ DEFTRAIT_EXPR (IS_TRIVIALLY_CONSTRUCTIBLE, "__is_trivially_constructible", -1) DEFTRAIT_EXPR (IS_TRIVIALLY_COPYABLE, "__is_trivially_copyable", 1) DEFTRAIT_EXPR (IS_UNION, "__is_union", 1) DEFTRAIT_EXPR (IS_FUNCTION, "__is_function", 1) +DEFTRAIT_EXPR (IS_VOID, "__is_void", 1) DEFTRAIT_EXPR (REF_CONSTRUCTS_FROM_TEMPORARY, "__reference_constructs_from_temporary", 2) DEFTRAIT_EXPR (REF_CONVERTS_FROM_TEMPORARY, "__reference_converts_from_temporary", 2) /* FIXME Added space to avoid direct usage in GCC 13. */ diff --git a/gcc/cp/semantics.cc b/gcc/cp/semantics.cc index b976633645a..c4d44413dce 100644 --- a/gcc/cp/semantics.cc +++ b/gcc/cp/semantics.cc @@ -12075,6 +12075,9 @@ trait_expr_value (cp_trait_kind kind, tree type1, tree type2) case CPTK_IS_FUNCTION: return type_code1 == FUNCTION_TYPE; + case CPTK_IS_VOID: + return VOID_TYPE_P (type1); + case CPTK_IS_FINAL: return CLASS_TYPE_P (type1) && CLASSTYPE_FINAL (type1); @@ -12297,6 +12300,7 @@ finish_trait_expr (location_t loc, cp_trait_kind kind, tree type1, tree type2) case CPTK_IS_SAME: case CPTK_IS_REFERENCE: case CPTK_IS_FUNCTION: + case CPTK_IS_VOID: break; 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 90eb00ebf2d..b96cc9e6f50 100644 --- a/gcc/testsuite/g++.dg/ext/has-builtin-1.C +++ b/gcc/testsuite/g++.dg/ext/has-builtin-1.C @@ -152,3 +152,6 @@ #if !__has_builtin (__is_function) # error "__has_builtin (__is_function) failed" #endif +#if !__has_builtin (__is_void) +# error "__has_builtin (__is_void) failed" +#endif diff --git a/gcc/testsuite/g++.dg/ext/is_void.C b/gcc/testsuite/g++.dg/ext/is_void.C new file mode 100644 index 00000000000..707f0d6875b --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/is_void.C @@ -0,0 +1,35 @@ +// { dg-do compile { target c++11 } } + +#include + +using namespace __gnu_test; + +#define SA(X) static_assert((X),#X) +#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) + +SA_TEST_CATEGORY(__is_void, void, true); + +SA_TEST_CATEGORY(__is_void, char, false); +SA_TEST_CATEGORY(__is_void, signed char, false); +SA_TEST_CATEGORY(__is_void, unsigned char, false); +SA_TEST_CATEGORY(__is_void, wchar_t, false); +SA_TEST_CATEGORY(__is_void, short, false); +SA_TEST_CATEGORY(__is_void, unsigned short, false); +SA_TEST_CATEGORY(__is_void, int, false); +SA_TEST_CATEGORY(__is_void, unsigned int, false); +SA_TEST_CATEGORY(__is_void, long, false); +SA_TEST_CATEGORY(__is_void, unsigned long, false); +SA_TEST_CATEGORY(__is_void, long long, false); +SA_TEST_CATEGORY(__is_void, unsigned long long, false); +SA_TEST_CATEGORY(__is_void, float, false); +SA_TEST_CATEGORY(__is_void, double, false); +SA_TEST_CATEGORY(__is_void, long double, false); + +// Sanity check. +SA_TEST_CATEGORY(__is_void, ClassType, false); +SA_TEST_CATEGORY(__is_void, IncompleteClass, false); +SA_TEST_CATEGORY(__is_void, IncompleteUnion, false); diff --git a/gcc/testsuite/g++.dg/tm/pr46567.C b/gcc/testsuite/g++.dg/tm/pr46567.C index 6d791484448..e689e293bd4 100644 --- a/gcc/testsuite/g++.dg/tm/pr46567.C +++ b/gcc/testsuite/g++.dg/tm/pr46567.C @@ -72,13 +72,13 @@ namespace std __attribute__ ((__visibility__ ("default"))) { typedef __true_type __type; }; template - struct __is_void + struct ____is_void { enum { __value = 0 }; typedef __false_type __type; }; template<> - struct __is_void + struct ____is_void { enum { __value = 1 }; typedef __true_type __type; @@ -222,7 +222,7 @@ namespace std __attribute__ ((__visibility__ ("default"))) { { }; template struct __is_fundamental - : public __traitor<__is_void<_Tp>, __is_arithmetic<_Tp> > + : public __traitor<____is_void<_Tp>, __is_arithmetic<_Tp> > { }; template struct __is_scalar diff --git a/libstdc++-v3/include/bits/cpp_type_traits.h b/libstdc++-v3/include/bits/cpp_type_traits.h index 4312f32a4e0..d329bc5b208 100644 --- a/libstdc++-v3/include/bits/cpp_type_traits.h +++ b/libstdc++-v3/include/bits/cpp_type_traits.h @@ -105,21 +105,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION typedef __true_type __type; }; - // Holds if the template-argument is a void type. - template - struct __is_void - { - enum { __value = 0 }; - typedef __false_type __type; - }; - - template<> - struct __is_void - { - enum { __value = 1 }; - typedef __true_type __type; - }; - // // Integer types // diff --git a/libstdc++-v3/include/debug/helper_functions.h b/libstdc++-v3/include/debug/helper_functions.h index dccf8e9e5e6..66b4e9e1ecf 100644 --- a/libstdc++-v3/include/debug/helper_functions.h +++ b/libstdc++-v3/include/debug/helper_functions.h @@ -66,13 +66,12 @@ namespace __gnu_debug typedef typename std::iterator_traits<_Iterator>::difference_type _ItDiffType; - template::__type> + template struct _DiffTraits { typedef _DiffType __type; }; template - struct _DiffTraits<_DiffType, std::__true_type> + struct _DiffTraits<_DiffType, void> { typedef std::ptrdiff_t __type; }; typedef typename _DiffTraits<_ItDiffType>::__type _DiffType; diff --git a/libstdc++-v3/include/std/type_traits b/libstdc++-v3/include/std/type_traits index 954b57518de..780fcc00135 100644 --- a/libstdc++-v3/include/std/type_traits +++ b/libstdc++-v3/include/std/type_traits @@ -3166,8 +3166,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * @{ * @ingroup variable_templates */ +#if __has_builtin(__is_void) +template + inline constexpr bool is_void_v = __is_void(_Tp); +#else template inline constexpr bool is_void_v = is_void<_Tp>::value; +#endif + template inline constexpr bool is_null_pointer_v = is_null_pointer<_Tp>::value; template From patchwork Mon Jun 12 22:22:31 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ken Matsui X-Patchwork-Id: 106926 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:994d:0:b0:3d9:f83d:47d9 with SMTP id k13csp171056vqr; Mon, 12 Jun 2023 15:33:32 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ6XRzCkp3N7r8E9SwlzVKnloEy6aLmHoqAewcwYEz+kZ+ohas1dBjk2pK4741RY48N0p71B X-Received: by 2002:a05:6402:51ca:b0:514:b3b5:59b2 with SMTP id r10-20020a05640251ca00b00514b3b559b2mr6390639edd.20.1686609211898; Mon, 12 Jun 2023 15:33:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1686609211; cv=none; d=google.com; s=arc-20160816; b=vfdICQyJlP4I/3YtPVtB+ZYoJXVom2Am/LtGwmaVqXRahpc5ceRsnkhtzQg8pFjpKe b9aI5G7pSUWCbOCQmuCvsqdlm2ZWRGIZsLmjjuXEdaWzG/1sDuBpENzRkLn9SaM1ACy0 dJCuag2NGsBfViGrvdkDB+KQ8l3Xz9MBjoyuKV1cYysX/0ZyTaTEWGpiUfBF5mKCEABn 2ced5Ghuh1akSvTylDbFMtOhSsuQZAqTRQsvwk3e71dPP/1VugxVTkvqpjK6AhxRODEG Bantfa9iksMwApAbauq/9ZjUW2g8m8xTOZO9bHvWFPj/ldmLtSJY8oRy4XCulhbeFL7G y1Yg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:reply-to:from:list-subscribe:list-help:list-post :list-archive:list-unsubscribe:list-id:precedence :content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:dmarc-filter:delivered-to :dkim-signature:dkim-filter; bh=3F6E7Ar7FzRfGYCHjGpVogyzZ7uhCr+X1uV3LSDRiqI=; b=TKWnlMUPYKZvIKk4s8mczC3a2T9+P3nQx/qNS09Vv9Qo+pJXGF2oHiS33v4KWPzORZ VC5bnTRemD+FcJFcUlDY965Te6+NXU9OLDgQIzdoc0jHZLRvT8bxaxzUPacRLzK1ECRW b4TznEvbsvfMqUDsynCHZy+UvpjctqNkKcFb0woC3D9TwfZ0O7FipV+IUhZDHOufsc0I c5UgEld1/lF9L66bnKG5CGL5B0nKBTQQNJPsOjIZOHpdGw6KhrqL1A9NH7/UOzrlnzJg NgTOD+WDvThOxahgWsL2sUdfYEC4Pw43v5EkNWg6GxWoy5BXfa3i48292hpVvpUxU3zB T7Ig== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=H4mQ0XUK; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnu.org Received: from sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id e23-20020a170906081700b0097668bb795asi3038092ejd.312.2023.06.12.15.33.31 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 12 Jun 2023 15:33:31 -0700 (PDT) Received-SPF: pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) client-ip=2620:52:3:1:0:246e:9693:128c; Authentication-Results: mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=H4mQ0XUK; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnu.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 14A76385660A for ; Mon, 12 Jun 2023 22:32:31 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 14A76385660A DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1686609151; bh=3F6E7Ar7FzRfGYCHjGpVogyzZ7uhCr+X1uV3LSDRiqI=; h=To:Cc:Subject:Date:In-Reply-To:References:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=H4mQ0XUKn99sX9WpyfJmcAtqLCHV+jv3PfCNwny91XgL3q7lwOEp34tj4bAAjKp2Y Kyhp4Un5Cvvv+5A5RoSbeiYimrziT8mD2TvN0U1Y32YDLNsdaoR5Pt7lTg5xMIghIp 2abuVVJ5U0X5gs8qoJwCN9sOyvtKYUfzz/pyC0GY= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mx0b-00641c01.pphosted.com (mx0b-00641c01.pphosted.com [205.220.177.146]) by sourceware.org (Postfix) with ESMTPS id 9654B3856DE6; Mon, 12 Jun 2023 22:30:39 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 9654B3856DE6 Received: from pps.filterd (m0247479.ppops.net [127.0.0.1]) by mx0a-00641c01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 35CMAs5f014544; Mon, 12 Jun 2023 22:30:39 GMT Received: from mxout23.cac.washington.edu (mxout23.cac.washington.edu [140.142.32.140]) by mx0a-00641c01.pphosted.com (PPS) with ESMTPS id 3r661w39q9-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 12 Jun 2023 22:30:39 +0000 Received: from smtp.washington.edu (smtp.washington.edu [128.208.60.132]) by mxout23.cac.washington.edu (8.14.4+UW20.07/8.14.4+UW22.04) with ESMTP id 35CMUZuD012538 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 12 Jun 2023 15:30:35 -0700 X-Auth-Received: from localhost.localdomain ([10.154.74.234]) (authenticated authid=kmatsui) by smtp.washington.edu (8.16.1+UW21.10/8.14.4+UW19.10) with ESMTPSA id 35CMPHWv012136 (version=TLSv1.2 cipher=DHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT); Mon, 12 Jun 2023 15:30:35 -0700 X-UW-Orig-Sender: kmatsui@smtp.washington.edu To: gcc-patches@gcc.gnu.org Cc: libstdc++@gcc.gnu.org, Ken Matsui Subject: [PATCH v5 6/6] libstdc++: make std::is_object dispatch to new built-in traits Date: Mon, 12 Jun 2023 15:22:31 -0700 Message-ID: <20230612222515.20102-7-kmatsui@cs.washington.edu> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230612222515.20102-1-kmatsui@cs.washington.edu> References: <20230611024657.42846-1-kmatsui@cs.washington.edu> <20230612222515.20102-1-kmatsui@cs.washington.edu> MIME-Version: 1.0 X-Proofpoint-GUID: QUnpvuSOJLfSCcFRFFEK5plF8Zy6TC9b X-Proofpoint-ORIG-GUID: QUnpvuSOJLfSCcFRFFEK5plF8Zy6TC9b X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.254,Aquarius:18.0.957,Hydra:6.0.573,FMLib:17.11.176.26 definitions=2023-06-12_16,2023-06-12_02,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 mlxscore=0 phishscore=0 priorityscore=1501 spamscore=0 bulkscore=0 lowpriorityscore=0 mlxlogscore=911 malwarescore=0 clxscore=1015 suspectscore=0 impostorscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2305260000 definitions=main-2306120193 X-Spam-Status: No, score=-14.0 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, RCVD_IN_DNSWL_LOW, SPF_HELO_NONE, 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 X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Ken Matsui via Gcc-patches From: Ken Matsui Reply-To: Ken Matsui Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org Sender: "Gcc-patches" X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1761403850642973368?= X-GMAIL-MSGID: =?utf-8?q?1768537940484647329?= This patch gets std::is_object to dispatch to new built-in traits, __is_function, __is_reference, and __is_void. libstdc++-v3/ChangeLog: * include/std/type_traits (is_object): Use new built-in traits, __is_function, __is_reference, and __is_void. (__is_object): Define this built-in-like macro. (is_object_v): Use built-in traits through the build-in-like macro. Signed-off-by: Ken Matsui --- libstdc++-v3/include/std/type_traits | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/libstdc++-v3/include/std/type_traits b/libstdc++-v3/include/std/type_traits index 780fcc00135..93335f94385 100644 --- a/libstdc++-v3/include/std/type_traits +++ b/libstdc++-v3/include/std/type_traits @@ -682,11 +682,23 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { }; /// is_object +#if __has_builtin(__is_function) && __has_builtin(__is_reference) \ + && __has_builtin(__is_void) + +#define __is_object(_Tp) \ + (!(__is_function(_Tp) || __is_reference(_Tp) || __is_void(_Tp))) + + template + struct is_object + : public __bool_constant<__is_object(_Tp)> + { }; +#else template struct is_object : public __not_<__or_, is_reference<_Tp>, is_void<_Tp>>>::type { }; +#endif template struct is_member_pointer; @@ -3235,8 +3247,15 @@ template inline constexpr bool is_arithmetic_v = is_arithmetic<_Tp>::value; template inline constexpr bool is_fundamental_v = is_fundamental<_Tp>::value; + +#ifdef __is_object +template + inline constexpr bool is_object_v = __is_object(_Tp); +#else template inline constexpr bool is_object_v = is_object<_Tp>::value; +#endif + template inline constexpr bool is_scalar_v = is_scalar<_Tp>::value; template