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
This commit is contained in:
parent
a3119b91dc
commit
d7f1df66b2
4 changed files with 22 additions and 22 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
12
gcc/testsuite/g++.dg/debug/dwarf2/static-data-member2.C
Normal file
12
gcc/testsuite/g++.dg/debug/dwarf2/static-data-member2.C
Normal file
|
@ -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 () { }
|
Loading…
Add table
Reference in a new issue