From: Nathan Sidwell Date: Wed, 28 Aug 2019 13:36:54 +0000 (+0000) Subject: [PR c++/90613] Fix using-decl debug bloat X-Git-Tag: upstream/12.2.0~22188 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a09b09ccee0208c68d5a6bb57fda94f55db4aded;p=platform%2Fupstream%2Fgcc.git [PR c++/90613] Fix using-decl debug bloat https://gcc.gnu.org/ml/gcc-patches/2019-08/msg01888.html cp/ PR c++/90613 * name-lookup.c (cp_emit_debug_info): Check for builtins during overload iteration. testsuite/ PR c++/90613 * g++.dg/lookup/using61.C: New. From-SVN: r274991 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index b735dab..08a44b6 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2019-08-28 Nathan Sidwell + + PR c++/90613 + * name-lookup.c (cp_emit_debug_info): Check for builtins during + overload iteration. + 2019-08-27 Marek Polacek PR c++/81676 - bogus -Wunused warnings in constexpr if. diff --git a/gcc/cp/name-lookup.c b/gcc/cp/name-lookup.c index a8ab4db..8bbb92d 100644 --- a/gcc/cp/name-lookup.c +++ b/gcc/cp/name-lookup.c @@ -7455,13 +7455,6 @@ cp_emit_debug_info_for_using (tree t, tree context) if (seen_error ()) return; - /* Ignore this FUNCTION_DECL if it refers to a builtin declaration - of a builtin function. */ - if (TREE_CODE (t) == FUNCTION_DECL - && DECL_EXTERNAL (t) - && fndecl_built_in_p (t)) - return; - /* Do not supply context to imported_module_or_decl, if it is a global namespace. */ if (context == global_namespace) @@ -7469,18 +7462,26 @@ cp_emit_debug_info_for_using (tree t, tree context) t = MAYBE_BASELINK_FUNCTIONS (t); - /* FIXME: Handle TEMPLATE_DECLs. */ for (lkp_iterator iter (t); iter; ++iter) { tree fn = *iter; - if (TREE_CODE (fn) != TEMPLATE_DECL) - { - if (building_stmt_list_p ()) - add_stmt (build_stmt (input_location, USING_STMT, fn)); - else - debug_hooks->imported_module_or_decl (fn, NULL_TREE, context, - false, false); - } + + if (TREE_CODE (fn) == TEMPLATE_DECL) + /* FIXME: Handle TEMPLATE_DECLs. */ + continue; + + /* Ignore this FUNCTION_DECL if it refers to a builtin declaration + of a builtin function. */ + if (TREE_CODE (fn) == FUNCTION_DECL + && DECL_EXTERNAL (fn) + && fndecl_built_in_p (fn)) + continue; + + if (building_stmt_list_p ()) + add_stmt (build_stmt (input_location, USING_STMT, fn)); + else + debug_hooks->imported_module_or_decl (fn, NULL_TREE, context, + false, false); } } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 333fe3c..480362e 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2019-08-16 Martin Liska + + PR c++/90613 + * g++.dg/lookup/using61.C: New. + 2019-08-28 Bernd Edlinger PR middle-end/89544 diff --git a/gcc/testsuite/g++.dg/lookup/using61.C b/gcc/testsuite/g++.dg/lookup/using61.C new file mode 100644 index 0000000..33d6df0 --- /dev/null +++ b/gcc/testsuite/g++.dg/lookup/using61.C @@ -0,0 +1,8 @@ +// { dg-options "-gdwarf-2" } +/* { dg-skip-if "No Dwarf" { { *-*-aix* hppa*-*-hpux* } && { ! hppa*64*-*-* } } } */ + +extern "C" long double nanl(const char *); +using ::nanl; + +// We should elide the using for this extern C builtin +// { dg-final { scan-assembler-not ".debug_info" } }