diff options
author | paolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-02-03 11:22:41 +0000 |
---|---|---|
committer | paolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-02-03 11:22:41 +0000 |
commit | d1b92730f38c5396f7f1c87b64a3d8579be78d73 (patch) | |
tree | 38cfca602874b8689177b11b1cd223ef979c0667 /gcc/c-common.c | |
parent | e1aed66f129091f333c0f2d63065d37599a60703 (diff) | |
download | gcc-d1b92730f38c5396f7f1c87b64a3d8579be78d73.tar.gz |
2004-02-03 Paolo Bonzini <bonzini@gnu.org>
PR c/11658
PR c/13994
* Makefile.in (c-parse.o, c-convert.o, c-typeck.o): Depend
on langhooks.h.
* objc/Make-lang.in (objc-parse.o): Depend on langhooks.h.
* c-parse.in, c-convert.c, c-typeck.c, objc/objc-act.c:
Include langhooks.h. Replace c_common_truthvalue_conversion
with the truthvalue_conversion language hook throughout.
(expr_no_commas): Call default_conversion before save_expr
for the first term of the production 'x ? : y'.
* c-common.c (c_common_truthvalue_conversion): Remove
obsolete block. Invoke recursively the hook instead
of this function.
* c-convert.c (convert): handle ERROR_MARK_NODE.
* c-typeck.c (build_binary_op): handle ERROR_MARK_NODE
returned by the truthvalue_conversion language hook.
* c-lang.c (LANG_HOOKS_TRUTHVALUE_CONVERSION): Use
c_objc_common_truthvalue_conversion.
* c-objc-common.c (c_objc_common_truthvalue_conversion):
New function.
* c-tree.h (c_objc_common_truthvalue_conversion): Declare it.
* objc/objc-lang.c (LANG_HOOKS_TRUTHVALUE_CONVERSION): Use
c_objc_common_truthvalue_conversion.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@77168 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/c-common.c')
-rw-r--r-- | gcc/c-common.c | 42 |
1 files changed, 10 insertions, 32 deletions
diff --git a/gcc/c-common.c b/gcc/c-common.c index b96655731eb..b628ac49e5b 100644 --- a/gcc/c-common.c +++ b/gcc/c-common.c @@ -2614,28 +2614,6 @@ c_common_truthvalue_conversion (tree expr) if (TREE_CODE (expr) == FUNCTION_DECL) expr = build_unary_op (ADDR_EXPR, expr, 0); -#if 0 /* This appears to be wrong for C++. */ - /* These really should return error_mark_node after 2.4 is stable. - But not all callers handle ERROR_MARK properly. */ - switch (TREE_CODE (TREE_TYPE (expr))) - { - case RECORD_TYPE: - error ("struct type value used where scalar is required"); - return truthvalue_false_node; - - case UNION_TYPE: - error ("union type value used where scalar is required"); - return truthvalue_false_node; - - case ARRAY_TYPE: - error ("array type value used where scalar is required"); - return truthvalue_false_node; - - default: - break; - } -#endif /* 0 */ - switch (TREE_CODE (expr)) { case EQ_EXPR: @@ -2686,15 +2664,15 @@ c_common_truthvalue_conversion (tree expr) case COMPLEX_EXPR: return build_binary_op ((TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1)) ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR), - c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)), - c_common_truthvalue_conversion (TREE_OPERAND (expr, 1)), + (*lang_hooks.truthvalue_conversion) (TREE_OPERAND (expr, 0)), + (*lang_hooks.truthvalue_conversion) (TREE_OPERAND (expr, 1)), 0); case NEGATE_EXPR: case ABS_EXPR: case FLOAT_EXPR: /* These don't change whether an object is nonzero or zero. */ - return c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)); + return (*lang_hooks.truthvalue_conversion) (TREE_OPERAND (expr, 0)); case LROTATE_EXPR: case RROTATE_EXPR: @@ -2702,15 +2680,15 @@ c_common_truthvalue_conversion (tree expr) we can't ignore them if their second arg has side-effects. */ if (TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1))) return build (COMPOUND_EXPR, truthvalue_type_node, TREE_OPERAND (expr, 1), - c_common_truthvalue_conversion (TREE_OPERAND (expr, 0))); + (*lang_hooks.truthvalue_conversion) (TREE_OPERAND (expr, 0))); else - return c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)); + return (*lang_hooks.truthvalue_conversion) (TREE_OPERAND (expr, 0)); case COND_EXPR: /* Distribute the conversion into the arms of a COND_EXPR. */ return fold (build (COND_EXPR, truthvalue_type_node, TREE_OPERAND (expr, 0), - c_common_truthvalue_conversion (TREE_OPERAND (expr, 1)), - c_common_truthvalue_conversion (TREE_OPERAND (expr, 2)))); + (*lang_hooks.truthvalue_conversion) (TREE_OPERAND (expr, 1)), + (*lang_hooks.truthvalue_conversion) (TREE_OPERAND (expr, 2)))); case CONVERT_EXPR: /* Don't cancel the effect of a CONVERT_EXPR from a REFERENCE_TYPE, @@ -2723,7 +2701,7 @@ c_common_truthvalue_conversion (tree expr) /* If this is widening the argument, we can ignore it. */ if (TYPE_PRECISION (TREE_TYPE (expr)) >= TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (expr, 0)))) - return c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)); + return (*lang_hooks.truthvalue_conversion) (TREE_OPERAND (expr, 0)); break; case MINUS_EXPR: @@ -2772,8 +2750,8 @@ c_common_truthvalue_conversion (tree expr) return (build_binary_op ((TREE_SIDE_EFFECTS (expr) ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR), - c_common_truthvalue_conversion (build_unary_op (REALPART_EXPR, t, 0)), - c_common_truthvalue_conversion (build_unary_op (IMAGPART_EXPR, t, 0)), + (*lang_hooks.truthvalue_conversion) (build_unary_op (REALPART_EXPR, t, 0)), + (*lang_hooks.truthvalue_conversion) (build_unary_op (IMAGPART_EXPR, t, 0)), 0)); } |