mirror of git://gcc.gnu.org/git/gcc.git
Fix casting non-"int" to bool.
gcc/jit/ChangeLog: * jit-playback.c (gcc::jit::playback::context::build_cast): In case BOOLEAN_TYPE, don't assume that the source expression is of type "int". gcc/testsuite/ChangeLog: * jit.dg/test-expressions.c (make_tests_of_casts): Add tests of casting between "long" and "bool". (verify_casts): Verify these new test cases. From-SVN: r218977
This commit is contained in:
parent
6db4bc6e25
commit
e8af59bc73
|
|
@ -1,3 +1,9 @@
|
||||||
|
2014-12-19 David Malcolm <dmalcolm@redhat.com>
|
||||||
|
|
||||||
|
* jit-playback.c (gcc::jit::playback::context::build_cast): In
|
||||||
|
case BOOLEAN_TYPE, don't assume that the source expression is
|
||||||
|
of type "int".
|
||||||
|
|
||||||
2014-12-19 David Malcolm <dmalcolm@redhat.com>
|
2014-12-19 David Malcolm <dmalcolm@redhat.com>
|
||||||
|
|
||||||
* jit-recording.c (gcc::jit::recording::context::context): When
|
* jit-recording.c (gcc::jit::recording::context::context): When
|
||||||
|
|
|
||||||
|
|
@ -875,7 +875,8 @@ playback::context::build_cast (playback::location *loc,
|
||||||
c_common_truthvalue_conversion. */
|
c_common_truthvalue_conversion. */
|
||||||
/* For now, convert to: (t_expr != 0) */
|
/* For now, convert to: (t_expr != 0) */
|
||||||
t_ret = build2 (NE_EXPR, t_dst_type,
|
t_ret = build2 (NE_EXPR, t_dst_type,
|
||||||
t_expr, integer_zero_node);
|
t_expr,
|
||||||
|
build_int_cst (TREE_TYPE (t_expr), 0));
|
||||||
goto maybe_fold;
|
goto maybe_fold;
|
||||||
|
|
||||||
case REAL_TYPE:
|
case REAL_TYPE:
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,9 @@
|
||||||
|
2014-12-19 David Malcolm <dmalcolm@redhat.com>
|
||||||
|
|
||||||
|
* jit.dg/test-expressions.c (make_tests_of_casts): Add tests of
|
||||||
|
casting between "long" and "bool".
|
||||||
|
(verify_casts): Verify these new test cases.
|
||||||
|
|
||||||
2014-12-19 Matthew Fortune <matthew.fortune@imgtec.com>
|
2014-12-19 Matthew Fortune <matthew.fortune@imgtec.com>
|
||||||
|
|
||||||
* gcc.target/mips/pr37362.c: Skip for mips-img-elf.
|
* gcc.target/mips/pr37362.c: Skip for mips-img-elf.
|
||||||
|
|
|
||||||
|
|
@ -543,6 +543,8 @@ make_tests_of_casts (gcc_jit_context *ctxt)
|
||||||
{
|
{
|
||||||
gcc_jit_type *int_type =
|
gcc_jit_type *int_type =
|
||||||
gcc_jit_context_get_type (ctxt, GCC_JIT_TYPE_INT);
|
gcc_jit_context_get_type (ctxt, GCC_JIT_TYPE_INT);
|
||||||
|
gcc_jit_type *long_type =
|
||||||
|
gcc_jit_context_get_type (ctxt, GCC_JIT_TYPE_LONG);
|
||||||
gcc_jit_type *float_type =
|
gcc_jit_type *float_type =
|
||||||
gcc_jit_context_get_type (ctxt, GCC_JIT_TYPE_FLOAT);
|
gcc_jit_context_get_type (ctxt, GCC_JIT_TYPE_FLOAT);
|
||||||
gcc_jit_type *bool_type =
|
gcc_jit_type *bool_type =
|
||||||
|
|
@ -582,6 +584,20 @@ make_tests_of_casts (gcc_jit_context *ctxt)
|
||||||
"test_cast_from_int_to_bool"),
|
"test_cast_from_int_to_bool"),
|
||||||
"(bool)a");
|
"(bool)a");
|
||||||
|
|
||||||
|
/* bool/long conversions */
|
||||||
|
CHECK_STRING_VALUE (
|
||||||
|
make_test_of_cast (ctxt,
|
||||||
|
bool_type,
|
||||||
|
long_type,
|
||||||
|
"test_cast_from_bool_to_long"),
|
||||||
|
"(long)a");
|
||||||
|
CHECK_STRING_VALUE (
|
||||||
|
make_test_of_cast (ctxt,
|
||||||
|
long_type,
|
||||||
|
bool_type,
|
||||||
|
"test_cast_from_long_to_bool"),
|
||||||
|
"(bool)a");
|
||||||
|
|
||||||
/* array/ptr conversions */
|
/* array/ptr conversions */
|
||||||
{
|
{
|
||||||
gcc_jit_function *test_fn =
|
gcc_jit_function *test_fn =
|
||||||
|
|
@ -701,6 +717,28 @@ verify_casts (gcc_jit_result *result)
|
||||||
CHECK_VALUE (test_cast_from_int_to_bool (1), 1);
|
CHECK_VALUE (test_cast_from_int_to_bool (1), 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* bool to long */
|
||||||
|
{
|
||||||
|
typedef long (*fn_type) (bool);
|
||||||
|
fn_type test_cast_from_bool_to_long =
|
||||||
|
(fn_type)gcc_jit_result_get_code (result,
|
||||||
|
"test_cast_from_bool_to_long");
|
||||||
|
CHECK_NON_NULL (test_cast_from_bool_to_long);
|
||||||
|
CHECK_VALUE (test_cast_from_bool_to_long (0), 0);
|
||||||
|
CHECK_VALUE (test_cast_from_bool_to_long (1), 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* long to bool */
|
||||||
|
{
|
||||||
|
typedef bool (*fn_type) (long);
|
||||||
|
fn_type test_cast_from_long_to_bool =
|
||||||
|
(fn_type)gcc_jit_result_get_code (result,
|
||||||
|
"test_cast_from_long_to_bool");
|
||||||
|
CHECK_NON_NULL (test_cast_from_long_to_bool);
|
||||||
|
CHECK_VALUE (test_cast_from_long_to_bool (0), 0);
|
||||||
|
CHECK_VALUE (test_cast_from_long_to_bool (1), 1);
|
||||||
|
}
|
||||||
|
|
||||||
/* array to ptr */
|
/* array to ptr */
|
||||||
{
|
{
|
||||||
typedef int (*fn_type) (void);
|
typedef int (*fn_type) (void);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue