Commit cd5fcd33 by Andrew Haley Committed by Andrew Haley

re PR java/18931 (Java bytecode ICE in except.c remove_unreachable_regions)

2004-12-17  Andrew Haley  <aph@redhat.com>

        PR java/18931
        * typeck.c (convert): Use a CONVERT_EXPR when converting to
        BOOLEAN_TYPE or CHAR_TYPE.
        (convert_to_boolean, convert_to_char) : Remove.
        * convert.h (convert_to_boolean, convert_to_char) : Remove.
        * expr.c (expand_load_internal): Do type conversion if type is not
        as required.

From-SVN: r92314
parent b9a490a0
2004-12-17 Andrew Haley <aph@redhat.com>
PR java/18931
* typeck.c (convert): Use a CONVERT_EXPR when converting to
BOOLEAN_TYPE or CHAR_TYPE.
(convert_to_boolean, convert_to_char) : Remove.
* convert.h (convert_to_boolean, convert_to_char) : Remove.
* expr.c (expand_load_internal): Do type conversion if type is not
as required.
2004-12-13 Danny Smith <dannysmith@users.sourceforge.net> 2004-12-13 Danny Smith <dannysmith@users.sourceforge.net>
PR target/18459 PR target/18459
...@@ -51,7 +61,7 @@ ...@@ -51,7 +61,7 @@
range we're demoting. range we're demoting.
2004-12-03 Andrew Haley <aph@redhat.com> 2004-12-03 Andrew Haley <aph@redhat.com>
PR java/18697 PR java/18697
* class.c (layout_class_method): Don't fail to override a method * class.c (layout_class_method): Don't fail to override a method
simply because it has DECL_ARTIFICIAL set. simply because it has DECL_ARTIFICIAL set.
......
...@@ -20,8 +20,6 @@ Boston, MA 02111-1307, USA. */ ...@@ -20,8 +20,6 @@ Boston, MA 02111-1307, USA. */
/* Written by Jeffrey Hsu <hsu@cygnus.com> */ /* Written by Jeffrey Hsu <hsu@cygnus.com> */
extern tree convert_to_boolean (tree, tree);
extern tree convert_to_char (tree, tree);
extern tree convert_to_integer (tree type, tree expr); extern tree convert_to_integer (tree type, tree expr);
extern tree convert_to_real (tree type, tree expr); extern tree convert_to_real (tree type, tree expr);
extern tree convert_to_pointer (tree type, tree expr); extern tree convert_to_pointer (tree type, tree expr);
...@@ -1329,6 +1329,9 @@ expand_load_internal (int index, tree type, int pc) ...@@ -1329,6 +1329,9 @@ expand_load_internal (int index, tree type, int pc)
value into it. Then we push this new local on the stack. value into it. Then we push this new local on the stack.
Hopefully this all gets optimized out. */ Hopefully this all gets optimized out. */
copy = build_decl (VAR_DECL, NULL_TREE, type); copy = build_decl (VAR_DECL, NULL_TREE, type);
if (INTEGRAL_TYPE_P (type)
&& TREE_TYPE (copy) != TREE_TYPE (var))
var = convert (type, var);
java_add_local_var (copy); java_add_local_var (copy);
java_add_stmt (build2 (MODIFY_EXPR, TREE_TYPE (var), copy, var)); java_add_stmt (build2 (MODIFY_EXPR, TREE_TYPE (var), copy, var));
......
...@@ -129,8 +129,8 @@ convert (tree type, tree expr) ...@@ -129,8 +129,8 @@ convert (tree type, tree expr)
return error_mark_node; return error_mark_node;
if (code == VOID_TYPE) if (code == VOID_TYPE)
return build1 (CONVERT_EXPR, type, expr); return build1 (CONVERT_EXPR, type, expr);
if (code == BOOLEAN_TYPE) if (code == BOOLEAN_TYPE || code == CHAR_TYPE)
return fold (convert_to_boolean (type, expr)); return fold (build1 (CONVERT_EXPR, type, expr));
if (code == INTEGER_TYPE) if (code == INTEGER_TYPE)
{ {
if ((really_constant_p (expr) if ((really_constant_p (expr)
...@@ -151,8 +151,6 @@ convert (tree type, tree expr) ...@@ -151,8 +151,6 @@ convert (tree type, tree expr)
} }
if (code == REAL_TYPE) if (code == REAL_TYPE)
return fold (convert_to_real (type, expr)); return fold (convert_to_real (type, expr));
if (code == CHAR_TYPE)
return fold (convert_to_char (type, expr));
if (code == POINTER_TYPE) if (code == POINTER_TYPE)
return fold (convert_to_pointer (type, expr)); return fold (convert_to_pointer (type, expr));
error ("conversion to non-scalar type requested"); error ("conversion to non-scalar type requested");
...@@ -160,18 +158,6 @@ convert (tree type, tree expr) ...@@ -160,18 +158,6 @@ convert (tree type, tree expr)
} }
tree
convert_to_char (tree type, tree expr)
{
return build1 (NOP_EXPR, type, expr);
}
tree
convert_to_boolean (tree type, tree expr)
{
return build1 (NOP_EXPR, type, expr);
}
/* Return a data type that has machine mode MODE. /* Return a data type that has machine mode MODE.
If the mode is an integer, If the mode is an integer,
then UNSIGNEDP selects between signed and unsigned types. */ then UNSIGNEDP selects between signed and unsigned types. */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment