Commit 427f6cec by Alexandre Oliva Committed by Alexandre Oliva

re PR tree-optimization/46583 (-fcompare-debug failure with -O -fno-inline -fipa-cp -fipa-cp-clone)

gcc/ChangeLog:
PR debug/46583
* tree-ssa-live.c (remove_unused_scope_block_p): Keep type decls.
gcc/testsuite/ChangeLog:
PR debug/46583
* g++.dg/debug/pr46583.C: New.

From-SVN: r169058
parent 583ac69c
2011-01-20 Alexandre Oliva <aoliva@redhat.com>
PR debug/46583
* tree-ssa-live.c (remove_unused_scope_block_p): Keep type decls.
2011-01-20 Jakub Jelinek <jakub@redhat.com> 2011-01-20 Jakub Jelinek <jakub@redhat.com>
PR debug/47283 PR debug/47283
......
2011-01-20 Alexandre Oliva <aoliva@redhat.com>
PR debug/46583
* g++.dg/debug/pr46583.C: New.
2011-01-20 Jakub Jelinek <jakub@redhat.com> 2011-01-20 Jakub Jelinek <jakub@redhat.com>
PR debug/47283 PR debug/47283
......
// PR debug/46583
// { dg-do compile }
// { dg-options "-O -fno-inline -fipa-cp -fipa-cp-clone -fcompare-debug" }
template < typename = unsigned long >struct A
{
unsigned long elems[3];
unsigned long *begin ()
{
return 0;
}
};
void
bar (unsigned long *a1, unsigned long, unsigned long *a3, unsigned const &)
{
*a3 = *a1;
}
A < >operatorM (A < >a1, unsigned long a2)
{
typedef A < >G;
G a3;
bar (a1.begin (), a2, a3.begin (), 0);
return a3;
}
struct B
{
B (A < >m):n (operatorM (m, 1))
{
}
A < >n;
};
void
foo ()
{
B (A < >());
}
...@@ -490,11 +490,16 @@ remove_unused_scope_block_p (tree scope) ...@@ -490,11 +490,16 @@ remove_unused_scope_block_p (tree scope)
can be considered dead. We only want to keep around blocks user can can be considered dead. We only want to keep around blocks user can
breakpoint into and ask about value of optimized out variables. breakpoint into and ask about value of optimized out variables.
Similarly we need to keep around types at least until all variables of Similarly we need to keep around types at least until all
all nested blocks are gone. We track no information on whether given variables of all nested blocks are gone. We track no
type is used or not. */ information on whether given type is used or not, so we have
to keep them even when not emitting debug information,
else if (debug_info_level == DINFO_LEVEL_NORMAL otherwise we may end up remapping variables and their (local)
types in different orders depending on whether debug
information is being generated. */
else if (TREE_CODE (*t) == TYPE_DECL
|| debug_info_level == DINFO_LEVEL_NORMAL
|| debug_info_level == DINFO_LEVEL_VERBOSE) || debug_info_level == DINFO_LEVEL_VERBOSE)
; ;
else else
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment