From patchwork Fri Dec 8 21:15:05 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marek Polacek X-Patchwork-Id: 176043 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:bcd1:0:b0:403:3b70:6f57 with SMTP id r17csp5724509vqy; Fri, 8 Dec 2023 13:15:35 -0800 (PST) X-Google-Smtp-Source: AGHT+IFFk42Oxgu+UxbUKwc1zVHO+0kqP2VuPDhY725Nc1QV2/MpFdWFNrJNZhVqePonDkUd35GH X-Received: by 2002:a05:6102:4744:b0:464:6214:8e1a with SMTP id ej4-20020a056102474400b0046462148e1amr767623vsb.22.1702070135206; Fri, 08 Dec 2023 13:15:35 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1702070135; cv=pass; d=google.com; s=arc-20160816; b=oSfcqzDCIeuzQ6pU6e2vFcYYNyuXLfPkBbDnrYR7Pm1vi+T1FsVOeUluDeH69toG4O /gXeHEy+D5iKtoRJTBlDYIJbAhR/WbxlICI5/jFVQxh8rjXqeO533O/AduxdJqHqO2Z3 deH0CQTozw1vwvVvl4N2324GWgzYumgdM//xit9HGrmZzqD+QCL7JzUqM03aSwgpiMXg yPOdagwFSaizmv/DJH22S/yz4csojKjvNz0XMy7ABPer8o7rjVnHTDhF3oaJ3zr22dw3 wqycPpVgVBjFC99PLNa12DJAXZ/SOT/1X9fd6YreHBQ6iQDGWfAFnyw8uR2KsAfhYRGE 2XHg== 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:user-agent :in-reply-to:mime-version:references:message-id:subject:cc:to:from :date:dkim-signature:arc-filter:dmarc-filter:delivered-to; bh=tkHHuEngnmzymzA9bnvz5TRIdog8Mo3fit4DOvrBQh0=; fh=rsfJLMIL/7j+58qzkgIXBlfQSah3iXypQc76SN5PqTs=; b=QBgrN005Vit0xT8IUWDJ5dUyxlckjv//2U24/HKSjUdJeOJoeelZ/3GBqC+cBiJBmf v9mjQkCPm9cB+XgjPIMWNjnPSbZB1cg4kThTPkehzZTl/EWSCRdpa9r8R2cJcA0mraoD OdpAk5OXM+xZ36xCL9hEJ3+9sjTHqO7eHm2dEZAmFj+207O+aRhmiOFSdz+7rVWGTNgq N/MATSiWk5FXPU6VyvbCiRPEDOqWJ+ctgyV04UNLAX3PsspGkhHPOM/DaGaej3zSJu9u WYF01yqASHNhhU5wZkp1y/QQkDbFTa3NrFTDXFC1nv/0uJERNnr1rRucM5dVFs2S4h7L LmRA== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=ICkOvVap; arc=pass (i=1); 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=redhat.com Received: from server2.sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id v7-20020a67f1c7000000b004649c238bc3si771426vsm.743.2023.12.08.13.15.35 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Dec 2023 13:15:35 -0800 (PST) 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=@redhat.com header.s=mimecast20190719 header.b=ICkOvVap; arc=pass (i=1); 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=redhat.com Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id EC8B5385843F for ; Fri, 8 Dec 2023 21:15:34 +0000 (GMT) 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 4E0343858CDB for ; Fri, 8 Dec 2023 21:15:10 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 4E0343858CDB Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 4E0343858CDB Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1702070111; cv=none; b=lrZcZHWlXMGoThv47q/tDKhY/OkcocPb89Idwu8oYqa1DIpNUl7kQpGIeX6pqPB7vleWJwSPFDBF/qJsf5+Oe2y8eK9qkh41glTosVEBa/ukQAkWehV22SDval17BhdV7DDIQNSafcs2/F8gMJzGSOrY0CPWs9dQGCtPeEZnDuM= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1702070111; c=relaxed/simple; bh=l4t5tjzk0zwVUojlXPLu49f3j4u5XoF1DNkY1bTDTeg=; h=DKIM-Signature:Date:From:To:Subject:Message-ID:MIME-Version; b=brTVXhu23pxnfeOdnISDZgA87rexSIedRciLn440fmLb6m6cajt04u+MMJCnNecMvNyZjd9HQ6IYe6a1dKhTVfwyv5kp4ZTTw0pQRk55vJyGGLPKGQsz6gb1j864W7vcbO8rL89mAa65/FV/CgtDI1S4r8Oafwu+jhKu84JAgTE= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1702070109; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=tkHHuEngnmzymzA9bnvz5TRIdog8Mo3fit4DOvrBQh0=; b=ICkOvVapBsgfULQFQLVUCe2QGiXiLnsfJYeuk8v5hZTLWKD2LW9q4RGEw8zhrKxmJ/Eq9Y W9ixmdf1Dl4BnVzFriXhIJeneIt+dMDOrfTFGQD6Ityh5qQgLW+66hWf6XE5WRiwXWSvLg WLQ4qJTGKC86gn7ZlaDltTEr5/Sw6Vs= Received: from mail-qt1-f198.google.com (mail-qt1-f198.google.com [209.85.160.198]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-260-CWi3HcwQMxqoSlPd-Y1cKw-1; Fri, 08 Dec 2023 16:15:08 -0500 X-MC-Unique: CWi3HcwQMxqoSlPd-Y1cKw-1 Received: by mail-qt1-f198.google.com with SMTP id d75a77b69052e-4259aebd1f7so16328141cf.3 for ; Fri, 08 Dec 2023 13:15:08 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1702070107; x=1702674907; h=user-agent:in-reply-to:content-disposition:mime-version:references :message-id:subject:cc:to:from:date:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=tkHHuEngnmzymzA9bnvz5TRIdog8Mo3fit4DOvrBQh0=; b=jzq/KJoiQShuJ22aWurjs0paJ5bl1JvFHXHLnPfgWVsCK1l/uGHG1Bbx2QZV+DjC9o 8FSEtT5h6051OoacaHXr0Jms69eEtzguKFNG5xBckz8QBXd8ZXYhnrSe+0zMQmZ/IyjX xOTvISRg2ZnrGQSGM7RQuF1NNSNivEH10Dr54w3DsfWEbokR+6eomNj7zhmD4xIZAV4/ rIVgwatQI4ypgGWxRPeP9auWHoZhqRyVhPmgqhX8luSRrUjryj2dWH910s/ZIzlipcPa 7uc4u3+5yY7L8+ph4W1GIMEEzC4BU74RYVVljx77Tt5C3fSu+s9vhfSy7IHCXiJ9SquA uhMA== X-Gm-Message-State: AOJu0Yy4XreSSmo4sufmrfbjtBDh3sB0ZGB4o8Nlu6uogC6Xg72ANl49 bJhIbyKy6k/EIAwM36YAXSmfLI0TZIdEBadHa+GFZF+1ACiiWIhmW72ghcuTzJtQHvU5KuIotdY C2xKIHvb18+lD41GKayMD8e3FVw== X-Received: by 2002:ac8:5891:0:b0:411:616a:4bde with SMTP id t17-20020ac85891000000b00411616a4bdemr893131qta.18.1702070107389; Fri, 08 Dec 2023 13:15:07 -0800 (PST) X-Received: by 2002:ac8:5891:0:b0:411:616a:4bde with SMTP id t17-20020ac85891000000b00411616a4bdemr893122qta.18.1702070107086; Fri, 08 Dec 2023 13:15:07 -0800 (PST) Received: from redhat.com (2603-7000-9500-34a5-0000-0000-0000-1db4.res6.spectrum.com. [2603:7000:9500:34a5::1db4]) by smtp.gmail.com with ESMTPSA id z4-20020ac875c4000000b004180fb5c6adsm1081981qtq.25.2023.12.08.13.15.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Dec 2023 13:15:06 -0800 (PST) Date: Fri, 8 Dec 2023 16:15:05 -0500 From: Marek Polacek To: Jason Merrill Cc: GCC Patches Subject: [PATCH v2] c++: fix ICE with sizeof in a template [PR112869] Message-ID: References: <20231205203136.94832-1-polacek@redhat.com> <9c08e101-0392-4c01-b336-6558e80a4193@redhat.com> MIME-Version: 1.0 In-Reply-To: <9c08e101-0392-4c01-b336-6558e80a4193@redhat.com> User-Agent: Mutt/2.2.10 (2023-03-25) X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Disposition: inline X-Spam-Status: No, score=-12.2 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_NONE, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_NONE, 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: 1784475376066982984 X-GMAIL-MSGID: 1784749893797277841 On Fri, Dec 08, 2023 at 12:09:18PM -0500, Jason Merrill wrote: > On 12/5/23 15:31, Marek Polacek wrote: > > Bootstrapped/regtested on x86_64-pc-linux-gnu, ok for trunk? > > > > -- >8 -- > > This test shows that we cannot clear *walk_subtrees in > > cp_fold_immediate_r when we're in_immediate_context, because that, > > as the comment says, affects cp_fold_r as well. Here we had an > > expression with > > > > min ((long int) VIEW_CONVERT_EXPR(bytecount), (long int) <<< Unknown tree: sizeof_expr > > (int) <<< error >>> >>>) > > > > as its sub-expression, and we never evaluated that into > > > > min ((long int) bytecount, 4) > > > > so the SIZEOF_EXPR leaked into the middle end. > > > > (There's still one *walk_subtrees = 0; in cp_fold_immediate_r, but that > > one should be OK.) > > > > PR c++/112869 > > > > gcc/cp/ChangeLog: > > > > * cp-gimplify.cc (cp_fold_immediate_r): Don't clear *walk_subtrees > > for unevaluated operands. > > I agree that we want this change for in_immediate_context (), but I don't > see why we want it for TYPE_P or unevaluated_p (code) or > cp_unevaluated_operand? No particular reason, just paranoia. How's this? Bootstrapped/regtested on x86_64-pc-linux-gnu, ok for trunk? -- >8 -- This test shows that we cannot clear *walk_subtrees in cp_fold_immediate_r when we're in_immediate_context, because that, as the comment says, affects cp_fold_r as well. Here we had an expression with min ((long int) VIEW_CONVERT_EXPR(bytecount), (long int) <<< Unknown tree: sizeof_expr (int) <<< error >>> >>>) as its sub-expression, and we never evaluated that into min ((long int) bytecount, 4) so the SIZEOF_EXPR leaked into the middle end. (There's still one *walk_subtrees = 0; in cp_fold_immediate_r, but that one should be OK.) PR c++/112869 gcc/cp/ChangeLog: * cp-gimplify.cc (cp_fold_immediate_r): Don't clear *walk_subtrees for in_immediate_context. gcc/testsuite/ChangeLog: * g++.dg/template/sizeof18.C: New test. --- gcc/cp/cp-gimplify.cc | 6 +++++- gcc/testsuite/g++.dg/template/sizeof18.C | 8 ++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/template/sizeof18.C base-commit: d468718c9a097aeb8794fb1a2df6db2c1064d7f7 diff --git a/gcc/cp/cp-gimplify.cc b/gcc/cp/cp-gimplify.cc index 5abb91bbdd3..6af7c787372 100644 --- a/gcc/cp/cp-gimplify.cc +++ b/gcc/cp/cp-gimplify.cc @@ -1179,11 +1179,15 @@ cp_fold_immediate_r (tree *stmt_p, int *walk_subtrees, void *data_) /* No need to look into types or unevaluated operands. NB: This affects cp_fold_r as well. */ - if (TYPE_P (stmt) || unevaluated_p (code) || in_immediate_context ()) + if (TYPE_P (stmt) || unevaluated_p (code)) { *walk_subtrees = 0; return NULL_TREE; } + else if (in_immediate_context ()) + /* Don't clear *walk_subtrees here: we still need to walk the subtrees + of SIZEOF_EXPR and similar. */ + return NULL_TREE; tree decl = NULL_TREE; bool call_p = false; diff --git a/gcc/testsuite/g++.dg/template/sizeof18.C b/gcc/testsuite/g++.dg/template/sizeof18.C new file mode 100644 index 00000000000..afba9946258 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/sizeof18.C @@ -0,0 +1,8 @@ +// PR c++/112869 +// { dg-do compile } + +void min(long, long); +template void Binaryread(int &, T, unsigned long); +template <> void Binaryread(int &, float, unsigned long bytecount) { + min(bytecount, sizeof(int)); +}