From patchwork Fri Mar 25 18:09:31 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick Palka X-Patchwork-Id: 52359 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 A0D75388451E for ; Fri, 25 Mar 2022 18:10:41 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org A0D75388451E DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1648231841; bh=2u9o1DHE9ICqOuvVXZ6++28lg5CkG0e7I3HQLF8s13c=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=XUOCToeq5+7vV2DrraUAUQ7PZohGFpbclCRXERPcYLSLkLol4NFAl4zZW/yq+r8JM 8y1tCiFoLvMA7BAuLwlFMuJwY9azF2lDNJB1IWUAentt9O9ilcUP+c0cLnpf3GA53b TwCUfJ1G1HuDxMaWJUxGVD3ueuMI9TTIjFKF+DcY= 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 B763A3888C79 for ; Fri, 25 Mar 2022 18:09:50 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org B763A3888C79 Received: from mail-qt1-f200.google.com (mail-qt1-f200.google.com [209.85.160.200]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-10-9YBIyesePmCXdTwWUUJerg-1; Fri, 25 Mar 2022 14:09:47 -0400 X-MC-Unique: 9YBIyesePmCXdTwWUUJerg-1 Received: by mail-qt1-f200.google.com with SMTP id o15-20020ac8698f000000b002e1db0c88d0so6622741qtq.17 for ; Fri, 25 Mar 2022 11:09:47 -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=2u9o1DHE9ICqOuvVXZ6++28lg5CkG0e7I3HQLF8s13c=; b=ELake4k+i+UnpYKpKepoJRgPeCpOiBFqLW7YJgtzZ2cUjxOEtSvYsWw7Bf+LKZsUUb b+07rUlJFfU1lzdQFYzJj2Z2yV2D18huRh6+RLT+OgCMNwqupeMsi1EFniygi8pay+aX PNuOn7odxQlI3Xs6a47qvvIly++Ue92myZbSkl2/upnDeOYjp4t5BhdL8GyhjKP+pg8X 1ArMU+8m+XJkkiDv0+r45E9MnTEoctvvFjowUpdBpLc35EAFtezOOXaOjRX5TFr62HOf 5YxKTRzwVMOjgY30JTDCrM4Qoh4pjfjludvhhTEKp4OUUIXsJJ1kuRoXmZ91MCemqpHk ZPJw== X-Gm-Message-State: AOAM533AJotIy4SMHchrevIu/8JezsxMoAOAO7lubwmgbFlyVwmQmrOV F2w0aITjovXOfZOT3isg3vTnPnU0AeigAc4DQOtiVTIZQp9xFTzRuVL6jZh1uF714TZ0Head4za +5n/lKN7JvQJZNt1SDKtjTpDypA+6/1Pcch8Xep0gWCSyM8rHolMFjWT8yDZ5JArluJE= X-Received: by 2002:ae9:e214:0:b0:67d:4071:f128 with SMTP id c20-20020ae9e214000000b0067d4071f128mr7786750qkc.221.1648231786932; Fri, 25 Mar 2022 11:09:46 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzSJ997KrNVxfy/1rfMWQRV5wToiLZtlnaywbDDzjQn4OUnHFuyS7cdFz49UZIOjD6eJ42JcA== X-Received: by 2002:ae9:e214:0:b0:67d:4071:f128 with SMTP id c20-20020ae9e214000000b0067d4071f128mr7786732qkc.221.1648231786597; Fri, 25 Mar 2022 11:09:46 -0700 (PDT) Received: from localhost.localdomain (ool-18e40894.dyn.optonline.net. [24.228.8.148]) by smtp.gmail.com with ESMTPSA id u13-20020a05622a010d00b002e1d653c2e1sm5631105qtw.46.2022.03.25.11.09.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 25 Mar 2022 11:09:46 -0700 (PDT) To: gcc-patches@gcc.gnu.org Subject: [PATCH] c++: ICE when building builtin operator->* set [PR103455] Date: Fri, 25 Mar 2022 14:09:31 -0400 Message-Id: <20220325180931.3173582-1-ppalka@redhat.com> X-Mailer: git-send-email 2.35.1.655.ga68dfadae5 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_NONE, RCVD_IN_MSPIKE_H5, RCVD_IN_MSPIKE_WL, 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" When constructing the builtin operator->* candidate set according to the available conversion functions for each operand type, we end up considering a candidate with C1=T (a TEMPLATE_TYPE_PARM) and C2=F, during which we crash from lookup_base because dependent_type_p sees a TEMPLATE_TYPE_PARM when processing_template_decl is cleared. Sidestepping the question of whether we should be considering a dependent conversion function here in the first place (which I'm not sure about), it seems futile to check DERIVED_FROM_P for anything other than an actual class type, so this patch fixes this ICE by guarding the DERIVED_FROM_P test with CLASS_TYPE_P instead of MAYBE_CLASS_TYPE_P. Bootstrapped and regtested on x86_64-pc-linux-gnu, does this look OK for trunk and perhaps the release branches? PR c++/103455 gcc/cp/ChangeLog: * call.cc (add_builtin_candidate) : Check CLASS_TYPE_P instead of MAYBE_CLASS_TYPE_P. gcc/testsuite/ChangeLog: * g++.dg/overload/builtin6.C: New test. --- gcc/cp/call.cc | 2 +- gcc/testsuite/g++.dg/overload/builtin6.C | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/overload/builtin6.C diff --git a/gcc/cp/call.cc b/gcc/cp/call.cc index ec6c5d5baa2..dfe370d685d 100644 --- a/gcc/cp/call.cc +++ b/gcc/cp/call.cc @@ -2821,7 +2821,7 @@ add_builtin_candidate (struct z_candidate **candidates, enum tree_code code, tree c1 = TREE_TYPE (type1); tree c2 = TYPE_PTRMEM_CLASS_TYPE (type2); - if (MAYBE_CLASS_TYPE_P (c1) && DERIVED_FROM_P (c2, c1) + if (CLASS_TYPE_P (c1) && DERIVED_FROM_P (c2, c1) && (TYPE_PTRMEMFUNC_P (type2) || is_complete (TYPE_PTRMEM_POINTED_TO_TYPE (type2)))) break; diff --git a/gcc/testsuite/g++.dg/overload/builtin6.C b/gcc/testsuite/g++.dg/overload/builtin6.C new file mode 100644 index 00000000000..25e45040094 --- /dev/null +++ b/gcc/testsuite/g++.dg/overload/builtin6.C @@ -0,0 +1,14 @@ +// PR c++/103455 + +struct A { }; + +struct B { + operator A*() const; + template operator T*() const; +}; + +typedef void (A::*F)(); + +void foo(B b, F f) { + (b->*f)(); +}