From 199898121e433bcade4a0829584238f1fd232ed7 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Thu, 1 Nov 2001 22:09:39 +0100 Subject: [PATCH] tree.c (cp_copy_res_decl_for_inlining): Adjust DECL_ABSTRACT_ORIGIN for the return variable. * tree.c (cp_copy_res_decl_for_inlining): Adjust DECL_ABSTRACT_ORIGIN for the return variable. * g++.dg/other/debug1.C: New test. From-SVN: r46702 --- gcc/cp/ChangeLog | 5 +++ gcc/cp/tree.c | 1 + gcc/testsuite/ChangeLog | 4 +++ gcc/testsuite/g++.dg/other/debug1.C | 49 +++++++++++++++++++++++++++++ 4 files changed, 59 insertions(+) create mode 100644 gcc/testsuite/g++.dg/other/debug1.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index a75e350cabf..49e771e6202 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2001-11-01 Jakub Jelinek + + * tree.c (cp_copy_res_decl_for_inlining): Adjust + DECL_ABSTRACT_ORIGIN for the return variable. + 2001-10-31 Zack Weinberg * Make-lang.in: Replace $(INTL_TARGETS) with po-generated. diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c index 6ae0a352d38..23c5ce85e62 100644 --- a/gcc/cp/tree.c +++ b/gcc/cp/tree.c @@ -2250,6 +2250,7 @@ cp_copy_res_decl_for_inlining (result, fn, caller, decl_map_, DECL_NAME (var) = DECL_NAME (nrv); DECL_SOURCE_FILE (var) = DECL_SOURCE_FILE (nrv); DECL_SOURCE_LINE (var) = DECL_SOURCE_LINE (nrv); + DECL_ABSTRACT_ORIGIN (var) = DECL_ORIGIN (nrv); splay_tree_insert (decl_map, (splay_tree_key) nrv, (splay_tree_value) var); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e8c8aed48d3..ecd6473496a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2001-11-01 Jakub Jelinek + + * g++.dg/other/debug1.C: New test. + 2001-11-01 Stephane Carrez * gcc.c-torture/compile/20010327-1.c: Use __SIZE_TYPE__ instead diff --git a/gcc/testsuite/g++.dg/other/debug1.C b/gcc/testsuite/g++.dg/other/debug1.C new file mode 100644 index 00000000000..92689c7e37f --- /dev/null +++ b/gcc/testsuite/g++.dg/other/debug1.C @@ -0,0 +1,49 @@ +// Test whether dwarf2 debug info works with named return value optimization +// { dg-do compile { i?86-*-linux* } +// { dg-options "-O2 -gdwarf-2" } + +struct S +{ + virtual ~S(); + S (const char *str); + S& operator= (const char *str); + operator const char *() const; + S& operator+= (const char *str); +}; +inline S operator+ (const char *s1, const S &s2) +{ + S x (s1); + x += s2; + return x; +} +struct U +{ + U (); + U& operator= (const char *); + const char *foo() const; + operator const char *() const { return foo(); } +}; +template struct V +{ + T v; +}; +template struct W +{ + V *w; + W() : w (0) {} + const T& operator* () const { return w->v; } + T& operator* () { return w->v; } +}; +struct X { + X(); +}; +struct Y { + Y (const U &u); +}; +X::X() +{ + W a; + U b; + b = (*a) + "xx"; + Y c (b); +} -- 2.30.2