From patchwork Tue Jul 28 16:01:19 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nathan Sidwell X-Patchwork-Id: 1337910 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=8.43.85.97; helo=sourceware.org; envelope-from=gcc-patches-bounces@gcc.gnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=acm.org Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=r10vh3VI; dkim-atps=neutral Received: from sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4BGLyJ0r2sz9sRX for ; Wed, 29 Jul 2020 02:01:27 +1000 (AEST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 5D04F388E815; Tue, 28 Jul 2020 16:01:25 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-qk1-x72d.google.com (mail-qk1-x72d.google.com [IPv6:2607:f8b0:4864:20::72d]) by sourceware.org (Postfix) with ESMTPS id 337D63840C0C for ; Tue, 28 Jul 2020 16:01:23 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 337D63840C0C Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=acm.org Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=nathanmsidwell@gmail.com Received: by mail-qk1-x72d.google.com with SMTP id h7so19109262qkk.7 for ; Tue, 28 Jul 2020 09:01:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:to:from:subject:message-id:date:user-agent:mime-version :content-language; bh=1OwHklu+x9Ir0FN0GVLCsAYDfCC4sbQN4uaO1gvfUFA=; b=r10vh3VIWounP7gC98lfvrrddsuH9CteGHmqMFZlmuWfO9QXWEcb64KzOg6r6PxBJ4 E4ccwuq2OnrPBpMSa0d1j1aeHUxqq8uio/Duu1YMQ2DCnAm9+4LpvEJqiNzOFdN2vhTv /ZaXL38ytDohFx34y/FWsdGpmoIwOiHNt8NWogTRWQxX5NPPaFnM4X035pGNin2I2yWJ /ve2NXFtccSCh4pFCxLdxBhVJi+b4qrlsI+lf53LmrcLeevRfxvMWSic7q2S+SXaWnFn U/gv2/zjCDDI2U3e9dMVpqx5D/JpVKK/dxD7LdKa/erHn3IrTSFJff0mA/UvAFAwcqNv Riyw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:to:from:subject:message-id:date :user-agent:mime-version:content-language; bh=1OwHklu+x9Ir0FN0GVLCsAYDfCC4sbQN4uaO1gvfUFA=; b=mmmvZ2KA19nJ9wFjDWrpbxdx4OkqCMH3GPPwBNLUwQ+ViP/kEF8pLdXIzOoVhsg2/A /t6nZodsrcNZ+FbZOOzoFgSM1LrLA4FdRLx/syTRSqqCY/pHYJvQEM+rGraPzGQe5VoX DbBXpuuIAyNRr0Ruk7ZeAnJMTNyk5XoxA5jXQqLlunoGDgpRjeZiC08TKhaZypPOOW7B 0ZVTVggI41ELnuoVCu5QY6P+4a8HesSLvwewCXurjTbZ448lrNXdI0tbRlf2BQWBhYNv KQaNOzvZfmjT7cyWELghnJgsPy5wqsPdJDO/qGOgp3hlH9GXOjW0H32ytecAnNEMjFB9 3Seg== X-Gm-Message-State: AOAM530sDSFAO4JTNq0r0pFRAy58iFI0zvPNQEV3HauJ0chXCFeJVWic TWPllaZVBmm68zbLHzxvT4mzxbmU X-Google-Smtp-Source: ABdhPJxWcekJzpHLpJqnEzsygRrSydSs5n+YE4M0zsZq5o6CbjAu95B/X3ezvL7SJlqBYtB3iVHTsQ== X-Received: by 2002:a05:620a:20dd:: with SMTP id f29mr27622984qka.484.1595952081913; Tue, 28 Jul 2020 09:01:21 -0700 (PDT) Received: from ?IPv6:2620:10d:c0a8:1102:8dca:52c0:55dc:4795? ([2620:10d:c091:480::1:9eee]) by smtp.googlemail.com with ESMTPSA id w27sm18031130qtv.68.2020.07.28.09.01.20 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 28 Jul 2020 09:01:21 -0700 (PDT) To: GCC Patches From: Nathan Sidwell Subject: c++: Set more DECL_CONTEXTs Message-ID: <82c3fb25-65ce-10db-c730-29cf97bdc3a4@acm.org> Date: Tue, 28 Jul 2020 12:01:19 -0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.5.0 MIME-Version: 1.0 Content-Language: en-US X-Spam-Status: No, score=-9.9 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_EF, FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM, GIT_PATCH_0, HEADER_FROM_DIFFERENT_DOMAINS, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) 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: , Errors-To: gcc-patches-bounces@gcc.gnu.org Sender: "Gcc-patches" I discovered we were not setting DECL_CONTEXT in a few cases, and grokfndecl's control flow wasn't making it clear that we were doing it in all cases. gcc/cp/ * cp-gimplify.c (cp_genericize_r): Set IMPORTED_DECL's context. * cp-objcp-common.c (cp_pushdecl): Set decl's context. * decl.c (grokfndecl): Make DECL_CONTEXT setting clearer. diff --git i/gcc/cp/cp-gimplify.c w/gcc/cp/cp-gimplify.c index 0e949e29c5c..f8695835684 100644 --- i/gcc/cp/cp-gimplify.c +++ w/gcc/cp/cp-gimplify.c @@ -1495,6 +1495,7 @@ cp_genericize_r (tree *stmt_p, int *walk_subtrees, void *data) { tree using_directive = make_node (IMPORTED_DECL); TREE_TYPE (using_directive) = void_type_node; + DECL_CONTEXT (using_directive) = current_function_decl; IMPORTED_DECL_ASSOCIATED_DECL (using_directive) = decl; DECL_CHAIN (using_directive) = BLOCK_VARS (block); diff --git i/gcc/cp/cp-objcp-common.c w/gcc/cp/cp-objcp-common.c index dfd8be978b4..fecf8669880 100644 --- i/gcc/cp/cp-objcp-common.c +++ w/gcc/cp/cp-objcp-common.c @@ -332,11 +332,12 @@ cp_get_global_decls () return NAMESPACE_LEVEL (global_namespace)->names; } -/* Push DECL into the current scope. */ +/* Push DECL into the current (namespace) scope. */ tree cp_pushdecl (tree decl) { + DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace); return pushdecl (decl); } diff --git i/gcc/cp/decl.c w/gcc/cp/decl.c index 385b1f3a0c4..b4beaa94257 100644 --- i/gcc/cp/decl.c +++ w/gcc/cp/decl.c @@ -9560,7 +9560,9 @@ grokfndecl (tree ctype, /* If this decl has namespace scope, set that up. */ if (in_namespace) set_decl_namespace (decl, in_namespace, friendp); - else if (!ctype) + else if (ctype) + DECL_CONTEXT (decl) = ctype; + else DECL_CONTEXT (decl) = FROB_CONTEXT (current_decl_namespace ()); /* `main' and builtins have implicit 'C' linkage. */ @@ -9588,12 +9590,8 @@ grokfndecl (tree ctype, if (deletedp) DECL_DELETED_FN (decl) = 1; - if (ctype) - { - DECL_CONTEXT (decl) = ctype; - if (funcdef_flag) - check_class_member_definition_namespace (decl); - } + if (ctype && funcdef_flag) + check_class_member_definition_namespace (decl); if (ctype == NULL_TREE && DECL_MAIN_P (decl)) {