From patchwork Sat Dec 16 00:20:02 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nathaniel Shead X-Patchwork-Id: 179678 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7300:3b04:b0:fb:cd0c:d3e with SMTP id c4csp9664599dys; Fri, 15 Dec 2023 16:20:43 -0800 (PST) X-Google-Smtp-Source: AGHT+IEZc8iL4XfHryXDySwaOThfIzPy/jtZd9/X9iXrMauB+jXNyEGIaryPb5ufNRMEPcBmFmdW X-Received: by 2002:a05:620a:4712:b0:77f:408d:1bb7 with SMTP id bs18-20020a05620a471200b0077f408d1bb7mr16648617qkb.2.1702686043661; Fri, 15 Dec 2023 16:20:43 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1702686043; cv=pass; d=google.com; s=arc-20160816; b=ksuksoD7nn0Rgg7GGq5s0wqxw6tz1W2Xd30CI7t/mw0BB/r7UfI/aLoQrM1MRfqy4P Au7hIox1qFhNE5LyBwuk95pg/j14uBjyeV+WYj66PbnFJjeYxcvhQh1znOvnuo3TIvFf IrMCv+wi/+XIjh9aiQ34RV8o0VrtbnR5CgjHbCxKDtgaKrtnTvX4XrMRbupL1CSvC2Jw Zg2GQpWkKO9htu+T0+WuqqtaP68cwoCO6Ui8hA5Xroc7TVwYemmsu7MUUaAJ+A+a0L06 b/XVu7G5O6Gmrn87POWy+X9JlfoiSu7I9zuGzvkGN3MjoOtQJ2WXGWuMDsvL2394CVO4 F5zQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-disposition :mime-version:subject:cc:to:from:date:message-id:dkim-signature :arc-filter:dmarc-filter:delivered-to; bh=6FxzTbmsSPvm2T5FBRTxnoOwwSg7woJyMuUuC01HmKI=; fh=+Jlm9f+/vqSLlTsOP1+1OEuYim3rzEfZuFVQ57R30F4=; b=KL6RUPI+S5civhWbmCoCqYSW2hlTn76yPxJfvLQK5Lrf2xt52PA7OFnaJLh7yX/rpb wKx2MlKUxg0MQF9cowLtYc01hihMrcpQTVt37zFm6RkcpHLQeZNpiAJBIP4mRe3rNlpp OwFyduegGvEmMWU2VY+Ua419SkZYci6AzCAWTqvLfyest7M5g7q+4IvI0g4ZXpjwwS62 GqZ3bIFH6uDN4YfMlHq9xYYXfnVovBv6TIPATkwGMJI+tZ9dXCoUXjEkLpbb2vEf7vdo wIU6gQC6sFzKeJAtaGQoSfLKFTtdMtoCF98jQsI/Kv2LSxlkaiQPc2UorojWkmWyOXs3 5Ygw== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@gmail.com header.s=20230601 header.b=L7l86x64; arc=pass (i=1); 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=QUARANTINE dis=NONE) header.from=gmail.com Received: from server2.sourceware.org (server2.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id br32-20020a05620a462000b00773b364bd64si18565251qkb.391.2023.12.15.16.20.43 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 15 Dec 2023 16:20:43 -0800 (PST) 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=@gmail.com header.s=20230601 header.b=L7l86x64; arc=pass (i=1); 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=QUARANTINE dis=NONE) header.from=gmail.com Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 631B9384771F for ; Sat, 16 Dec 2023 00:20:43 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-pf1-x433.google.com (mail-pf1-x433.google.com [IPv6:2607:f8b0:4864:20::433]) by sourceware.org (Postfix) with ESMTPS id 7D3483858C52 for ; Sat, 16 Dec 2023 00:20:08 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 7D3483858C52 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 7D3483858C52 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::433 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1702686018; cv=none; b=fOt3y02egPcH9nl9WI+g/dlSDO2bo9jnwL5fbBexflqb1tAuIywBcTUGj8SgTkO6CMgIA/fQuJyXOfe35Bzcd6W2H17OwxaeiCS4+GsO5/JHTNxYiVax7+ZmklP5DRTkhNC4bV8jXAvbQQ7JZtBh8x9gaNSiORZYDxYegmg97g8= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1702686018; c=relaxed/simple; bh=9kxT8auGZsYa5izzvOz/wVEMXTnbU9KiiztVCA1ivuA=; h=DKIM-Signature:Message-ID:Date:From:To:Subject:MIME-Version; b=WPB5zlRaE5HbyPjT65LsfvjJf1VS22EIZK4upuoJhdI934DoQ1ohCp0JXJRNixhUFqUiTVdhYzJDL4ewIcwjxijkWY/YtKmWyHmIz4MmgiX+Dp5vKtza9Fo8b9RBw2eqajNQ/8Ydlc3gkt6aqdqaNL9pbMLh41QiLa1B1k84vpE= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-pf1-x433.google.com with SMTP id d2e1a72fcca58-6d0985c70ffso854059b3a.2 for ; Fri, 15 Dec 2023 16:20:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1702686007; x=1703290807; darn=gcc.gnu.org; h=content-disposition:mime-version:subject:cc:to:from:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=6FxzTbmsSPvm2T5FBRTxnoOwwSg7woJyMuUuC01HmKI=; b=L7l86x64n1rZCFt+z0++Ys+qKWIisuhhhMlt7pvoHobVZ4vP2OftwUcH3eM1JyT5+p L5ZLsCnE+zwdQ4RXs37/PsKFf53ISWlsnUwSj12qinzqCeVMb9XMYjUG3Fulnl71MASO S4CEId9n+3J86NXLIQs8qMKQ0+8DzuJzLM5plp3BRJv8F/nN5wY3fuj4UlTMMiCTlmmO NTuqpOLpFug6k0+vqSBct5rDYnp/iGtCex3vkw4tgPz3Sp37vY23FclBC8PN8oisKE4N LtMHgGq2egymzdJ7y+HHLJhf2wcjmII6HVD6cFnaU9e5XmQUHQDpKUFjcG2XGK96kFFu NXTQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1702686007; x=1703290807; h=content-disposition:mime-version:subject:cc:to:from:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=6FxzTbmsSPvm2T5FBRTxnoOwwSg7woJyMuUuC01HmKI=; b=Hal1rSByM95i8kGYhwL7y4D7jTpgI6dGMk6SfKHuTc+mnA8pqYB/0xuEOm0MAHjsV4 eIk3rEaSlOsc9S8Bs/8ZLOfbBiPsUwlc2hwszOxaSLb97L/Er8VM1V/586cg8U3UdiFi WCrMyc3kAy6fE/qR+aivo454+MIGSm5H5iekVPQHcypNmDbxV4h76aGewClo5EDobrgj hEYBardt744Bnk2Alqdwik1Oe3YW1x3TMHameKG+cijrysN0JDpT+SmmCqgmzB00UtlP 94CCBMsUsamrDLQ88g9jacvDO2OkDnNxytQvQ1XOAbqjUg2/bkuejGUwjLGj/jr1LWx8 gq2Q== X-Gm-Message-State: AOJu0YxUWJ+75Ynktt728rIA/2oaZx4e1W+jItY7Jow0BAs/TRYuzO04 YDHa39io+/74hWerXPNwlcEKagRRGCw= X-Received: by 2002:a05:6a20:3c8d:b0:190:53f9:43e6 with SMTP id b13-20020a056a203c8d00b0019053f943e6mr7670478pzj.4.1702686006880; Fri, 15 Dec 2023 16:20:06 -0800 (PST) Received: from Thaum. ([203.166.236.30]) by smtp.gmail.com with ESMTPSA id q19-20020a170902bd9300b001d06df5c1absm14839163pls.86.2023.12.15.16.20.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 15 Dec 2023 16:20:06 -0800 (PST) Message-ID: <657ced36.170a0220.f138a.ff27@mx.google.com> X-Google-Original-Message-ID: Date: Sat, 16 Dec 2023 11:20:02 +1100 From: Nathaniel Shead To: gcc-patches@gcc.gnu.org Cc: Jason Merrill , Jonathan Wakely Subject: [PATCH] c++: Fix unchecked use of CLASSTYPE_AS_BASE [PR113031] MIME-Version: 1.0 Content-Disposition: inline X-Spam-Status: No, score=-12.1 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, 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.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1785395720538670790 X-GMAIL-MSGID: 1785395720538670790 Bootstrapped and regtested on x86_64-pc-linux-gnu with GLIBCXX_TESTSUITE_STDS=20 and RUNTESTFLAGS="--target_board=unix/-D_GLIBCXX_USE_CXX11_ABI=0". -- >8 -- My previous patch (naively) assumed that a TREE_CODE of RECORD_TYPE or UNION_TYPE was sufficient for optype to be considered a "class type". However, this does not account for e.g. template type parameters of record or union type. This patch corrects to check for CLASS_TYPE_P before checking for as-base conversion. PR c++/113031 gcc/cp/ChangeLog: * constexpr.cc (cxx_fold_indirect_ref_1): Check for CLASS_TYPE before using CLASSTYPE_AS_BASE. gcc/testsuite/ChangeLog: * g++.dg/cpp0x/pr113031.C: New test. Signed-off-by: Nathaniel Shead --- gcc/cp/constexpr.cc | 3 ++- gcc/testsuite/g++.dg/cpp0x/pr113031.C | 34 +++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/cpp0x/pr113031.C diff --git a/gcc/cp/constexpr.cc b/gcc/cp/constexpr.cc index e1b2d27fc36..051f73fb73f 100644 --- a/gcc/cp/constexpr.cc +++ b/gcc/cp/constexpr.cc @@ -5709,7 +5709,8 @@ cxx_fold_indirect_ref_1 (const constexpr_ctx *ctx, location_t loc, tree type, } /* Handle conversion to "as base" type. */ - if (CLASSTYPE_AS_BASE (optype) == type) + if (CLASS_TYPE_P (optype) + && CLASSTYPE_AS_BASE (optype) == type) return op; /* Handle conversion to an empty base class, which is represented with a diff --git a/gcc/testsuite/g++.dg/cpp0x/pr113031.C b/gcc/testsuite/g++.dg/cpp0x/pr113031.C new file mode 100644 index 00000000000..aecdc3fc4b2 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/pr113031.C @@ -0,0 +1,34 @@ +// PR c++/113031 +// { dg-do compile } + +template struct variant; + +template +variant<_Types> __variant_cast(_Tp __rhs) { return static_cast&>(__rhs); } + +template +struct _Move_assign_base : _Types { + void operator=(_Move_assign_base __rhs) { __variant_cast<_Types>(__rhs); } +}; + +template +struct variant : _Move_assign_base<_Types> { + void emplace() { + variant __tmp; + *this = __tmp; + } +}; + +struct _Undefined_class { + struct _Nocopy_types { + void (_Undefined_class::*_M_member_pointer)(); + }; + struct function : _Nocopy_types { + struct optional { + void test03() { + variant v; + v.emplace(); + } + }; + }; +};