To add support for a new function attribute in libgccjit, you need to do the following steps:
c-family/c-attribs.cc
into jit/dummy-frontend.cc
. For example if you add the target
attribute, the function name will be handle_target_attribute
.c_common_attribute_table
variable in the c-family/c-attribs.cc
file into the jit_attribute_table
variable in jit/dummy-frontend.cc
.gcc_jit_fn_attribute
enum in the jit/libgccjit.h
file.gcc/testsuite/jit.dg/
. Take a look at gcc/testsuite/jit.dg/test-nonnull.c
if you want an example.gcc-build
folder): make check-jit RUNTESTFLAGS="-v -v -v jit.exp=jit.dg/test-nonnull.c"
Once done, you need to update the gccjit.rs crate to add the new enum variant in the corresponding enum (FnAttribute
).
Finally, you need to update this repository by calling the relevant API you added in gccjit.rs.
To test it, build gcc
, run cargo update -p gccjit
and then you can test the generated output for a given Rust crate.