Rust-GPU / Rust-GPU/rust-gpu

`PartialOrd` doesn't work with new type

Open
#409 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

bug
Dominant language
Rust
Stars
3.4k
Forks
125
PR merge metrics
No merged PRs in 30d

Description

I have the following trivial new type:

#[derive(Debug, Clone, Copy, Ord, PartialOrd, Eq, PartialEq, From, Into)]
pub struct CustomPosition(u32);

When trying to compare two values of this type, I'm getting an error:

  error: `i8` type used without `OpCapability Int8`
       |
  note: used from within `<u32 as core::cmp::PartialOrd>::partial_cmp`
      --> /home/nazar-pc/.rustup/toolchains/nightly-2025-06-23-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/cmp.rs:1989:5
       |
  1989 |     ord_impl! { char usize u8 u16 u32 u64 u128 isize i8 i16 i32 i64 i128 }
       |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  note: called by `<ab_proof_of_space_gpu::shader::sort_buckets::CustomPosition as core::cmp::PartialOrd>::partial_cmp`
      --> crates/farmer/ab-proof-of-space-gpu/src/shader/sort_buckets.rs:17:35
       |
  17   | #[derive(Debug, Clone, Copy, Ord, PartialOrd, Eq, PartialEq, From, Into)]
       |                                   ^^^^^^^^^^
  note: called by `<ab_proof_of_space_gpu::shader::sort_buckets::CustomPosition as core::cmp::PartialOrd>::le`
      --> /home/nazar-pc/.rustup/toolchains/nightly-2025-06-23-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/cmp.rs:1403:14
       |
  1403 |         self.partial_cmp(other).is_some_and(Ordering::is_le)
       |              ^^^^^^^^^^^^^^^^^^
  note: called by `ab_proof_of_space_gpu::shader::sort_buckets::perform_compare_swap`
      --> crates/farmer/ab-proof-of-space-gpu/src/shader/sort_buckets.rs:80:32
       |
  80   |     let (smaller, larger) = if a <= b { (a, b) } else { (b, a) };
       |                                ^^^^^^

At the same time, comparison of u32 directly works fine and doesn't require Int8 capability.

While this is likely related to discussion in https://github.com/Rust-GPU/rust-gpu/issues/307, I think it is distinct enough to be reported separately.

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 the reproduction in crates/farmer/ab-proof-of-space-gpu/src/shader/sort_buckets.rs, especially the CustomPosition derive at line 17 and comparison at line 80. Compare the generated PartialOrd path for CustomPosition with direct u32 comparison, then inspect the handling of the unwanted Int8 capability; done means new-type comparisons compile without requiring Int8.

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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.