rust-lang / rust-lang/rust

AIX std does not build

Open
#143,443 3 comments 1 reaction 0 assignees View on GitHub

Nobody has claimed this yet.

C-bug O-aix T-libs
Dominant language
Rust
Stars
119k
Forks
16.1k
PR merge metrics
PR metrics pending

Description

Since 2025-06-20, std does not build on AIX: https://does-it-build.noratrieb.dev/target?target=powerpc64-ibm-aix

There are a variety of errors around libc: https://does-it-build.noratrieb.dev/build?nightly=2025-07-04&target=powerpc64-ibm-aix&mode=miri-std

Details

error[E0609]: no field `st_atime` on type `&libc::stat`
   --> /var/lib/does-it-build/.rustup/toolchains/nightly-2025-07-04-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/os/aix/fs.rs:325:36
    |
325 |         self.as_inner().as_inner().st_atime.tv_sec as i64
    |                                    ^^^^^^^^ unknown field
    |
help: a field with a similar name exists
    |
325 -         self.as_inner().as_inner().st_atime.tv_sec as i64
325 +         self.as_inner().as_inner().st_atim.tv_sec as i64
    |

error[E0609]: no field `st_atime` on type `&libc::stat`
   --> /var/lib/does-it-build/.rustup/toolchains/nightly-2025-07-04-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/os/aix/fs.rs:328:36
    |
328 |         self.as_inner().as_inner().st_atime.tv_nsec as i64
    |                                    ^^^^^^^^ unknown field
    |
help: a field with a similar name exists
    |
328 -         self.as_inner().as_inner().st_atime.tv_nsec as i64
328 +         self.as_inner().as_inner().st_atim.tv_nsec as i64
    |

error[E0609]: no field `st_mtime` on type `&libc::stat`
   --> /var/lib/does-it-build/.rustup/toolchains/nightly-2025-07-04-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/os/aix/fs.rs:331:36
    |
331 |         self.as_inner().as_inner().st_mtime.tv_sec as i64
    |                                    ^^^^^^^^ unknown field
    |
help: a field with a similar name exists
    |
331 -         self.as_inner().as_inner().st_mtime.tv_sec as i64
331 +         self.as_inner().as_inner().st_mtim.tv_sec as i64
    |

error[E0609]: no field `st_mtime` on type `&libc::stat`
   --> /var/lib/does-it-build/.rustup/toolchains/nightly-2025-07-04-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/os/aix/fs.rs:334:36
    |
334 |         self.as_inner().as_inner().st_mtime.tv_nsec as i64
    |                                    ^^^^^^^^ unknown field
    |
help: a field with a similar name exists
    |
334 -         self.as_inner().as_inner().st_mtime.tv_nsec as i64
334 +         self.as_inner().as_inner().st_mtim.tv_nsec as i64
    |

error[E0609]: no field `st_ctime` on type `&libc::stat`
   --> /var/lib/does-it-build/.rustup/toolchains/nightly-2025-07-04-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/os/aix/fs.rs:337:36
    |
337 |         self.as_inner().as_inner().st_ctime.tv_sec as i64
    |                                    ^^^^^^^^ unknown field
    |
help: a field with a similar name exists
    |
337 -         self.as_inner().as_inner().st_ctime.tv_sec as i64
337 +         self.as_inner().as_inner().st_ctim.tv_sec as i64
    |

error[E0609]: no field `st_ctime` on type `&libc::stat`
   --> /var/lib/does-it-build/.rustup/toolchains/nightly-2025-07-04-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/os/aix/fs.rs:340:36
    |
340 |         self.as_inner().as_inner().st_ctime.tv_nsec as i64
    |                                    ^^^^^^^^ unknown field
    |
help: a field with a similar name exists
    |
340 -         self.as_inner().as_inner().st_ctime.tv_nsec as i64
340 +         self.as_inner().as_inner().st_ctim.tv_nsec as i64
    |

error[E0308]: mismatched types
    --> /var/lib/does-it-build/.rustup/toolchains/nightly-2025-07-04-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/sys/fd/unix.rs:547:47
     |
547  |             cvt(libc::ioctl(self.as_raw_fd(), libc::FIOCLEX))?;
     |                 -----------                   ^^^^^^^^^^^^^ expected `i32`, found `i64`
     |                 |
     |                 arguments to this function are incorrect
     |
