-
Notifications
You must be signed in to change notification settings - Fork 13.3k
Handle const-checks for &mut
outside of HasMutInterior
#66654
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
Merged
Merged
Changes from all commits
Commits
Show all changes
12 commits
Select commit
Hold shift + click to select a range
b0b7dc3
Add `#![feature(matches_macro)]`
ecstatic-morse 6596165
Use type-based qualification for statics
ecstatic-morse 66e9f88
Handle `Rvalue::Ref` in one place
ecstatic-morse 5a3ddcd
Update test with improved diagnostics
ecstatic-morse 5a10430
Remove `Rvalue::Ref` handling from `HasMutInterior`
ecstatic-morse 5117407
Remove `derived_from_illegal_borrow`
ecstatic-morse dd32d91
Remove `CheckOpResult`
ecstatic-morse d2bdaa8
Also test shared borrows of `Cell` for good errors
ecstatic-morse 5b1e10b
Remove test for unused error code
ecstatic-morse a70ac50
Don't treat a reference to a `static` as a reborrow
ecstatic-morse 846be82
Update test for mutably borrowed statics in a const
ecstatic-morse ccb4eed
Incorporate fixes from review
ecstatic-morse 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 hidden or 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 hidden or 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 hidden or 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 hidden or 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 |
---|---|---|
@@ -1,11 +1,24 @@ | ||
const _X: i32 = { | ||
// Ensure that we point the user to the erroneous borrow but not to any subsequent borrows of that | ||
// initial one. | ||
|
||
const _: i32 = { | ||
let mut a = 5; | ||
let p = &mut a; //~ ERROR references in constants may only refer to immutable values | ||
let p = &mut a; //~ ERROR references in constants may only refer to immutable values | ||
|
||
let reborrow = {p}; //~ ERROR references in constants may only refer to immutable values | ||
let reborrow = {p}; | ||
let pp = &reborrow; | ||
let ppp = &pp; | ||
***ppp | ||
}; | ||
|
||
const _: std::cell::Cell<i32> = { | ||
let mut a = std::cell::Cell::new(5); | ||
let p = &a; //~ ERROR cannot borrow a constant which may contain interior mutability | ||
|
||
let reborrow = {p}; | ||
let pp = &reborrow; | ||
let ppp = &pp; | ||
a | ||
}; | ||
|
||
fn main() {} |
This file contains hidden or 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 |
---|---|---|
@@ -1,15 +1,16 @@ | ||
error[E0017]: references in constants may only refer to immutable values | ||
--> $DIR/const-multi-ref.rs:3:13 | ||
--> $DIR/const-multi-ref.rs:6:13 | ||
| | ||
LL | let p = &mut a; | ||
| ^^^^^^ constants require immutable values | ||
|
||
error[E0017]: references in constants may only refer to immutable values | ||
--> $DIR/const-multi-ref.rs:5:21 | ||
error[E0492]: cannot borrow a constant which may contain interior mutability, create a static instead | ||
--> $DIR/const-multi-ref.rs:16:13 | ||
| | ||
LL | let reborrow = {p}; | ||
| ^ constants require immutable values | ||
LL | let p = &a; | ||
| ^^ | ||
|
||
error: aborting due to 2 previous errors | ||
|
||
For more information about this error, try `rustc --explain E0017`. | ||
Some errors have detailed explanations: E0017, E0492. | ||
For more information about an error, try `rustc --explain E0017`. |
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.
@matthewjasper isn't this supposed to use a helper method?
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.
Yes, there's
body.local_decls[local].is_ref_to_static
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.
@matthewjasper Resolved in ccb4eed.