diff options
author | reichelt <reichelt@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-03-06 02:01:29 +0000 |
---|---|---|
committer | reichelt <reichelt@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-03-06 02:01:29 +0000 |
commit | dd76e3fe53ed762083519161932a7a0e9325c98d (patch) | |
tree | fef6f146464dcfcf6d6123a157e675a7ece31dc4 | |
parent | ad0d48bcb8918aef69e55f61af30805ab36fa45d (diff) | |
download | gcc-dd76e3fe53ed762083519161932a7a0e9325c98d.tar.gz |
PR c++/15759
* tree.c (bot_manip): Don't call mark_used.
* g++.dg/other/default4.C: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@111754 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/tree.c | 15 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/other/default4.C | 29 |
4 files changed, 43 insertions, 11 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index f0d1301b7c5..4c735d74c0b 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2006-03-06 Volker Reichelt <reichelt@igpm.rwth-aachen.de> + + PR c++/15759 + * tree.c (bot_manip): Don't call mark_used. + 2006-03-02 Mike Stump <mrs@apple.com> * decl2.c (import_export_decl): Remove redundant call to diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c index 16e87ec2d63..d58b5b350dd 100644 --- a/gcc/cp/tree.c +++ b/gcc/cp/tree.c @@ -1173,16 +1173,11 @@ bot_manip (tree* tp, int* walk_subtrees, void* data) tree u; if (TREE_CODE (TREE_OPERAND (t, 1)) == AGGR_INIT_EXPR) - { - mark_used (TREE_OPERAND (TREE_OPERAND (TREE_OPERAND (t, 1), 0), 0)); - u = build_cplus_new - (TREE_TYPE (t), break_out_target_exprs (TREE_OPERAND (t, 1))); - } + u = build_cplus_new + (TREE_TYPE (t), break_out_target_exprs (TREE_OPERAND (t, 1))); else - { - u = build_target_expr_with_type - (break_out_target_exprs (TREE_OPERAND (t, 1)), TREE_TYPE (t)); - } + u = build_target_expr_with_type + (break_out_target_exprs (TREE_OPERAND (t, 1)), TREE_TYPE (t)); /* Map the old variable to the new one. */ splay_tree_insert (target_remap, @@ -1197,8 +1192,6 @@ bot_manip (tree* tp, int* walk_subtrees, void* data) *walk_subtrees = 0; return NULL_TREE; } - else if (TREE_CODE (t) == CALL_EXPR) - mark_used (TREE_OPERAND (TREE_OPERAND (t, 0), 0)); /* Make a copy of this node. */ return copy_tree_r (tp, walk_subtrees, NULL); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d38d9599825..3d5f444ceea 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2006-03-06 Volker Reichelt <reichelt@igpm.rwth-aachen.de> + + PR c++/15759 + * g++.dg/other/default4.C: New test. + 2005-03-05 Erik Edelmann <eedelman@gcc.gnu.org> PR fortran/16136 diff --git a/gcc/testsuite/g++.dg/other/default4.C b/gcc/testsuite/g++.dg/other/default4.C new file mode 100644 index 00000000000..59948098402 --- /dev/null +++ b/gcc/testsuite/g++.dg/other/default4.C @@ -0,0 +1,29 @@ +// PR c++/15759 +// Origin: Lars Rune N�stdal <larsnostdal@gmail.com> +// Testcase: Volker Reichelt <reichelt@igpm.rwth-aachen.de> + +// { dg-do run } + +extern "C" void abort(); + +int n = 0; + +int f() { return ++n; } + +int(&foo1)() = f; +int(*foo2)() = &f; +int(*foo3)() = f; + +int bar1(int i = foo1()) { return i; } +int bar2(int i = foo2()) { return i; } +int bar3(int i = foo3()) { return i; } +int bar4(int i = f()) { return i; } + +int main() +{ + if (bar1() != 1) abort(); + if (bar2() != 2) abort(); + if (bar3() != 3) abort(); + if (bar4() != 4) abort(); + return 0; +} |