note: function defined here
    --> /var/lib/does-it-build/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.174/src/unix/aix/mod.rs:2994:12
     |
2994 |     pub fn ioctl(fildes: c_int, request: c_int, ...) -> c_int;
     |            ^^^^^
help: you can convert an `i64` to an `i32` and panic if the converted value doesn't fit
     |
547  |             cvt(libc::ioctl(self.as_raw_fd(), libc::FIOCLEX.try_into().unwrap()))?;
     |                                                            ++++++++++++++++++++

error[E0609]: no field `st_mtime` on type `libc::stat`
   --> /var/lib/does-it-build/.rustup/toolchains/nightly-2025-07-04-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/sys/fs/unix.rs:464:35
    |
464 |         SystemTime::new(self.stat.st_mtime.tv_sec as i64, self.stat.st_mtime.tv_nsec as i64)
    |                                   ^^^^^^^^ unknown field
    |
help: a field with a similar name exists
    |
464 -         SystemTime::new(self.stat.st_mtime.tv_sec as i64, self.stat.st_mtime.tv_nsec as i64)
464 +         SystemTime::new(self.stat.st_mtim.tv_sec as i64, self.stat.st_mtime.tv_nsec as i64)
    |

error[E0609]: no field `st_mtime` on type `libc::stat`
   --> /var/lib/does-it-build/.rustup/toolchains/nightly-2025-07-04-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/sys/fs/unix.rs:464:69
    |
464 |         SystemTime::new(self.stat.st_mtime.tv_sec as i64, self.stat.st_mtime.tv_nsec as i64)
    |                                                                     ^^^^^^^^ unknown field
    |
help: a field with a similar name exists
    |
464 -         SystemTime::new(self.stat.st_mtime.tv_sec as i64, self.stat.st_mtime.tv_nsec as i64)
464 +         SystemTime::new(self.stat.st_mtime.tv_sec as i64, self.stat.st_mtim.tv_nsec as i64)
    |

error[E0609]: no field `st_atime` on type `libc::stat`
   --> /var/lib/does-it-build/.rustup/toolchains/nightly-2025-07-04-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/sys/fs/unix.rs:468:35
    |
468 |         SystemTime::new(self.stat.st_atime.tv_sec as i64, self.stat.st_atime.tv_nsec as i64)
    |                                   ^^^^^^^^ unknown field
    |
help: a field with a similar name exists
    |
468 -         SystemTime::new(self.stat.st_atime.tv_sec as i64, self.stat.st_atime.tv_nsec as i64)
468 +         SystemTime::new(self.stat.st_atim.tv_sec as i64, self.stat.st_atime.tv_nsec as i64)
    |

error[E0609]: no field `st_atime` on type `libc::stat`
   --> /var/lib/does-it-build/.rustup/toolchains/nightly-2025-07-04-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/sys/fs/unix.rs:468:69
    |
468 |         SystemTime::new(self.stat.st_atime.tv_sec as i64, self.stat.st_atime.tv_nsec as i64)
    |                                                                     ^^^^^^^^ unknown field
    |
help: a field with a similar name exists
    |
468 -         SystemTime::new(self.stat.st_atime.tv_sec as i64, self.stat.st_atime.tv_nsec as i64)
468 +         SystemTime::new(self.stat.st_atime.tv_sec as i64, self.stat.st_atim.tv_nsec as i64)
    |

error[E0609]: no field `st_ctime` on type `libc::stat`
   --> /var/lib/does-it-build/.rustup/toolchains/nightly-2025-07-04-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/sys/fs/unix.rs:472:35
    |
472 |         SystemTime::new(self.stat.st_ctime.tv_sec as i64, self.stat.st_ctime.tv_nsec as i64)
    |                                   ^^^^^^^^ unknown field
    |
help: a field with a similar name exists
    |
472 -         SystemTime::new(self.stat.st_ctime.tv_sec as i64, self.stat.st_ctime.tv_nsec as i64)
472 +         SystemTime::new(self.stat.st_ctim.tv_sec as i64, self.stat.st_ctime.tv_nsec as i64)
    |

error[E0609]: no field `st_ctime` on type `libc::stat`
   --> /var/lib/does-it-build/.rustup/toolchains/nightly-2025-07-04-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/sys/fs/unix.rs:472:69
    |
