aboutsummaryrefslogtreecommitdiff
path: root/gcc/c-objc-common.c
diff options
context:
space:
mode:
authorPaolo Bonzini <bonzini@gnu.org>2004-02-03 11:22:41 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2004-02-03 11:22:41 +0000
commite57e265ba61a2e07623521dc872a2b7e82e70b37 (patch)
tree38cfca602874b8689177b11b1cd223ef979c0667 /gcc/c-objc-common.c
parent0251aa4518e9c18d00509b52149754e23396777b (diff)
downloadgcc-e57e265ba61a2e07623521dc872a2b7e82e70b37.zip
gcc-e57e265ba61a2e07623521dc872a2b7e82e70b37.tar.gz
gcc-e57e265ba61a2e07623521dc872a2b7e82e70b37.tar.bz2
re PR c/11658 (Wrong error message)
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. From-SVN: r77168
Diffstat (limited to 'gcc/c-objc-common.c')
-rw-r--r--gcc/c-objc-common.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/gcc/c-objc-common.c b/gcc/c-objc-common.c
index 5a57aa4..73a3241 100644
--- a/gcc/c-objc-common.c
+++ b/gcc/c-objc-common.c
@@ -332,3 +332,32 @@ c_tree_printer (pretty_printer *pp, text_info *text)
pp_string (pp, n);
return true;
}
+
+tree
+c_objc_common_truthvalue_conversion (tree expr)
+{
+ retry:
+ switch (TREE_CODE (TREE_TYPE (expr)))
+ {
+ case ARRAY_TYPE:
+ expr = default_conversion (expr);
+ if (TREE_CODE (TREE_TYPE (expr)) != ARRAY_TYPE)
+ goto retry;
+
+ error ("used array that cannot be converted to pointer where scalar is required");
+ return error_mark_node;
+
+ case RECORD_TYPE:
+ error ("used struct type value where scalar is required");
+ return error_mark_node;
+
+ case UNION_TYPE:
+ error ("used union type value where scalar is required");
+ return error_mark_node;
+ default:
+ break;
+ }
+
+ return c_common_truthvalue_conversion (expr);
+}
+