Test compile failure on `aarch64-linux`: `std::os::raw::c_char` is unsigned
magneticflux- opened this issue · 6 comments
magneticflux- commented
Contrary to popular belief, char
's signedness is undefined; it is commonly signed on x86_64 and unsigned on AArch64 and the Rust raw
types follow their C counterparts: https://doc.rust-lang.org/std/os/raw/type.c_char.html
Encountered running tests on AArch64:
error[E0600]: cannot apply unary operator `-` to type `u8`
--> flux/src/cffi.rs:1152:35
|
1152 | let v: Vec<c_char> = vec![-61, 0];
| ^^^ cannot apply unary operator `-`
|
= note: unsigned values cannot be negated
For more information about this error, try `rustc --explain E0600`.
error: could not compile `flux` (lib test) due to 1 previous error
warning: build failed, waiting for other jobs to finish...
error: builder for '/nix/store/r4bi44lb9wbpyplh31lfg69wv8l6ma9a-libflux-v0.194.5.drv' failed with exit code 101;
The offending unary -
:
Lines 1148 to 1153 in 27fa85d
-61
should probably be changed to 194
.
magneticflux- commented
This seems to work:
diff --git a/libflux/flux/src/cffi.rs b/libflux/flux/src/cffi.rs
index 2e686ec4..9fbae64a 100644
--- a/libflux/flux/src/cffi.rs
+++ b/libflux/flux/src/cffi.rs
@@ -1149,7 +1149,7 @@ from(bucket: v.bucket)
fn parse_with_invalid_utf8() {
let cfname = CString::new("foo.flux").unwrap();
let cfname_ptr: *const c_char = cfname.as_ptr();
- let v: Vec<c_char> = vec![-61, 0];
+ let v: Vec<c_char> = vec![-61i8 as c_char, 0];
let csrc: *const c_char = &v[0];
// Safety: both pointers are valid
let pkg = unsafe { flux_parse(cfname_ptr, csrc) };
github-actions commented
This issue has had no recent activity and will be closed soon.
magneticflux- commented
Still a build failure.
eclairevoyant commented
autoclose bots are silly.
github-actions commented
This issue has had no recent activity and will be closed soon.
magneticflux- commented
*ahem*