From: Jason Merrill Date: Wed, 25 Feb 2015 15:49:34 +0000 (-0500) Subject: re PR debug/58315 (Excessive memory use with -g) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=9b276dada87bb74d9dd7eff4e9aea26f45acacbe;p=gcc.git re PR debug/58315 (Excessive memory use with -g) PR debug/58315 * decl.c (start_preparsed_function): Use create_artificial_label for cdtor_label. From-SVN: r220974 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 115a9f3700a..fbebe8e324c 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2015-02-25 Jason Merrill + + PR debug/58315 + * decl.c (start_preparsed_function): Use create_artificial_label + for cdtor_label. + 2015-02-17 Paolo Carlini Jakub Jelinek diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 67c5ae73e36..83e060b4d11 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -13721,9 +13721,7 @@ start_preparsed_function (tree decl1, tree attrs, int flags) || (DECL_CONSTRUCTOR_P (decl1) && targetm.cxx.cdtor_returns_this ())) { - cdtor_label = build_decl (input_location, - LABEL_DECL, NULL_TREE, void_type_node); - DECL_CONTEXT (cdtor_label) = current_function_decl; + cdtor_label = create_artificial_label (input_location); } start_fname_decls (); diff --git a/gcc/testsuite/g++.dg/tree-ssa/deleted-label1.C b/gcc/testsuite/g++.dg/tree-ssa/deleted-label1.C new file mode 100644 index 00000000000..11c06be52cd --- /dev/null +++ b/gcc/testsuite/g++.dg/tree-ssa/deleted-label1.C @@ -0,0 +1,19 @@ +// PR debug/58315 +// { dg-options "-O -g -fdump-tree-einline" } +// { dg-final { scan-tree-dump-not "DEBUG " "einline" } } +// { dg-final { cleanup-tree-dump "einline" } } + +// We used to emit useless NOTE_INSN_DELETED_DEBUG_LABELs for the +// artificial cdtor_label. + +struct A +{ + ~A() {} +}; + +struct B: A {}; + +int main() +{ + A a; +}