diff options
Diffstat (limited to 'gcc/cp/tree.c')
-rw-r--r-- | gcc/cp/tree.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c index a060530..e6c0e50 100644 --- a/gcc/cp/tree.c +++ b/gcc/cp/tree.c @@ -1529,7 +1529,6 @@ mapcar (t, func) case PREINCREMENT_EXPR: case POSTDECREMENT_EXPR: case POSTINCREMENT_EXPR: - case CALL_EXPR: case ARRAY_REF: case SCOPE_REF: t = copy_node (t); @@ -1537,6 +1536,21 @@ mapcar (t, func) TREE_OPERAND (t, 1) = mapcar (TREE_OPERAND (t, 1), func); return t; + case CALL_EXPR: + t = copy_node (t); + TREE_TYPE (t) = mapcar (TREE_TYPE (t), func); + TREE_OPERAND (t, 0) = mapcar (TREE_OPERAND (t, 0), func); + TREE_OPERAND (t, 1) = mapcar (TREE_OPERAND (t, 1), func); + + /* tree.def says that operand two is RTL, but + build_call_declarator puts trees in there. */ + if (TREE_OPERAND (t, 2) + && TREE_CODE (TREE_OPERAND (t, 2)) == TREE_LIST) + TREE_OPERAND (t, 2) = mapcar (TREE_OPERAND (t, 2), func); + else + TREE_OPERAND (t, 2) = NULL_TREE; + return t; + case CONVERT_EXPR: case ADDR_EXPR: case INDIRECT_REF: |