-
Notifications
You must be signed in to change notification settings - Fork 12.7k
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
Remove dereferencing of Box from codegen #95576
Merged
Merged
Changes from all commits
Commits
Show all changes
9 commits
Select commit
Hold shift + click to select a range
3e9d3d9
add From impls for BitSet and GrowableBitSet
beepster4096 cb41788
remove box derefs from codgen
beepster4096 954fbe3
fix inline_into_box_place test
beepster4096 e0b0fb0
fix typos & docs
beepster4096 6cb38fb
correct mirphase docs
beepster4096 1d1ff36
fix codegen assertion
beepster4096 dff1f9f
make sure miri ices when dereferencing a box
beepster4096 6003c25
condense duplicate code into seperate functions
beepster4096 28ff0df
fix box derefs in var debug info
beepster4096 File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -118,22 +118,20 @@ impl<'a, 'tcx, V: CodegenObject> OperandRef<'tcx, V> { | |
} | ||
|
||
pub fn deref<Cx: LayoutTypeMethods<'tcx>>(self, cx: &Cx) -> PlaceRef<'tcx, V> { | ||
if self.layout.ty.is_box() { | ||
bug!("dereferencing {:?} in codegen", self.layout.ty); | ||
} | ||
|
||
let projected_ty = self | ||
.layout | ||
.ty | ||
.builtin_deref(true) | ||
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. Maybe enum BuiltinDerefMode {
/// `Box<T>`, `&T`, and optionally `*T`.
UserFacing {
/// Whether to also allow `*T`.
allow_unsafe: bool
},
/// `&T` and `*T`.
LowLevel,
} (Though |
||
.unwrap_or_else(|| bug!("deref of non-pointer {:?}", self)) | ||
.ty; | ||
|
||
let (llptr, llextra) = match self.val { | ||
OperandValue::Immediate(llptr) => (llptr, None), | ||
OperandValue::Pair(llptr, llextra) => { | ||
// if the box's allocator isn't a ZST, then "llextra" is actually the allocator | ||
if self.layout.ty.is_box() && !self.layout.field(cx, 1).is_zst() { | ||
(llptr, None) | ||
} else { | ||
(llptr, Some(llextra)) | ||
} | ||
} | ||
OperandValue::Pair(llptr, llextra) => (llptr, Some(llextra)), | ||
OperandValue::Ref(..) => bug!("Deref of by-Ref operand {:?}", self), | ||
}; | ||
let layout = cx.layout_of(projected_ty); | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
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.
Could you add a similar assertion to Miri?
deref_operand
would probably be a good spot.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.
Also, does this mean you can remove the special cases I listed at #95453 (comment) ?
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.
The first 3 special cases have been removed. The debuginfo one probably shouldn't be changed because it could make debugging more annoying for no benefit. I'm currently investigating to see if the last one can be changed safely without breaking things.
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.
Also please remember to add a similar assertion to Miri. :)
Sorry for raising two points in the same thread. Sadly GitHub does not let one open multiple threads at the same line of code.