incorrect bool/Option(bool) support
Personne n'a encore pris cette issue.
- Langage dominant
- Rust
- Étoiles
- 3.4k
- Forks
- 126
- Métriques de merge des PR
- Aucune PR mergée en 30 j
Description
Expected Behaviour
no crash when using bool / Option(bool) (note: in particular, the bug was observed when using iterators over bool)
Example & Steps To Reproduce
This code fail to compile:
#![cfg_attr(target_arch = "spirv", no_std)]
use spirv_std::glam::UVec3;
use spirv_std::spirv;
#[spirv(compute(threads(64)))]
pub fn main_cs(
#[spirv(global_invocation_id)] id: UVec3,
#[spirv(storage_buffer, descriptor_set = 0, binding = 0)] buffer: &mut [u32],
) {
let mut t =test();
buffer[1] += t.next().unwrap() as u32;
}
struct T{}
#[inline(never)]
pub fn test()->impl Iterator<Item = bool>{
T{}
}
impl Iterator for T {
type Item=bool;
fn next(&mut self) -> Option<Self::Item> {
return Some(true);
}
}
The relevant part of the error
error: error:0:0 - Expected Result Type to be a pointer or int or float vector or scalar type: Bitcast
%40 = OpBitcast %bool %33
NB: the error also happen the other way arround (cast from bool to char).
It also seem that these cast force to use the Capability::Int8 when no Int8 is used in similar cases
System Info
- Rust: rustc 1.90.0-nightly
- OS: artix linux with kernel 6.17.8-artix1-1
- GPU: NVIDIA Corporation GA102 [GeForce RTX 3080 Ti]
- SPIR-V: SPIRV-Tools v2025.4 v2025.4-0-g7f2d9ee92
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par le reproducer Rust utilisant un itérateur sur bool et l’erreur de validation OpBitcast signalée. Suivez la manière dont bool et Option sont abaissés vers SPIR-V, y compris le cas inverse bool-to-char et la capacité Int8 inattendue. Validez le résultat avec le reproducer présenté et SPIR-V Tools, sans Bitcast invalide ni capacité Int8 inutile.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- rust
- Domaine
- compilers
- Type d'issue
- Bug
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 35/100