mirror of
				https://github.com/rust-lang/rust.git
				synced 2025-10-31 04:57:19 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			18 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			18 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # Add support for a new function attribute
 | |
| 
 | |
| To add support for a new function attribute in libgccjit, you need to do the following steps:
 | |
| 
 | |
|  1. Copy the corresponding function from `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`.
 | |
|  2. Copy the corresponding entry from the `c_common_attribute_table` variable in the `c-family/c-attribs.cc` file into the `jit_attribute_table` variable in `jit/dummy-frontend.cc`.
 | |
|  3. Add a new variant in the `gcc_jit_fn_attribute` enum in the `jit/libgccjit.h` file.
 | |
|  4. Add a test to ensure the attribute is correctly applied in `gcc/testsuite/jit.dg/`. Take a look at `gcc/testsuite/jit.dg/test-nonnull.c` if you want an example.
 | |
|  5. Run the example like this (in your `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.
 | |
| 
 | |
| [gccjit.rs]: https://github.com/antoyo/gccjit.rs
 | 
