From 978b62e554ffb4b34844c72d259ce71fcbd87591 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Tue, 18 May 2021 10:10:17 +0200 Subject: [PATCH] function: Set dummy DECL_ASSEMBLER_NAME in push_dummy_function [PR100580] Last year I've added cgraph_node::get_create calls for the dummy functions used for -fdump-passes, so that it interacts well with pass disabling/enabling which is cgraph uid based. Unfortunately, as the following testcase shows, when assembler hash is present, that wants to compute DECL_ASSEMBLER_NAME and the C++ FE is unprepared to handle it on the dummy functions which don't have DECL_NAME etc. The following patch fixes it by setting up a dummy DECL_ASSEMBLER_NAME on these, so that the FEs don't need to compute it. 2021-05-18 Jakub Jelinek <jakub@redhat.com> PR c++/100580 * function.c (push_dummy_function): Set DECL_ARTIFICIAL and DECL_ASSEMBLER_NAME on the fn_decl. * g++.dg/other/pr100580.C: New test. --- gcc/function.c | 3 +++ gcc/testsuite/g++.dg/other/pr100580.C | 8 ++++++++ 2 files changed, 11 insertions(+) create mode 100644 gcc/testsuite/g++.dg/other/pr100580.C diff --git a/gcc/function.c b/gcc/function.c index a3ed3987b952..fc7b147b5f1b 100644 --- a/gcc/function.c +++ b/gcc/function.c @@ -4930,6 +4930,9 @@ push_dummy_function (bool with_decl) fn_result_decl = build_decl (UNKNOWN_LOCATION, RESULT_DECL, NULL_TREE, void_type_node); DECL_RESULT (fn_decl) = fn_result_decl; + DECL_ARTIFICIAL (fn_decl) = 1; + tree fn_name = get_identifier (" "); + SET_DECL_ASSEMBLER_NAME (fn_decl, fn_name); } else fn_decl = NULL_TREE; diff --git a/gcc/testsuite/g++.dg/other/pr100580.C b/gcc/testsuite/g++.dg/other/pr100580.C new file mode 100644 index 000000000000..d6cc0a6dc616 --- /dev/null +++ b/gcc/testsuite/g++.dg/other/pr100580.C @@ -0,0 +1,8 @@ +// PR c++/100580 +// { dg-do compile } +// { dg-require-weak "" } +// { dg-options "-fdump-passes" } +// { dg-prune-output ".*" } + +int foo; +static __typeof(foo) bar __attribute__((__weakref__("foo"))); -- GitLab