From 9fc8daccc5fe380b2398a1a62b128d352d166478 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Wed, 2 Jun 2010 21:55:33 +0200 Subject: [PATCH] re PR debug/44367 (-O0 -g wrong DW_AT_location on c++ class retval) PR debug/44367 * semantics.c (finalize_nrv): Don't copy DECL_ARTIFICIAL, DECL_IGNORED_P, DECL_SOURCE_LOCATION and DECL_ABSTRACT_ORIGIN from var to result. Set DECL_VALUE_EXPR on var. From-SVN: r160187 --- gcc/cp/ChangeLog | 5 +++++ gcc/cp/cvt.c | 28 ++++++++++++++++------------ 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 9a031f9..b09d7e9 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -10,6 +10,11 @@ DECL_SOURCE_LOCATION and DECL_ABSTRACT_ORIGIN from var to result. Set DECL_VALUE_EXPR on var. + PR debug/44367 + * semantics.c (finalize_nrv): Don't copy DECL_ARTIFICIAL, DECL_IGNORED_P, + DECL_SOURCE_LOCATION and DECL_ABSTRACT_ORIGIN from var to result. + Set DECL_VALUE_EXPR on var. + 2010-06-02 Jason Merrill * error.c (dump_type): Improve typedef handling. diff --git a/gcc/cp/cvt.c b/gcc/cp/cvt.c index 646610a..71315b1 100644 --- a/gcc/cp/cvt.c +++ b/gcc/cp/cvt.c @@ -822,22 +822,26 @@ ocp_convert (tree type, tree expr, int convtype, int flags) tree convert_to_void (tree expr, const char *implicit, tsubst_flags_t complain) { - tree exprv; - if (expr == error_mark_node || TREE_TYPE (expr) == error_mark_node) return error_mark_node; - exprv = expr; - while (TREE_CODE (exprv) == COMPOUND_EXPR) - exprv = TREE_OPERAND (exprv, 1); - if (DECL_P (exprv) || handled_component_p (exprv)) - /* Expr is not being 'used' here, otherwise we whould have - called mark_{rl}value_use use here, which would have in turn - called mark_exp_read. Rather, we call mark_exp_read directly - to avoid some warnings when - -Wunused-but-set-{variable,parameter} is in effect. */ - mark_exp_read (exprv); + if (implicit == NULL) + mark_exp_read (expr); + else + { + tree exprv = expr; + + while (TREE_CODE (exprv) == COMPOUND_EXPR) + exprv = TREE_OPERAND (exprv, 1); + if (DECL_P (exprv) || handled_component_p (exprv)) + /* Expr is not being 'used' here, otherwise we whould have + called mark_{rl}value_use use here, which would have in turn + called mark_exp_read. Rather, we call mark_exp_read directly + to avoid some warnings when + -Wunused-but-set-{variable,parameter} is in effect. */ + mark_exp_read (exprv); + } if (!TREE_TYPE (expr)) return expr; -- 2.7.4