From patchwork Wed Mar 23 12:56:04 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jason Merrill X-Patchwork-Id: 52251 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 AA5E73840C2E for ; Wed, 23 Mar 2022 12:57:01 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org AA5E73840C2E DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1648040221; bh=0geNbasxaStgpErtSjNtmcDvIneDIrE6tfQT2bAUCvg=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=GlqwufBpZc6vW6q7L0l9Wzzq6mtZTi5R5q5RgAtTBugDsucBbk3ZwubHmQmRB1NW0 Z4/B61ib/fxw9rOOgbDce5PMUUCAqek+P+57Ghoe5dQkJlIqFktI4I4r7XDgOPQ/X8 08UAaq5vAlKLdwo2bSgiHJpdWgZR0PoIEDCvVRUE= 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 0C0133840C32 for ; Wed, 23 Mar 2022 12:56:20 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 0C0133840C32 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-650-CFb7PxuFMvekh1jyBOMAfg-1; Wed, 23 Mar 2022 08:56:08 -0400 X-MC-Unique: CFb7PxuFMvekh1jyBOMAfg-1 Received: by mail-qt1-f197.google.com with SMTP id e5-20020ac85985000000b002e217abd72fso1081201qte.9 for ; Wed, 23 Mar 2022 05:56:08 -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:subject:date:message-id:mime-version :content-transfer-encoding; bh=0geNbasxaStgpErtSjNtmcDvIneDIrE6tfQT2bAUCvg=; b=SBbd4DBUlSlSddprf9MZSYwfU+f2q8bYbEJf92pEqA3f325acq5slbl6ys9tu00Mz1 NbDYncglyorFwUBjbgo5Au4VaDXLHzy72TKTx1BEZ+Xzh+ncxRVSFQLKp2m6QgJCcRhR B+9WLaM6QLZjgu/IbuWELIRLocNVqWVtjz6wKDPTuYcH7/JHkr81tC/INVcQu7erv/U/ zPTBEUweNtr7L6XOA8FWTMQX4AGcwqofWxmuh5xuKrnrsVaHekpd3hdx66r0gGVAlfJT Yf8MVfTLyxEv1m7C8pS690jLab0kbq8DMFYYMFxrIS/6MbgEDmDavMCUWSgo58n9JL6U oYhQ== X-Gm-Message-State: AOAM533Z68iKmw7dOJSy0BMApJpmNwF5gfz3uOtAhTWXREgU8gK8tMC2 xcwBHl8FqV6PVuujpTdRbJvuezn8u8V2DRHhS1noZjGUlsAKUbZWFKE5/cmvpXiaIEtGjmfBt/+ Om3uoQbmKcpEqA3WcPYsO/iv6CJxExpvKAsZD35N1u/FJRgFoEwE7+RLYBY6SrvEuog== X-Received: by 2002:a05:620a:4154:b0:67d:f85a:988f with SMTP id k20-20020a05620a415400b0067df85a988fmr18215699qko.585.1648040167687; Wed, 23 Mar 2022 05:56:07 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxax87ngNM8SC5jp7PSyOskXEfxYksnSwlaBluuxKsv3Z4QA0K2npibV1hpm3EYz+uEHlJE2A== X-Received: by 2002:a05:620a:4154:b0:67d:f85a:988f with SMTP id k20-20020a05620a415400b0067df85a988fmr18215684qko.585.1648040167145; Wed, 23 Mar 2022 05:56:07 -0700 (PDT) Received: from barrymore.redhat.com (130-44-159-43.s15913.c3-0.arl-cbr1.sbo-arl.ma.cable.rcncustomer.com. [130.44.159.43]) by smtp.gmail.com with ESMTPSA id o27-20020a05620a111b00b0067d5f359007sm10308991qkk.23.2022.03.23.05.56.05 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 23 Mar 2022 05:56:06 -0700 (PDT) To: gcc-patches@gcc.gnu.org Subject: [pushed] c++: using from enclosing class template [PR105006] Date: Wed, 23 Mar 2022 08:56:04 -0400 Message-Id: <20220323125604.3296543-1-jason@redhat.com> X-Mailer: git-send-email 2.27.0 MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-Spam-Status: No, score=-13.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_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: Jason Merrill via Gcc-patches From: Jason Merrill Reply-To: Jason Merrill Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" Here, DECL_DEPENDENT_P was false for the second using because Row is "the current instantiation", so lookup succeeds. But since Row itself has a dependent using-decl for operator(), the set of functions imported by the second using is dependent, so we should set the flag. Tested x86_64-pc-linux-gnu, applying to trunk. PR c++/105006 gcc/cp/ChangeLog: * name-lookup.cc (lookup_using_decl): Set DECL_DEPENDENT_P if lookup finds a dependent using. gcc/testsuite/ChangeLog: * g++.dg/template/using30.C: New test. --- gcc/cp/name-lookup.cc | 15 +++++++++++++++ gcc/testsuite/g++.dg/template/using30.C | 13 +++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 gcc/testsuite/g++.dg/template/using30.C base-commit: 4a9e92164a547afcf8cd3fc593c7660238ad2d59 diff --git a/gcc/cp/name-lookup.cc b/gcc/cp/name-lookup.cc index 323f96bcd24..ea947fabb7e 100644 --- a/gcc/cp/name-lookup.cc +++ b/gcc/cp/name-lookup.cc @@ -5665,6 +5665,21 @@ lookup_using_decl (tree scope, name_lookup &lookup) lookup.value = lookup_member (binfo, lookup.name, /*protect=*/2, /*want_type=*/false, tf_none); + /* If the lookup in the base contains a dependent using, this + using is also dependent. */ + if (!dependent_p && lookup.value) + { + tree val = lookup.value; + if (tree fns = maybe_get_fns (val)) + val = fns; + for (tree f: lkp_range (val)) + if (TREE_CODE (f) == USING_DECL && DECL_DEPENDENT_P (f)) + { + dependent_p = true; + break; + } + } + if (!depscope && b_kind < bk_proper_base) { if (cxx_dialect >= cxx20 && lookup.value diff --git a/gcc/testsuite/g++.dg/template/using30.C b/gcc/testsuite/g++.dg/template/using30.C new file mode 100644 index 00000000000..914252dd14c --- /dev/null +++ b/gcc/testsuite/g++.dg/template/using30.C @@ -0,0 +1,13 @@ +// PR c++/105006 + +template +class Row { + using eT::operator(); + void operator()(); + class fixed; +}; + +template +class Row::fixed : Row { + using Row::operator(); +};