-
Notifications
You must be signed in to change notification settings - Fork 12.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
don't allow ZST in ScalarInt #98957
don't allow ZST in ScalarInt #98957
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -13,7 +13,6 @@ use rustc_codegen_ssa::traits::*; | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
use rustc_middle::bug; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
use rustc_middle::mir::interpret::{ConstAllocation, GlobalAlloc, Scalar}; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
use rustc_middle::ty::layout::{LayoutOf, TyAndLayout}; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
use rustc_middle::ty::ScalarInt; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
use rustc_target::abi::{self, AddressSpace, HasDataLayout, Pointer, Size}; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
use libc::{c_char, c_uint}; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -223,13 +222,13 @@ impl<'ll, 'tcx> ConstMethods<'tcx> for CodegenCx<'ll, 'tcx> { | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
fn zst_to_backend(&self, _llty: &'ll Type) -> &'ll Value { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
self.const_undef(self.type_ix(0)) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
fn scalar_to_backend(&self, cv: Scalar, layout: abi::Scalar, llty: &'ll Type) -> &'ll Value { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
let bitsize = if layout.is_bool() { 1 } else { layout.size(self).bits() }; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
match cv { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Scalar::Int(ScalarInt::ZST) => { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
assert_eq!(0, layout.size(self).bytes()); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
RalfJung marked this conversation as resolved.
Show resolved
Hide resolved
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. So I'm looking at this (in the context of Rust-GPU updating the nightly version of Rust we use). How could this ever pass? rust/compiler/rustc_target/src/abi/mod.rs Lines 605 to 611 in 3c72788
rust/compiler/rustc_target/src/abi/mod.rs Lines 703 to 715 in 3c72788
rust/compiler/rustc_target/src/abi/mod.rs Lines 827 to 844 in 3c72788
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This is the const eval Scalar, not abi Scalar. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
If you scroll up through this PR there is a comment of mine somewhere saying that this must have been dead code. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
self.const_undef(self.type_ix(0)) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Scalar::Int(int) => { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
let data = int.assert_bits(layout.size(self)); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
let llval = self.const_uint_big(self.type_ix(bitsize), data); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -84,6 +84,10 @@ impl<'a, 'tcx, V: CodegenObject> OperandRef<'tcx, V> { | |
let llval = bx.scalar_to_backend(x, scalar, bx.immediate_backend_type(layout)); | ||
OperandValue::Immediate(llval) | ||
} | ||
ConstValue::ZeroSized => { | ||
let llval = bx.zst_to_backend(bx.immediate_backend_type(layout)); | ||
OperandValue::Immediate(llval) | ||
} | ||
Comment on lines
+87
to
+90
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. If you expand the diff there's a There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Though I think I see how this happened, And this PR just refactored it into a more obvious spot. |
||
ConstValue::Slice { data, start, end } => { | ||
let Abi::ScalarPair(a_scalar, _) = layout.abi else { | ||
bug!("from_const: invalid ScalarPair layout: {:#?}", layout); | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't think
i0
is a legal LLVM type? At least not according to https://llvm.org/docs/LangRef.html#integer-typeThere was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I copied this from elsewhere... 🤷