jit: check for void types [PR 95296]
authorDavid Malcolm <dmalcolm@redhat.com>
Sun, 24 May 2020 22:36:36 +0000 (18:36 -0400)
committerDavid Malcolm <dmalcolm@redhat.com>
Tue, 26 May 2020 14:47:46 +0000 (10:47 -0400)
commit6f7585deedc140667fd496b48c9fc4f7d625605c
treec95d7f29482b6cb3ca5575d40475f4262ffa8fea
parent6232d02b4fce4c67d39815aa8fb956e4b10a4e1b
jit: check for void types [PR 95296]

PR jit/95296 reports an ICE when using libgccjit to create a local of void
type.

This patch adds checking to various API entrypoints in libgccjit.c so that
they fail gracefully with an error if the client code attempts to create
various kinds of rvalues or types involving void types.
The patch documents these and various pre-existing restrictions on types
in the API.

gcc/jit/ChangeLog:
PR jit/95296
* docs/topics/expressions.rst (Unary Operations): Document that
result_type of gcc_jit_context_new_unary_op must be a numeric type.
(Binary Operations): Likewise for gcc_jit_context_new_binary_op.
(Global variables): Document that "type" of
gcc_jit_context_new_global must be non-`void`.
* docs/topics/function-pointers.rst
(gcc_jit_context_new_function_ptr_type): Document that the
param_types must be non-void, but that return_type may be.
* docs/topics/functions.rst (Params): Document that
gcc_jit_context_new_param's type must be non-void.
(Functions): Likewise for gcc_jit_function_new_local.
* docs/topics/types.rst (gcc_jit_context_new_array_type): Document
that the type must be non-void.
(gcc_jit_context_new_field): Likewise.
* docs/_build/texinfo/Makefile: Regenerate.
* docs/_build/texinfo/libgccjit.texi: Regenerate.
* libgccjit.c (gcc_jit_context_new_array_type): Fail if
element_type is void.
(gcc_jit_context_new_field): Likewise for "type".
(gcc_jit_context_new_function_ptr_type): Likewise for each
element of param_types.
(gcc_jit_context_new_param): Likewise for "type".
(gcc_jit_context_new_global): Likewise.
(gcc_jit_function_new_local): Likewise.
(gcc_jit_type_get_aligned): Likewise.

gcc/testsuite/ChangeLog:
PR jit/95296
* jit.dg/test-error-gcc_jit_context_new_global-void-type.c: New
test.
* jit.dg/test-error-gcc_jit_function_new_local-void-type.c: New
test.
* jit.dg/test-fuzzer.c (fuzzer_init): Allow for make_random_type
to return NULL.
(get_random_type): Allow for elements in f->types to be NULL.
gcc/jit/docs/_build/texinfo/Makefile
gcc/jit/docs/_build/texinfo/libgccjit.texi
gcc/jit/docs/topics/expressions.rst
gcc/jit/docs/topics/function-pointers.rst
gcc/jit/docs/topics/functions.rst
gcc/jit/docs/topics/types.rst
gcc/jit/libgccjit.c
gcc/testsuite/jit.dg/test-error-gcc_jit_context_new_global-void-type.c [new file with mode: 0644]
gcc/testsuite/jit.dg/test-error-gcc_jit_function_new_local-void-type.c [new file with mode: 0644]
gcc/testsuite/jit.dg/test-fuzzer.c