472 |         SystemTime::new(self.stat.st_ctime.tv_sec as i64, self.stat.st_ctime.tv_nsec as i64)
    |                                                                     ^^^^^^^^ unknown field
    |
help: a field with a similar name exists
    |
472 -         SystemTime::new(self.stat.st_ctime.tv_sec as i64, self.stat.st_ctime.tv_nsec as i64)
472 +         SystemTime::new(self.stat.st_ctime.tv_sec as i64, self.stat.st_ctim.tv_nsec as i64)
    |

error[E0308]: mismatched types
    --> /var/lib/does-it-build/.rustup/toolchains/nightly-2025-07-04-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/sys/net/connection/socket/unix.rs:582:52
     |
582  |         cvt(unsafe { libc::ioctl(self.as_raw_fd(), libc::FIONBIO, &mut nonblocking) }).map(drop)
     |                      -----------                   ^^^^^^^^^^^^^ expected `i32`, found `i64`
     |                      |
     |                      arguments to this function are incorrect
     |
note: function defined here
    --> /var/lib/does-it-build/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.174/src/unix/aix/mod.rs:2994:12
     |
2994 |     pub fn ioctl(fildes: c_int, request: c_int, ...) -> c_int;
     |            ^^^^^
help: you can convert an `i64` to an `i32` and panic if the converted value doesn't fit
     |
582  |         cvt(unsafe { libc::ioctl(self.as_raw_fd(), libc::FIONBIO.try_into().unwrap(), &mut nonblocking) }).map(drop)
     |                                                                 ++++++++++++++++++++

error[E0308]: mismatched types
    --> /var/lib/does-it-build/.rustup/toolchains/nightly-2025-07-04-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/sys/process/unix/unix.rs:298:67
     |
298  |                 cvt(libc::setgroups(_g.len().try_into().unwrap(), _g.as_ptr()))?;
     |                     ---------------                               ^^^^^^^^^^^ types differ in mutability
     |                     |
     |                     arguments to this function are incorrect
     |
     = note: expected raw pointer `*mut u32`
                found raw pointer `*const u32`
note: function defined here
    --> /var/lib/does-it-build/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.174/src/unix/aix/mod.rs:3255:12
     |
3255 |     pub fn setgroups(ngroups: c_int, ptr: *mut crate::gid_t) -> c_int;
     |            ^^^^^^^^^

error[E0308]: mismatched types
    --> /var/lib/does-it-build/.rustup/toolchains/nightly-2025-07-04-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/sys/process/unix/unix.rs:313:54
     |
313  |                     let res = cvt(libc::setgroups(0, crate::ptr::null()));
     |                                   ---------------    ^^^^^^^^^^^^^^^^^^ types differ in mutability
     |                                   |
     |                                   arguments to this function are incorrect
     |
     = note: expected raw pointer `*mut u32`
                found raw pointer `*const _`
note: function defined here
    --> /var/lib/does-it-build/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.174/src/unix/aix/mod.rs:3255:12
     |
3255 |     pub fn setgroups(ngroups: c_int, ptr: *mut crate::gid_t) -> c_int;
     |            ^^^^^^^^^
help: consider using `core::ptr::null_mut` instead
     |
313  -                     let res = cvt(libc::setgroups(0, crate::ptr::null()));
313  +                     let res = cvt(libc::setgroups(0, core::ptr::null_mut()));
     |

Some errors have detailed explanations: E0308, E0609.
For more information about an error, try `rustc --explain E0308`.
error: could not compile `std` (lib) due to 16 previous errors
fatal error: failed to build sysroot: sysroot build failed

@daltenty @gilamn5tr

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with library/std/src/os/aix/fs.rs, library/std/src/sys/fd/unix.rs, library/std/src/sys/fs/unix.rs, library/std/src/sys/net/connection/socket/unix.rs, and library/std/src/sys/process/unix/unix.rs, using the reported AIX errors as the entry point. Rebuild std for powerpc64-ibm-aix and verify that the libc field, ioctl, and setgroups errors no longer prevent the sysroot from building.

Written by the indexing model from the issue text.

Assessment

Tech stack
rust
Domain
operating-systems
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
48/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.