From patchwork Tue May 10 13:40:36 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick Palka X-Patchwork-Id: 53736 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 795313898538 for ; Tue, 10 May 2022 13:41:11 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 795313898538 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1652190071; bh=exAwbSdMkjipxLewBMX74KGPVOjEjAkhmhYEHWNg4lc=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=m4AYA2lfAhGu4CI+kEbAutMNtl9XnmJl2mUGCXnOEtCFQeaTNjrTOCJj4J3SZQg+0 AE80BLr9s5z9Jixf7Lb2tZe73aBe1dPtOpAcbMMHeIJOoLqTIYlHcQakmAztPcp7PH aeKGkWc7LgvK7JrdXC6K0c7hE8czacAYU8/4s7BY= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by sourceware.org (Postfix) with ESMTPS id D669F385DC2D for ; Tue, 10 May 2022 13:40:41 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org D669F385DC2D Received: from mail-qk1-f198.google.com (mail-qk1-f198.google.com [209.85.222.198]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-387-ATS-8ZKdMWeZeAezYWGo9w-1; Tue, 10 May 2022 09:40:40 -0400 X-MC-Unique: ATS-8ZKdMWeZeAezYWGo9w-1 Received: by mail-qk1-f198.google.com with SMTP id y140-20020a376492000000b0069f7e985c95so10723431qkb.15 for ; Tue, 10 May 2022 06:40:40 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=exAwbSdMkjipxLewBMX74KGPVOjEjAkhmhYEHWNg4lc=; b=Y+wtdVXH42SPb9BVp8df9Bsr5BP4Z6fvKEjGhZFzE2ED0dkKiIGFsvsHqqLOAWoLNt O5iqjI4e2ClcmooaN2egQ4DUvkLdn1XAnYRM/8SHKVO3hqQOOFHogELT/Jtkqwmg0Rp/ gw+NROsWkJX4MiB1Zo8O4C0i1CKcqnzIEsR6OQ8sMdHW1dFJl/UPiFgzx4JHo+XjGNQw xGSlXtWs5UGVH8srApSmfExFfqkeFCWxv/PkPR05qmLar3mxzuspp7fwClGHP4Nwi2H0 du4H9xzgUGj7JWvG3XMG6FyHfKum88oTU1ZeKb41y3JwgcbNIYbmBgdZMPKTW5pqJIL9 T6qg== X-Gm-Message-State: AOAM532U0cNfNf9cYrHSpnaev4WKmKZKJmFdpW1S2vHbIOYe6puTOKz6 lGC7qO9xSt3v2xvpyDnpPlNmEbdJBvil1VWv/iCgwaQF7bgUaj0KnYVtPt9kvb29h7qYKsJv5B5 7RZuNh70gWuIxrrImZYHKslfsZDY3Jkg/NYVW6OUUUn3p3ArMpcecOCMGiUrUJOHW6YA= X-Received: by 2002:a37:4454:0:b0:69f:c339:e2dc with SMTP id r81-20020a374454000000b0069fc339e2dcmr14464221qka.771.1652190039772; Tue, 10 May 2022 06:40:39 -0700 (PDT) X-Google-Smtp-Source: ABdhPJydUZ5wX0RSywP2+nsEF9qkkEhze6TzQDEWni5HHcsrQ4Q7zmIgsiJn85XO7h8dsVc5echJIA== X-Received: by 2002:a37:4454:0:b0:69f:c339:e2dc with SMTP id r81-20020a374454000000b0069fc339e2dcmr14464198qka.771.1652190039425; Tue, 10 May 2022 06:40:39 -0700 (PDT) Received: from localhost.localdomain (ool-457670bb.dyn.optonline.net. [69.118.112.187]) by smtp.gmail.com with ESMTPSA id o7-20020a05620a110700b0069fc13ce205sm8424219qkk.54.2022.05.10.06.40.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 10 May 2022 06:40:39 -0700 (PDT) To: gcc-patches@gcc.gnu.org Subject: [PATCH 1/2] c++: Harden *_PACK_EXPANSION and *_ARGUMENT_PACK macros Date: Tue, 10 May 2022 09:40:36 -0400 Message-Id: <20220510134037.628893-1-ppalka@redhat.com> X-Mailer: git-send-email 2.36.0.63.gf5aaf72f1b MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-Spam-Status: No, score=-14.6 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_LOW, SPF_HELO_NONE, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE, UPPERCASE_50_75 autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) 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: Patrick Palka via Gcc-patches From: Patrick Palka Reply-To: Patrick Palka Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" The accessor macros for TYPE_PACK_EXPANSION/EXPR_PACK_EXPANSION and TYPE_ARGUMENT_PACK/NONTYPE_ARGUMENT_PACK should check the tree code of the argument. Bootstrapped and regtested on x86_64-pc-linux-gnu, does this look OK for trunk? gcc/cp/ChangeLog: * cp-tree.h (PACK_EXPANSION_CHECK): Define. (PACK_EXPANSION_PATTERN): Use PACK_EXPANSION_CHECK. (SET_PACK_EXPANSION_PATTERN): Likewise. (PACK_EXPANSION_PARAMETER_PACKS): Likewise. (PACK_EXPANSION_EXTRA_ARGS): Likewise. (PACK_EXPANSION_LOCAL_P): Likewise. (PACK_EXPANSION_SIZEOF_P): Likewise. (PACK_EXPANSION_AUTO_P): Likewise. (PACK_EXPANSION_FORCE_EXTRA_ARGS_P): Likewise. (ARGUMENT_PACK_CHECK): Define. (ARGUMENT_PACK_ARGS): Use ARGUMENT_PACK_CHECK. (SET_ARGUMENT_PACK_ARGS): Likewise. * parser.c (cp_parser_sizeof_pack): Check for error_mark_node before setting PACK_EXPANSION_SIZEOF_P. --- gcc/cp/cp-tree.h | 34 ++++++++++++++++++++++------------ gcc/cp/parser.cc | 3 ++- 2 files changed, 24 insertions(+), 13 deletions(-) diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h index 8a5057a4dff..29fc0e5f829 100644 --- a/gcc/cp/cp-tree.h +++ b/gcc/cp/cp-tree.h @@ -3894,16 +3894,19 @@ struct GTY(()) lang_decl { (TREE_CODE (NODE) == TYPE_PACK_EXPANSION \ || TREE_CODE (NODE) == EXPR_PACK_EXPANSION) +#define PACK_EXPANSION_CHECK(NODE) \ + TREE_CHECK2 (NODE, TYPE_PACK_EXPANSION, EXPR_PACK_EXPANSION) + /* Extracts the type or expression pattern from a TYPE_PACK_EXPANSION or EXPR_PACK_EXPANSION. */ #define PACK_EXPANSION_PATTERN(NODE) \ - (TREE_CODE (NODE) == TYPE_PACK_EXPANSION ? TREE_TYPE (NODE) \ - : TREE_OPERAND (NODE, 0)) + (TREE_CODE (PACK_EXPANSION_CHECK (NODE)) == TYPE_PACK_EXPANSION \ + ? TREE_TYPE (NODE) : TREE_OPERAND (NODE, 0)) /* Sets the type or expression pattern for a TYPE_PACK_EXPANSION or EXPR_PACK_EXPANSION. */ #define SET_PACK_EXPANSION_PATTERN(NODE,VALUE) \ - if (TREE_CODE (NODE) == TYPE_PACK_EXPANSION) \ + if (TREE_CODE (PACK_EXPANSION_CHECK (NODE)) == TYPE_PACK_EXPANSION) \ TREE_TYPE (NODE) = VALUE; \ else \ TREE_OPERAND (NODE, 0) = VALUE @@ -3911,7 +3914,7 @@ struct GTY(()) lang_decl { /* The list of parameter packs used in the PACK_EXPANSION_* node. The TREE_VALUE of each TREE_LIST contains the parameter packs. */ #define PACK_EXPANSION_PARAMETER_PACKS(NODE) \ - *(TREE_CODE (NODE) == EXPR_PACK_EXPANSION \ + *(TREE_CODE (PACK_EXPANSION_CHECK (NODE)) == EXPR_PACK_EXPANSION \ ? &TREE_OPERAND (NODE, 1) \ : &TYPE_MIN_VALUE_RAW (TYPE_PACK_EXPANSION_CHECK (NODE))) @@ -3922,22 +3925,26 @@ struct GTY(()) lang_decl { are enclosing functions that provided function parameter packs we'll need to map appropriately. */ #define PACK_EXPANSION_EXTRA_ARGS(NODE) \ - *(TREE_CODE (NODE) == TYPE_PACK_EXPANSION \ + *(TREE_CODE (PACK_EXPANSION_CHECK (NODE)) == TYPE_PACK_EXPANSION \ ? &TYPE_MAX_VALUE_RAW (NODE) \ : &TREE_OPERAND ((NODE), 2)) /* True iff this pack expansion is within a function context. */ -#define PACK_EXPANSION_LOCAL_P(NODE) TREE_LANG_FLAG_0 (NODE) +#define PACK_EXPANSION_LOCAL_P(NODE) \ + TREE_LANG_FLAG_0 (PACK_EXPANSION_CHECK (NODE)) /* True iff this pack expansion is for sizeof.... */ -#define PACK_EXPANSION_SIZEOF_P(NODE) TREE_LANG_FLAG_1 (NODE) +#define PACK_EXPANSION_SIZEOF_P(NODE) \ + TREE_LANG_FLAG_1 (PACK_EXPANSION_CHECK (NODE)) /* True iff this pack expansion is for auto... in lambda init-capture. */ -#define PACK_EXPANSION_AUTO_P(NODE) TREE_LANG_FLAG_2 (NODE) +#define PACK_EXPANSION_AUTO_P(NODE) \ + TREE_LANG_FLAG_2 (PACK_EXPANSION_CHECK (NODE)) /* True if we must use PACK_EXPANSION_EXTRA_ARGS and avoid partial instantiation of this pack expansion. */ -#define PACK_EXPANSION_FORCE_EXTRA_ARGS_P(NODE) TREE_LANG_FLAG_3 (NODE) +#define PACK_EXPANSION_FORCE_EXTRA_ARGS_P(NODE) \ + TREE_LANG_FLAG_3 (PACK_EXPANSION_CHECK (NODE)) /* True iff the wildcard can match a template parameter pack. */ #define WILDCARD_PACK_P(NODE) TREE_LANG_FLAG_0 (NODE) @@ -3947,16 +3954,19 @@ struct GTY(()) lang_decl { (TREE_CODE (NODE) == TYPE_ARGUMENT_PACK \ || TREE_CODE (NODE) == NONTYPE_ARGUMENT_PACK) +#define ARGUMENT_PACK_CHECK(NODE) \ + TREE_CHECK2 (NODE, TYPE_ARGUMENT_PACK, NONTYPE_ARGUMENT_PACK) + /* The arguments stored in an argument pack. Arguments are stored in a TREE_VEC, which may have length zero. */ #define ARGUMENT_PACK_ARGS(NODE) \ - (TREE_CODE (NODE) == TYPE_ARGUMENT_PACK? TREE_TYPE (NODE) \ - : TREE_OPERAND (NODE, 0)) + (TREE_CODE (ARGUMENT_PACK_CHECK (NODE)) == TYPE_ARGUMENT_PACK \ + ? TREE_TYPE (NODE) : TREE_OPERAND (NODE, 0)) /* Set the arguments stored in an argument pack. VALUE must be a TREE_VEC. */ #define SET_ARGUMENT_PACK_ARGS(NODE,VALUE) \ - if (TREE_CODE (NODE) == TYPE_ARGUMENT_PACK) \ + if (TREE_CODE (ARGUMENT_PACK_CHECK (NODE)) == TYPE_ARGUMENT_PACK) \ TREE_TYPE (NODE) = VALUE; \ else \ TREE_OPERAND (NODE, 0) = VALUE diff --git a/gcc/cp/parser.cc b/gcc/cp/parser.cc index 8da02de95fb..5071c030f53 100644 --- a/gcc/cp/parser.cc +++ b/gcc/cp/parser.cc @@ -32563,7 +32563,8 @@ cp_parser_sizeof_pack (cp_parser *parser) else if (TREE_CODE (expr) == CONST_DECL) expr = DECL_INITIAL (expr); expr = make_pack_expansion (expr); - PACK_EXPANSION_SIZEOF_P (expr) = true; + if (expr != error_mark_node) + PACK_EXPANSION_SIZEOF_P (expr) = true; if (paren) parens.require_close (parser); From patchwork Tue May 10 13:40:37 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick Palka X-Patchwork-Id: 53737 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id C05E5385DC2D for ; Tue, 10 May 2022 13:42:08 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org C05E5385DC2D DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1652190128; bh=o1IpydBHkgeHRmtFSEpwRwqpNj6dWYyk4nP5pb0olmQ=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=BWMQxrGCUU2x+cPCDzA3/vrIc8SKEsGiEAPchiiYJVOp21ru2InRkk1NbHoiyevJn DpqB2fL7jqzEZoj1bbOgybbrRIG3/EXdVg2GoTOAPkNz+huWuf4Y7yvoT335HwmeH9 CMBPNUYUyX19pjVUiozk1QLzt5/bOqHTvRhidehk= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTPS id DB2F4385DC2D for ; Tue, 10 May 2022 13:40:47 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org DB2F4385DC2D Received: from mail-qt1-f197.google.com (mail-qt1-f197.google.com [209.85.160.197]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-344-XGdN4X9SPQ-7rxkyevUOSA-1; Tue, 10 May 2022 09:40:42 -0400 X-MC-Unique: XGdN4X9SPQ-7rxkyevUOSA-1 Received: by mail-qt1-f197.google.com with SMTP id br6-20020a05622a1e0600b002f3d470aa4dso6260275qtb.21 for ; Tue, 10 May 2022 06:40:41 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=o1IpydBHkgeHRmtFSEpwRwqpNj6dWYyk4nP5pb0olmQ=; b=0bs+3l8tbiVFZN+O21R04Z/E3SWSkMG9q36FTfi7Tv+MP7LM6yhJ5nKEEwA5Ij1m9/ OumM4C7fKdIGu0Q4PI+rg1t4hzOoCRbk2f5GMy+ZOySw60LRtSfJFem6GIOkJVI3v5IK O3rRQlFB4jjp10xozBSysAidSmUktHiMKetEPaINfI9xyx1dFDok5HOR0S2dUYG2cm6C AnDjvqToN6SXndjqKWVwXbDaeY3T66VlfS5hMARHZ9vofYosbI6majr0dul7WSEin2ZN i9JtbanWTZxy5/eaalBDA7ehDswkdKSunQ9dsA9dggY1d31RsmzlBWdBm7sSGzXM/UjO GUJg== X-Gm-Message-State: AOAM5304dRt6l0WxXEaVnogmncmy97zHJh8SIxIXb6sCCYK55MY5cvqv 2V4qsNOB1hpYQLIDT0tsPl1dMXTno8fR/MLmTzQX3J9vMqc3+VffHFDSq9lJNgnqJip7sul2747 MKDlpTddp1XauSFplG4Gi2Bj31IqAPBx48uUWuSzt77byCweoV7UplCI8+QwVkATyRQ8= X-Received: by 2002:a05:620a:404a:b0:6a0:922b:d906 with SMTP id i10-20020a05620a404a00b006a0922bd906mr7254766qko.365.1652190041198; Tue, 10 May 2022 06:40:41 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwV3Vtn1eBMcFmYyIb8IzTkiTId0fJz9/n7xLtyIBKcm9yXmPcoP3kvGvbYhMJ85JRMS2EhvA== X-Received: by 2002:a05:620a:404a:b0:6a0:922b:d906 with SMTP id i10-20020a05620a404a00b006a0922bd906mr7254738qko.365.1652190040786; Tue, 10 May 2022 06:40:40 -0700 (PDT) Received: from localhost.localdomain (ool-457670bb.dyn.optonline.net. [69.118.112.187]) by smtp.gmail.com with ESMTPSA id o7-20020a05620a110700b0069fc13ce205sm8424219qkk.54.2022.05.10.06.40.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 10 May 2022 06:40:40 -0700 (PDT) To: gcc-patches@gcc.gnu.org Subject: [PATCH 2/2] c++: Remove SET_PACK_EXPANSION_PATTERN / SET_ARGUMENT_PACK_ARGS Date: Tue, 10 May 2022 09:40:37 -0400 Message-Id: <20220510134037.628893-2-ppalka@redhat.com> X-Mailer: git-send-email 2.36.0.63.gf5aaf72f1b In-Reply-To: <20220510134037.628893-1-ppalka@redhat.com> References: <20220510134037.628893-1-ppalka@redhat.com> MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-Spam-Status: No, score=-14.3 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_LOW, SPF_HELO_NONE, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) 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: Patrick Palka via Gcc-patches From: Patrick Palka Reply-To: Patrick Palka Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" Unlike in C, in C++ the conditional operator yields an lvalue if both branches are lvalues, so we can just assign to PACK_EXPANSION_PATTERN and ARGUMENT_PACK_ARGS directly. Bootstrapped and regtested on x86_64-pc-linux-gnu, does this look OK for trunk? gcc/cp/ChangeLog: * coroutines.cc (instantiate_coro_traits): Adjust accordingly. * cp-tree.h (SET_PACK_EXPANSION_PATTERN): Remove. (SET_ARGUMENT_PACK_ARGS): Remove. * module.cc (trees_in::tree_node): Adjust accordingly. * parser.cc (make_char_string_pack): Likewise. (make_string_pack): Likewise. * pt.cc (make_pack_expansion): Likewise. (template_parm_to_arg): Likewise. (coerce_template_parameter_pack): Likewise. (extract_fnparm_pack): Likewise. (extract_locals_r): Likewise. (make_argument_pack): Likewise. (tsubst_argument_pack): Likewise. (lookup_init_capture_pack): Likewise. (type_unification_real): Likewise. (unify_pack_expansion): Likewise. (tsubst_initializer_list): Likewise. --- gcc/cp/coroutines.cc | 2 +- gcc/cp/cp-tree.h | 16 ---------------- gcc/cp/module.cc | 4 ++-- gcc/cp/parser.cc | 4 ++-- gcc/cp/pt.cc | 30 +++++++++++++++--------------- 5 files changed, 20 insertions(+), 36 deletions(-) diff --git a/gcc/cp/coroutines.cc b/gcc/cp/coroutines.cc index 1d886b31c77..edb3b706ddc 100644 --- a/gcc/cp/coroutines.cc +++ b/gcc/cp/coroutines.cc @@ -344,7 +344,7 @@ instantiate_coro_traits (tree fndecl, location_t kw) } tree argtypepack = cxx_make_type (TYPE_ARGUMENT_PACK); - SET_ARGUMENT_PACK_ARGS (argtypepack, argtypes); + ARGUMENT_PACK_ARGS (argtypepack) = argtypes; tree targ = make_tree_vec (2); TREE_VEC_ELT (targ, 0) = TREE_TYPE (functyp); diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h index 29fc0e5f829..cfda8337ad8 100644 --- a/gcc/cp/cp-tree.h +++ b/gcc/cp/cp-tree.h @@ -3903,14 +3903,6 @@ struct GTY(()) lang_decl { (TREE_CODE (PACK_EXPANSION_CHECK (NODE)) == TYPE_PACK_EXPANSION \ ? TREE_TYPE (NODE) : TREE_OPERAND (NODE, 0)) -/* Sets the type or expression pattern for a TYPE_PACK_EXPANSION or - EXPR_PACK_EXPANSION. */ -#define SET_PACK_EXPANSION_PATTERN(NODE,VALUE) \ - if (TREE_CODE (PACK_EXPANSION_CHECK (NODE)) == TYPE_PACK_EXPANSION) \ - TREE_TYPE (NODE) = VALUE; \ - else \ - TREE_OPERAND (NODE, 0) = VALUE - /* The list of parameter packs used in the PACK_EXPANSION_* node. The TREE_VALUE of each TREE_LIST contains the parameter packs. */ #define PACK_EXPANSION_PARAMETER_PACKS(NODE) \ @@ -3963,14 +3955,6 @@ struct GTY(()) lang_decl { (TREE_CODE (ARGUMENT_PACK_CHECK (NODE)) == TYPE_ARGUMENT_PACK \ ? TREE_TYPE (NODE) : TREE_OPERAND (NODE, 0)) -/* Set the arguments stored in an argument pack. VALUE must be a - TREE_VEC. */ -#define SET_ARGUMENT_PACK_ARGS(NODE,VALUE) \ - if (TREE_CODE (ARGUMENT_PACK_CHECK (NODE)) == TYPE_ARGUMENT_PACK) \ - TREE_TYPE (NODE) = VALUE; \ - else \ - TREE_OPERAND (NODE, 0) = VALUE - /* Whether the argument pack is "incomplete", meaning that more arguments can still be deduced. Incomplete argument packs are only used when the user has provided an explicit template argument list diff --git a/gcc/cp/module.cc b/gcc/cp/module.cc index bd4771bef72..27b8f64ce75 100644 --- a/gcc/cp/module.cc +++ b/gcc/cp/module.cc @@ -9338,7 +9338,7 @@ trees_in::tree_node (bool is_use) if (!get_overrun ()) { tree pack = cxx_make_type (TYPE_ARGUMENT_PACK); - SET_ARGUMENT_PACK_ARGS (pack, res); + ARGUMENT_PACK_ARGS (pack) = res; res = pack; } break; @@ -9351,7 +9351,7 @@ trees_in::tree_node (bool is_use) { tree expn = cxx_make_type (TYPE_PACK_EXPANSION); SET_TYPE_STRUCTURAL_EQUALITY (expn); - SET_PACK_EXPANSION_PATTERN (expn, res); + PACK_EXPANSION_PATTERN (expn) = res; PACK_EXPANSION_PARAMETER_PACKS (expn) = param_packs; PACK_EXPANSION_LOCAL_P (expn) = local; res = expn; diff --git a/gcc/cp/parser.cc b/gcc/cp/parser.cc index 5071c030f53..4ed9feaa427 100644 --- a/gcc/cp/parser.cc +++ b/gcc/cp/parser.cc @@ -4649,7 +4649,7 @@ make_char_string_pack (tree value) } /* Build the argument packs. */ - SET_ARGUMENT_PACK_ARGS (argpack, charvec); + ARGUMENT_PACK_ARGS (argpack) = charvec; TREE_VEC_ELT (argvec, 0) = argpack; @@ -4684,7 +4684,7 @@ make_string_pack (tree value) double_int::from_buffer (str + i * sz, sz)); /* Build the argument packs. */ - SET_ARGUMENT_PACK_ARGS (argpack, charvec); + ARGUMENT_PACK_ARGS (argpack) = charvec; TREE_VEC_ELT (argvec, 1) = argpack; diff --git a/gcc/cp/pt.cc b/gcc/cp/pt.cc index 6e666c2cde3..9932d861af6 100644 --- a/gcc/cp/pt.cc +++ b/gcc/cp/pt.cc @@ -4219,7 +4219,7 @@ make_pack_expansion (tree arg, tsubst_flags_t complain) /* Create the pack expansion type for the base type. */ purpose = cxx_make_type (TYPE_PACK_EXPANSION); - SET_PACK_EXPANSION_PATTERN (purpose, TREE_PURPOSE (arg)); + PACK_EXPANSION_PATTERN (purpose) = TREE_PURPOSE (arg); PACK_EXPANSION_PARAMETER_PACKS (purpose) = parameter_packs; PACK_EXPANSION_LOCAL_P (purpose) = at_function_scope_p (); @@ -4237,7 +4237,7 @@ make_pack_expansion (tree arg, tsubst_flags_t complain) result = for_types ? cxx_make_type (TYPE_PACK_EXPANSION) : make_node (EXPR_PACK_EXPANSION); - SET_PACK_EXPANSION_PATTERN (result, arg); + PACK_EXPANSION_PATTERN (result) = arg; if (TREE_CODE (result) == EXPR_PACK_EXPANSION) { /* Propagate type and const-expression information. */ @@ -4852,7 +4852,7 @@ template_parm_to_arg (tree t) TREE_VEC_ELT (vec, 0) = make_pack_expansion (t); t = cxx_make_type (TYPE_ARGUMENT_PACK); - SET_ARGUMENT_PACK_ARGS (t, vec); + ARGUMENT_PACK_ARGS (t) = vec; } } else @@ -4869,7 +4869,7 @@ template_parm_to_arg (tree t) TREE_VEC_ELT (vec, 0) = make_pack_expansion (t); t = make_node (NONTYPE_ARGUMENT_PACK); - SET_ARGUMENT_PACK_ARGS (t, vec); + ARGUMENT_PACK_ARGS (t) = vec; } else t = convert_from_reference (t); @@ -8718,7 +8718,7 @@ coerce_template_parameter_pack (tree parms, _DECL as a use rather than a declaration. */ tree decl = TREE_VALUE (parm); tree exp = cxx_make_type (TYPE_PACK_EXPANSION); - SET_PACK_EXPANSION_PATTERN (exp, decl); + PACK_EXPANSION_PATTERN (exp) = decl; PACK_EXPANSION_PARAMETER_PACKS (exp) = packs; SET_TYPE_STRUCTURAL_EQUALITY (exp); @@ -8818,7 +8818,7 @@ coerce_template_parameter_pack (tree parms, TREE_CONSTANT (argument_pack) = 1; } - SET_ARGUMENT_PACK_ARGS (argument_pack, packed_args); + ARGUMENT_PACK_ARGS (argument_pack) = packed_args; if (CHECKING_P) SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (packed_args, TREE_VEC_LENGTH (packed_args)); @@ -12460,7 +12460,7 @@ extract_fnparm_pack (tree tmpl_parm, tree *spec_p) } /* Build the argument packs. */ - SET_ARGUMENT_PACK_ARGS (argpack, parmvec); + ARGUMENT_PACK_ARGS (argpack) = parmvec; } *spec_p = spec_parm; @@ -13023,7 +13023,7 @@ extract_locals_r (tree *tp, int */*walk_subtrees*/, void *data_) { spec = copy_node (spec); args = copy_node (args); - SET_ARGUMENT_PACK_ARGS (spec, args); + ARGUMENT_PACK_ARGS (spec) = args; register_local_specialization (spec, *tp); } TREE_VEC_ELT (args, i) = carg; @@ -13410,7 +13410,7 @@ make_argument_pack (tree vec) pack = make_node (NONTYPE_ARGUMENT_PACK); TREE_CONSTANT (pack) = 1; } - SET_ARGUMENT_PACK_ARGS (pack, vec); + ARGUMENT_PACK_ARGS (pack) = vec; return pack; } @@ -13463,7 +13463,7 @@ tsubst_argument_pack (tree orig_arg, tree args, tsubst_flags_t complain, TREE_CONSTANT (new_arg) = TREE_CONSTANT (orig_arg); } - SET_ARGUMENT_PACK_ARGS (new_arg, pack_args); + ARGUMENT_PACK_ARGS (new_arg) = pack_args; } return new_arg; @@ -18442,7 +18442,7 @@ lookup_init_capture_pack (tree decl) len = TREE_VEC_LENGTH (fpack); vec = make_tree_vec (len); r = make_node (NONTYPE_ARGUMENT_PACK); - SET_ARGUMENT_PACK_ARGS (r, vec); + ARGUMENT_PACK_ARGS (r) = vec; } for (int i = 0; i < len; ++i) { @@ -22911,7 +22911,7 @@ type_unification_real (tree tparms, else arg = cxx_make_type (TYPE_ARGUMENT_PACK); - SET_ARGUMENT_PACK_ARGS (arg, make_tree_vec (0)); + ARGUMENT_PACK_ARGS (arg) = make_tree_vec (0); TREE_VEC_ELT (targs, i) = arg; continue; @@ -23771,7 +23771,7 @@ unify_pack_expansion (tree tparms, tree targs, tree packed_parms, else result = cxx_make_type (TYPE_ARGUMENT_PACK); - SET_ARGUMENT_PACK_ARGS (result, new_args); + ARGUMENT_PACK_ARGS (result) = new_args; /* Note the deduced argument packs for this parameter pack. */ @@ -23785,7 +23785,7 @@ unify_pack_expansion (tree tparms, tree targs, tree packed_parms, now we have a complete set of arguments. */ tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack); - SET_ARGUMENT_PACK_ARGS (old_pack, new_args); + ARGUMENT_PACK_ARGS (old_pack) = new_args; ARGUMENT_PACK_INCOMPLETE_P (old_pack) = 1; ARGUMENT_PACK_EXPLICIT_ARGS (old_pack) = explicit_args; } @@ -26899,7 +26899,7 @@ tsubst_initializer_list (tree t, tree argvec) else { value = expr; - SET_PACK_EXPANSION_PATTERN (value, TREE_VALUE (arg)); + PACK_EXPANSION_PATTERN (value) = TREE_VALUE (arg); } expanded_exprs = tsubst_pack_expansion (value, argvec,