re PR debug/46815 (Invalid DW_AT_location for a retval instance of a class that has a virtual function)
PR debug/46815 * cp-gimplify.c (cp_genericize): When changing RESULT_DECL into invisible reference, change also DECL_VALUE_EXPR of NRV optimized variable. * g++.dg/guality/pr46815.C: New test. From-SVN: r167865
This commit is contained in:
parent
db1792ee33
commit
140806fa55
@ -1,3 +1,10 @@
|
|||||||
|
2010-12-15 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
PR debug/46815
|
||||||
|
* cp-gimplify.c (cp_genericize): When changing RESULT_DECL
|
||||||
|
into invisible reference, change also DECL_VALUE_EXPR of
|
||||||
|
NRV optimized variable.
|
||||||
|
|
||||||
2010-12-15 Paolo Carlini <paolo.carlini@oracle.com>
|
2010-12-15 Paolo Carlini <paolo.carlini@oracle.com>
|
||||||
|
|
||||||
PR c++/42083
|
PR c++/42083
|
||||||
|
@ -958,6 +958,23 @@ cp_genericize (tree fndecl)
|
|||||||
DECL_BY_REFERENCE (t) = 1;
|
DECL_BY_REFERENCE (t) = 1;
|
||||||
TREE_ADDRESSABLE (t) = 0;
|
TREE_ADDRESSABLE (t) = 0;
|
||||||
relayout_decl (t);
|
relayout_decl (t);
|
||||||
|
if (DECL_NAME (t))
|
||||||
|
{
|
||||||
|
/* Adjust DECL_VALUE_EXPR of the original var. */
|
||||||
|
tree outer = outer_curly_brace_block (current_function_decl);
|
||||||
|
tree var;
|
||||||
|
|
||||||
|
if (outer)
|
||||||
|
for (var = BLOCK_VARS (outer); var; var = DECL_CHAIN (var))
|
||||||
|
if (DECL_NAME (t) == DECL_NAME (var)
|
||||||
|
&& DECL_HAS_VALUE_EXPR_P (var)
|
||||||
|
&& DECL_VALUE_EXPR (var) == t)
|
||||||
|
{
|
||||||
|
tree val = convert_from_reference (t);
|
||||||
|
SET_DECL_VALUE_EXPR (var, val);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If we're a clone, the body is already GIMPLE. */
|
/* If we're a clone, the body is already GIMPLE. */
|
||||||
|
@ -1,3 +1,8 @@
|
|||||||
|
2010-12-15 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
PR debug/46815
|
||||||
|
* g++.dg/guality/pr46815.C: New test.
|
||||||
|
|
||||||
2010-12-15 Paolo Carlini <paolo.carlini@oracle.com>
|
2010-12-15 Paolo Carlini <paolo.carlini@oracle.com>
|
||||||
|
|
||||||
PR c++/42083
|
PR c++/42083
|
||||||
|
25
gcc/testsuite/g++.dg/guality/pr46815.C
Normal file
25
gcc/testsuite/g++.dg/guality/pr46815.C
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
// PR debug/46815
|
||||||
|
// { dg-do run }
|
||||||
|
// { dg-options "-g" }
|
||||||
|
// { dg-skip-if "" { *-*-* } { "*" } { "-O0" } }
|
||||||
|
|
||||||
|
struct S
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
S () { i = 42; }
|
||||||
|
virtual void foo (void) {}
|
||||||
|
};
|
||||||
|
|
||||||
|
S
|
||||||
|
bar ()
|
||||||
|
{
|
||||||
|
S s;
|
||||||
|
return s; // { dg-final { gdb-test 17 "s.i" "42" } }
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
S s = bar ();
|
||||||
|
return s.i - 42;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user