From: jakub Date: Wed, 5 May 2010 09:25:01 +0000 (+0000) Subject: * var-tracking.c (var_debug_decl): Save DECL_DEBUG_EXPR value X-Git-Url: http://git.sourceforge.jp/view?a=commitdiff_plain;h=590a40b0f738239596da4e031056563d0e3fae38;p=pf3gnuchains%2Fgcc-fork.git * var-tracking.c (var_debug_decl): Save DECL_DEBUG_EXPR value in a temporary instead of invoking the macro multiple times. (track_expr_p): Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@159058 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5eed15dfe67..6d232bb7acb 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2010-05-05 Jakub Jelinek + + * var-tracking.c (var_debug_decl): Save DECL_DEBUG_EXPR value + in a temporary instead of invoking the macro multiple times. + (track_expr_p): Likewise. + 2010-05-04 Neil Vachharajani * doc/invoke.texi (-Wcoverage-mismatch): Updated documentation as diff --git a/gcc/var-tracking.c b/gcc/var-tracking.c index 55de2092c08..040a3e7a50c 100644 --- a/gcc/var-tracking.c +++ b/gcc/var-tracking.c @@ -1573,9 +1573,12 @@ static inline tree var_debug_decl (tree decl) { if (decl && DECL_P (decl) - && DECL_DEBUG_EXPR_IS_FROM (decl) && DECL_DEBUG_EXPR (decl) - && DECL_P (DECL_DEBUG_EXPR (decl))) - decl = DECL_DEBUG_EXPR (decl); + && DECL_DEBUG_EXPR_IS_FROM (decl)) + { + tree debugdecl = DECL_DEBUG_EXPR (decl); + if (debugdecl && DECL_P (debugdecl)) + decl = debugdecl; + } return decl; } @@ -4497,12 +4500,14 @@ track_expr_p (tree expr, bool need_rtl) don't need to track this expression if the ultimate declaration is ignored. */ realdecl = expr; - if (DECL_DEBUG_EXPR_IS_FROM (realdecl) && DECL_DEBUG_EXPR (realdecl)) + if (DECL_DEBUG_EXPR_IS_FROM (realdecl)) { realdecl = DECL_DEBUG_EXPR (realdecl); + if (realdecl == NULL_TREE) + realdecl = expr; /* ??? We don't yet know how to emit DW_OP_piece for variable that has been SRA'ed. */ - if (!DECL_P (realdecl)) + else if (!DECL_P (realdecl)) return 0; }