diff options
author | Jason Merrill <jason@redhat.com> | 2009-11-13 12:59:26 -0500 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2009-11-13 12:59:26 -0500 |
commit | d7f1df66b24583dde50993c2aed5e4d517c44026 (patch) | |
tree | f9d3c9aa30a408ec448ad5914b9f091633af6b13 | |
parent | a3119b91dc67118b407a742b03279a14dc6fa5ec (diff) | |
download | gcc-d7f1df66b24583dde50993c2aed5e4d517c44026.zip gcc-d7f1df66b24583dde50993c2aed5e4d517c44026.tar.gz gcc-d7f1df66b24583dde50993c2aed5e4d517c44026.tar.bz2 |
re PR c++/26965 (Unnecessary debug info for unused consts in C++)
PR debug/26965
* dwarf2out.c (gen_variable_die): Don't worry about DECL_COMDAT.
Don't emit a second declaration at any scope.
From-SVN: r154157
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/dwarf2out.c | 23 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/debug/dwarf2/static-data-member2.C | 12 |
4 files changed, 22 insertions, 22 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 02fa62b..50b9dc2 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2009-11-13 Jason Merrill <jason@redhat.com> + + PR debug/26965 + * dwarf2out.c (gen_variable_die): Don't worry about DECL_COMDAT. + Don't emit a second declaration at any scope. + 2009-11-13 Andrey Belevantsev <abel@ispras.ru> PR rtl-optimization/41697 diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index e3a6412..2ebe0ae 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -17926,26 +17926,6 @@ gen_variable_die (tree decl, tree origin, dw_die_ref context_die) dw_die_ref old_die = decl ? lookup_decl_die (decl) : NULL; dw_die_ref origin_die; int declaration = (DECL_EXTERNAL (decl_or_origin) - /* If DECL is COMDAT and has not actually been - emitted, we cannot take its address; there - might end up being no definition anywhere in - the program. For example, consider the C++ - test case: - - template <class T> - struct S { static const int i = 7; }; - - template <class T> - const int S<T>::i; - - int f() { return S<int>::i; } - - Here, S<int>::i is not DECL_EXTERNAL, but no - definition is required, so the compiler will - not emit a definition. */ - || (TREE_CODE (decl_or_origin) == VAR_DECL - && DECL_COMDAT (decl_or_origin) - && !TREE_ASM_WRITTEN (decl_or_origin)) || class_or_namespace_scope_p (context_die)); if (!origin) @@ -18059,8 +18039,7 @@ gen_variable_die (tree decl, tree origin, dw_die_ref context_die) and if we already emitted a DIE for it, don't emit a second DIE for it again. */ if (old_die - && declaration - && old_die->die_parent == context_die) + && declaration) return; /* For static data members, the declaration in the class is supposed diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e60555a..c50863f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2009-11-13 Jason Merrill <jason@redhat.com> + PR debug/26965 + * g++.dg/debug/dwarf2/static-data-member2.C: New. + PR c++/35075 * g++.dg/template/ref5.C: New. diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/static-data-member2.C b/gcc/testsuite/g++.dg/debug/dwarf2/static-data-member2.C new file mode 100644 index 0000000..5681445 --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/static-data-member2.C @@ -0,0 +1,12 @@ +// PR debug/26965 +// { dg-options "-gdwarf-2 -dA" } +// { dg-final { scan-assembler-not "DW_TAG_variable" } } +// { dg-final { scan-assembler-not "DW_TAG_enumerator" } } +// { dg-final { scan-assembler-not "DW_TAG_enumeration_type" } } + +enum x { i = 1 }; +class c { + static const x beg = i; + int foo () { return (int) beg; } +}; +void bar () { } |