diff options
author | Antoni Boucher <bouanto@zoho.com> | 2022-10-03 19:11:39 -0400 |
---|---|---|
committer | Antoni Boucher <bouanto@zoho.com> | 2024-11-20 08:49:09 -0500 |
commit | 04b67ac1e8ae4e918a804197dfff8e69b0ccf955 (patch) | |
tree | e7a2dbc2b339c40b9f3cf68f8a6d310d457a7b44 /gcc | |
parent | 70ec3d20bfbcb6f200ecdd85683aa9e8ea5a845c (diff) | |
download | gcc-04b67ac1e8ae4e918a804197dfff8e69b0ccf955.zip gcc-04b67ac1e8ae4e918a804197dfff8e69b0ccf955.tar.gz gcc-04b67ac1e8ae4e918a804197dfff8e69b0ccf955.tar.bz2 |
libgccjit: Support signed char flag
gcc/jit/ChangeLog:
* dummy-frontend.cc (jit_langhook_init): Send flag_signed_char
argument to build_common_tree_nodes.
gcc/testsuite/ChangeLog:
* jit.dg/all-non-failing-tests.h: Add test-signed-char.c.
* jit.dg/test-signed-char.c: New test.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/jit/dummy-frontend.cc | 2 | ||||
-rw-r--r-- | gcc/testsuite/jit.dg/all-non-failing-tests.h | 10 | ||||
-rw-r--r-- | gcc/testsuite/jit.dg/test-signed-char.c | 52 |
3 files changed, 63 insertions, 1 deletions
diff --git a/gcc/jit/dummy-frontend.cc b/gcc/jit/dummy-frontend.cc index 35475b5..327e8de 100644 --- a/gcc/jit/dummy-frontend.cc +++ b/gcc/jit/dummy-frontend.cc @@ -1077,7 +1077,7 @@ jit_langhook_init (void) *gcc::jit::active_playback_ctxt); global_dc->set_output_format (std::move (sink)); - build_common_tree_nodes (false); + build_common_tree_nodes (flag_signed_char); build_common_builtin_nodes (); diff --git a/gcc/testsuite/jit.dg/all-non-failing-tests.h b/gcc/testsuite/jit.dg/all-non-failing-tests.h index 32ca70d..7b8cf62 100644 --- a/gcc/testsuite/jit.dg/all-non-failing-tests.h +++ b/gcc/testsuite/jit.dg/all-non-failing-tests.h @@ -373,6 +373,13 @@ /* test-setting-alignment.c: This can't be in the testcases array as it is target-specific. */ +/* test-signed-char.c */ +#define create_code create_code_signed_char +#define verify_code verify_code_signed_char +#include "test-signed-char.c" +#undef create_code +#undef verify_code + /* test-sizeof.c */ #define create_code create_code_sizeof #define verify_code verify_code_sizeof @@ -586,6 +593,9 @@ const struct testcase testcases[] = { {"reflection", create_code_reflection , verify_code_reflection }, + {"signed-char", + create_code_signed_char, + verify_code_signed_char}, {"sizeof", create_code_sizeof, verify_code_sizeof}, diff --git a/gcc/testsuite/jit.dg/test-signed-char.c b/gcc/testsuite/jit.dg/test-signed-char.c new file mode 100644 index 0000000..c12b41d --- /dev/null +++ b/gcc/testsuite/jit.dg/test-signed-char.c @@ -0,0 +1,52 @@ +#include <stdlib.h> +#include <stdio.h> +#include <stddef.h> + +#include "libgccjit.h" + +#include "harness.h" + +void +create_code (gcc_jit_context *ctxt, void *user_data) +{ + /* Let's try to inject the equivalent of: + int test_signed_char () + { + char val = -2; + return (int) val; + } + */ + gcc_jit_type *char_type = + gcc_jit_context_get_type (ctxt, GCC_JIT_TYPE_CHAR); + gcc_jit_type *int_type = + gcc_jit_context_get_type (ctxt, GCC_JIT_TYPE_INT); + + gcc_jit_function *test_fn = + gcc_jit_context_new_function (ctxt, NULL, + GCC_JIT_FUNCTION_EXPORTED, + int_type, + "test_signed_char", + 0, NULL, + 0); + + gcc_jit_block *block = gcc_jit_function_new_block(test_fn, "entry"); + + gcc_jit_rvalue *val = gcc_jit_context_new_rvalue_from_int (ctxt, + char_type, -2); + gcc_jit_rvalue *return_value = gcc_jit_context_new_cast ( + ctxt, NULL, val, int_type); + + gcc_jit_block_end_with_return (block, NULL, return_value); +} + +void +verify_code (gcc_jit_context *ctxt, gcc_jit_result *result) +{ + CHECK_NON_NULL (result); + + typedef int (*fn_type) (); + fn_type test_signed_char = + (fn_type)gcc_jit_result_get_code (result, "test_signed_char"); + CHECK_NON_NULL (test_signed_char); + CHECK_VALUE (test_signed_char (), -2); +} |