diff options
author | Mark Mitchell <mark@codesourcery.com> | 2000-01-15 04:36:04 +0000 |
---|---|---|
committer | Mark Mitchell <mmitchel@gcc.gnu.org> | 2000-01-15 04:36:04 +0000 |
commit | ef97bf6bdd2cf1c771655bdf12d8e231e72ed60d (patch) | |
tree | 069df75f42aabb66d6b6154be932e6e175dff18d /gcc/cp/optimize.c | |
parent | a2be868fbade644577895e847ad2fc658cb6d7d5 (diff) | |
download | gcc-ef97bf6bdd2cf1c771655bdf12d8e231e72ed60d.zip gcc-ef97bf6bdd2cf1c771655bdf12d8e231e72ed60d.tar.gz gcc-ef97bf6bdd2cf1c771655bdf12d8e231e72ed60d.tar.bz2 |
optimize.c (copy_body_r): Clear the operand three of a TARGET_EXPR when copying it.
* optimize.c (copy_body_r): Clear the operand three of a
TARGET_EXPR when copying it.
From-SVN: r31435
Diffstat (limited to 'gcc/cp/optimize.c')
-rw-r--r-- | gcc/cp/optimize.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/gcc/cp/optimize.c b/gcc/cp/optimize.c index 2dd151c..f529e9d 100644 --- a/gcc/cp/optimize.c +++ b/gcc/cp/optimize.c @@ -1,6 +1,6 @@ /* Perform optimizations on tree structure. - Copyright (C) 1998, 1999 Free Software Foundation, Inc. + Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. Written by Mark Michell (mark@codesourcery.com). This file is part of GNU CC. @@ -285,6 +285,9 @@ copy_body_r (tp, walk_subtrees, data) /* Replace this variable with the copy. */ *tp = new_decl; } + else if (nonstatic_local_decl_p (*tp) + && DECL_CONTEXT (*tp) != VARRAY_TREE (id->fns, 0)) + my_friendly_abort (0); else if (TREE_CODE (*tp) == SAVE_EXPR) remap_save_expr (tp, id->decl_map, VARRAY_TREE (id->fns, 0), walk_subtrees); @@ -303,7 +306,10 @@ copy_body_r (tp, walk_subtrees, data) /* The copied TARGET_EXPR has never been expanded, even if the original node was expanded already. */ if (TREE_CODE (*tp) == TARGET_EXPR && TREE_OPERAND (*tp, 3)) - TREE_OPERAND (*tp, 1) = TREE_OPERAND (*tp, 3); + { + TREE_OPERAND (*tp, 1) = TREE_OPERAND (*tp, 3); + TREE_OPERAND (*tp, 3) = NULL_TREE; + } /* Similarly, if we're copying a CALL_EXPR, the RTL for the result is no longer valid. */ else if (TREE_CODE (*tp) == CALL_EXPR) |