rust-lang / rust-lang/rustc_codegen_gcc
ICE gcc_jit_context_new_function name contains invalid character: ''
Open
Nobody has claimed this yet.
bug
libgccjit
- Dominant language
- Rust
- Stars
- 1.2k
- Forks
- 105
- Avg merge
- 8h 20m
- Merged PRs (30d)
- 14
Description
struct root_ns1_A;
struct root_ns2_B;
extern "C" {
#[link_name = "\u{1}_ZN4root3ns21B1fERKNS_3ns11AE"]
fn root_ns2_B_f(this: *mut root_ns2_B, a: *mut root_ns1_A);
}
impl root_ns2_B {
unsafe fn f(&mut self, a: *mut root_ns1_A) {
root_ns2_B_f(self, a)
}
}
-Zcodegen-backend=gcc -Clink-dead-code=true --crate-type=lib
warning: type `root_ns1_A` should have an upper camel case name
--> a.rs:1:8
|
1 | struct root_ns1_A;
| ^^^^^^^^^^ help: convert the identifier to upper camel case: `RootNs1A`
|
= note: `#[warn(non_camel_case_types)]` (part of `#[warn(nonstandard_style)]`) on by default
warning: type `root_ns2_B` should have an upper camel case name
--> a.rs:2:8
|
2 | struct root_ns2_B;
| ^^^^^^^^^^ help: convert the identifier to upper camel case: `RootNs2B`
warning: struct `root_ns1_A` is never constructed
--> a.rs:1:8
|
1 | struct root_ns1_A;
| ^^^^^^^^^^
|
= note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
warning: struct `root_ns2_B` is never constructed
--> a.rs:2:8
|
2 | struct root_ns2_B;
| ^^^^^^^^^^
warning: method `f` is never used
--> a.rs:8:15
|
7 | impl root_ns2_B {
| --------------- method in this implementation
8 | unsafe fn f(&mut self, a: *mut root_ns1_A) {
| ^
warning: function `root_ns2_B_f` is never used
--> a.rs:5:8
|
5 | fn root_ns2_B_f(this: *mut root_ns2_B, a: *mut root_ns1_A);
| ^^^^^^^^^^^^
warning: `extern` block uses type `root_ns2_B`, which is not FFI-safe
--> a.rs:5:27
|
5 | fn root_ns2_B_f(this: *mut root_ns2_B, a: *mut root_ns1_A);
| ^^^^^^^^^^^^^^^ not FFI-safe
|
= help: consider adding a `#[repr(C)]` or `#[repr(transparent)]` attribute to this struct
= note: this struct has unspecified layout
note: the type is defined here
--> a.rs:2:1
|
2 | struct root_ns2_B;
| ^^^^^^^^^^^^^^^^^
= note: `#[warn(improper_ctypes)]` on by default
warning: `extern` block uses type `root_ns1_A`, which is not FFI-safe
--> a.rs:5:47
|
5 | fn root_ns2_B_f(this: *mut root_ns2_B, a: *mut root_ns1_A);
| ^^^^^^^^^^^^^^^ not FFI-safe
|
= help: consider adding a `#[repr(C)]` or `#[repr(transparent)]` attribute to this struct
= note: this struct has unspecified layout
note: the type is defined here
--> a.rs:1:1
|
1 | struct root_ns1_A;
| ^^^^^^^^^^^^^^^^^
libgccjit.so: error: : gcc_jit_context_new_function: name "_ZN4root3ns21B1fERKNS_3ns11AE" contains invalid character: ''
gcc_jit_function_get_address: NULL function
gcc_jit_function_get_param_count: NULL function
gcc_jit_function_get_return_type: NULL function_type
libgccjit.so: error: : gcc_jit_function_new_local: NULL type
libgccjit.so: error: : gcc_jit_context_new_call: NULL function
libgccjit.so: error: : gcc_jit_block_add_assignment: NULL lvalue
gcc_jit_lvalue_as_rvalue: NULL lvalue
error: failed to build archive at `liba.rlib`: failed to open object file: No such file or directory (os error 2)
error: aborting due to 1 previous error; 8 warnings emitted
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Re-run the supplied a.rs reproducer with -Zcodegen-backend=gcc -Clink-dead-code=true --crate-type=lib, then start at gcc_jit_context_new_function and the reported invalid mangled name. Done means the reproducer no longer triggers the ICE or archive-build failure and the crate compiles successfully.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- compilers
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100