influxdata / flux

Flux is a lightweight scripting language for querying databases (like InfluxDB) and working with data. It's part of InfluxDB 1.7 and 2.0, but can be run independently of those.
https://influxdata.com
MIT License
767 stars 153 forks source link

Test compile failure on `aarch64-linux`: `std::os::raw::c_char` is unsigned #5495

Open magneticflux- opened 3 months ago

magneticflux- commented 3 months ago

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 -: https://github.com/influxdata/flux/blob/27fa85da326380acd1e096e846118a24c446f047/libflux/flux/src/cffi.rs#L1148-L1153

-61 should probably be changed to 194.

magneticflux- commented 3 months ago

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[bot] commented 1 month ago

This issue has had no recent activity and will be closed soon.

magneticflux- commented 1 month ago

Still a build failure.

eclairevoyant commented 1 month ago

autoclose bots are silly.