From c7e3074efcc0f72783fdd77d5270744ed0eb8576 Mon Sep 17 00:00:00 2001 From: Charry Wu Date: Wed, 25 Mar 2026 17:34:58 -0700 Subject: [PATCH 1/2] fix(cust): use bindgen anonymous union for CUmemLocation_st.id on CUDA 13.2 Made-with: Cursor --- crates/cust/src/memory/unified.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/crates/cust/src/memory/unified.rs b/crates/cust/src/memory/unified.rs index c45f5ce3..0f0daa3f 100644 --- a/crates/cust/src/memory/unified.rs +++ b/crates/cust/src/memory/unified.rs @@ -647,7 +647,7 @@ pub trait MemoryAdvise: private::Sealed { #[cfg(cuMemPrefetchAsync_v2)] driver_sys::CUmemLocation { type_: driver_sys::CUmemLocationType::CU_MEM_LOCATION_TYPE_DEVICE, - id, + __bindgen_anon_1: driver_sys::CUmemLocation_st__bindgen_ty_1 { id }, }, #[cfg(not(cuMemPrefetchAsync_v2))] id, @@ -693,7 +693,7 @@ pub trait MemoryAdvise: private::Sealed { #[cfg(cuMemPrefetchAsync_v2)] driver_sys::CUmemLocation { type_: driver_sys::CUmemLocationType::CU_MEM_LOCATION_TYPE_DEVICE, - id, + __bindgen_anon_1: driver_sys::CUmemLocation_st__bindgen_ty_1 { id }, }, #[cfg(not(cuMemPrefetchAsync_v2))] id, @@ -735,7 +735,7 @@ pub trait MemoryAdvise: private::Sealed { #[cfg(cuMemAdvise_v2)] driver_sys::CUmemLocation { type_: driver_sys::CUmemLocationType::CU_MEM_LOCATION_TYPE_DEVICE, - id, + __bindgen_anon_1: driver_sys::CUmemLocation_st__bindgen_ty_1 { id }, }, #[cfg(not(cuMemAdvise_v2))] id, @@ -777,7 +777,7 @@ pub trait MemoryAdvise: private::Sealed { #[cfg(cuMemAdvise_v2)] driver_sys::CUmemLocation { type_: driver_sys::CUmemLocationType::CU_MEM_LOCATION_TYPE_DEVICE, - id, + __bindgen_anon_1: driver_sys::CUmemLocation_st__bindgen_ty_1 { id }, }, #[cfg(not(cuMemAdvise_v2))] id, @@ -801,7 +801,7 @@ pub trait MemoryAdvise: private::Sealed { #[cfg(cuMemAdvise_v2)] driver_sys::CUmemLocation { type_: driver_sys::CUmemLocationType::CU_MEM_LOCATION_TYPE_DEVICE, - id, + __bindgen_anon_1: driver_sys::CUmemLocation_st__bindgen_ty_1 { id }, }, #[cfg(not(cuMemAdvise_v2))] id, From ed6fad865ea19a07a1097292c3a33f15f30266f0 Mon Sep 17 00:00:00 2001 From: Charry Wu Date: Wed, 25 Mar 2026 17:43:27 -0700 Subject: [PATCH 2/2] fix(cust): add cuMemLocation_anon_id cfg guard for CUDA 13.0 compat Made-with: Cursor --- crates/cust/build.rs | 8 ++++++++ crates/cust/src/memory/unified.rs | 15 +++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/crates/cust/build.rs b/crates/cust/build.rs index 1b1f8674..d002cdc6 100644 --- a/crates/cust/build.rs +++ b/crates/cust/build.rs @@ -40,4 +40,12 @@ fn main() { println!("cargo::rustc-cfg=cuGraphGetEdges_v2"); println!("cargo::rustc-cfg=cuCtxCreate_v4"); } + + // In CUDA 13.2 the `id` field in `CUmemLocation_st` was placed inside an anonymous union. + // Bindgen renders this as `__bindgen_anon_1: CUmemLocation_st__bindgen_ty_1` instead of a + // direct `id` field. This cfg gates the struct initialization syntax accordingly. + println!("cargo::rustc-check-cfg=cfg(cuMemLocation_anon_id)"); + if driver_version >= 13020 { + println!("cargo::rustc-cfg=cuMemLocation_anon_id"); + } } diff --git a/crates/cust/src/memory/unified.rs b/crates/cust/src/memory/unified.rs index 0f0daa3f..86829a38 100644 --- a/crates/cust/src/memory/unified.rs +++ b/crates/cust/src/memory/unified.rs @@ -647,7 +647,10 @@ pub trait MemoryAdvise: private::Sealed { #[cfg(cuMemPrefetchAsync_v2)] driver_sys::CUmemLocation { type_: driver_sys::CUmemLocationType::CU_MEM_LOCATION_TYPE_DEVICE, + #[cfg(cuMemLocation_anon_id)] __bindgen_anon_1: driver_sys::CUmemLocation_st__bindgen_ty_1 { id }, + #[cfg(not(cuMemLocation_anon_id))] + id, }, #[cfg(not(cuMemPrefetchAsync_v2))] id, @@ -693,7 +696,10 @@ pub trait MemoryAdvise: private::Sealed { #[cfg(cuMemPrefetchAsync_v2)] driver_sys::CUmemLocation { type_: driver_sys::CUmemLocationType::CU_MEM_LOCATION_TYPE_DEVICE, + #[cfg(cuMemLocation_anon_id)] __bindgen_anon_1: driver_sys::CUmemLocation_st__bindgen_ty_1 { id }, + #[cfg(not(cuMemLocation_anon_id))] + id, }, #[cfg(not(cuMemPrefetchAsync_v2))] id, @@ -735,7 +741,10 @@ pub trait MemoryAdvise: private::Sealed { #[cfg(cuMemAdvise_v2)] driver_sys::CUmemLocation { type_: driver_sys::CUmemLocationType::CU_MEM_LOCATION_TYPE_DEVICE, + #[cfg(cuMemLocation_anon_id)] __bindgen_anon_1: driver_sys::CUmemLocation_st__bindgen_ty_1 { id }, + #[cfg(not(cuMemLocation_anon_id))] + id, }, #[cfg(not(cuMemAdvise_v2))] id, @@ -777,7 +786,10 @@ pub trait MemoryAdvise: private::Sealed { #[cfg(cuMemAdvise_v2)] driver_sys::CUmemLocation { type_: driver_sys::CUmemLocationType::CU_MEM_LOCATION_TYPE_DEVICE, + #[cfg(cuMemLocation_anon_id)] __bindgen_anon_1: driver_sys::CUmemLocation_st__bindgen_ty_1 { id }, + #[cfg(not(cuMemLocation_anon_id))] + id, }, #[cfg(not(cuMemAdvise_v2))] id, @@ -801,7 +813,10 @@ pub trait MemoryAdvise: private::Sealed { #[cfg(cuMemAdvise_v2)] driver_sys::CUmemLocation { type_: driver_sys::CUmemLocationType::CU_MEM_LOCATION_TYPE_DEVICE, + #[cfg(cuMemLocation_anon_id)] __bindgen_anon_1: driver_sys::CUmemLocation_st__bindgen_ty_1 { id }, + #[cfg(not(cuMemLocation_anon_id))] + id, }, #[cfg(not(cuMemAdvise_v2))] id,