aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree.c
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>2004-04-25 19:54:42 -0400
committerRichard Kenner <kenner@gcc.gnu.org>2004-04-25 19:54:42 -0400
commit95df09f0a848d8e76f3e6b76d62e73ea825cfac7 (patch)
tree189bd2aa858b59fd84706e48441886b809f05c55 /gcc/tree.c
parentd7d2303533b184f5ac4faee20c09f78e19ef3c1a (diff)
downloadgcc-95df09f0a848d8e76f3e6b76d62e73ea825cfac7.zip
gcc-95df09f0a848d8e76f3e6b76d62e73ea825cfac7.tar.gz
gcc-95df09f0a848d8e76f3e6b76d62e73ea825cfac7.tar.bz2
PR/c++ 15119
PR/c++ 15119 * tree.c (substitute_placeholder_in_expr, case 4): New case, for TARGET_EXPR. From-SVN: r81170
Diffstat (limited to 'gcc/tree.c')
-rw-r--r--gcc/tree.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/gcc/tree.c b/gcc/tree.c
index 0b301e2..e7435a7 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -2053,7 +2053,7 @@ tree
substitute_placeholder_in_expr (tree exp, tree obj)
{
enum tree_code code = TREE_CODE (exp);
- tree op0, op1, op2;
+ tree op0, op1, op2, op3;
/* If this is a PLACEHOLDER_EXPR, see if we find a corresponding type
in the chain of OBJ. */
@@ -2151,6 +2151,19 @@ substitute_placeholder_in_expr (tree exp, tree obj)
else
return fold (build3 (code, TREE_TYPE (exp), op0, op1, op2));
+ case 4:
+ op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
+ op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 1), obj);
+ op2 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 2), obj);
+ op3 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 3), obj);
+
+ if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
+ && op2 == TREE_OPERAND (exp, 2)
+ && op3 == TREE_OPERAND (exp, 3))
+ return exp;
+ else
+ return fold (build4 (code, TREE_TYPE (exp), op0, op1, op2, op3));
+
default:
abort ();
}