mirror of
https://github.com/rust-lang/rust
synced 2024-10-06 16:51:35 +00:00
Auto merge of #91253 - matthiaskrgr:rollup-dnlcjmr, r=matthiaskrgr
Rollup of 4 pull requests Successful merges: - #91169 (Change cg_ssa's get_param to borrow the builder mutably) - #91176 (If the thread does not get the lock in the short term, yield the CPU) - #91212 (Fix ICE due to out-of-bounds statement index when reporting borrowck error) - #91225 (Fix invalid scrollbar display on source code page) Failed merges: r? `@ghost` `@rustbot` modify labels: rollup
This commit is contained in:
commit
6d246f0c8d
|
@ -447,16 +447,20 @@ pub(crate) fn report_mutability_error(
|
|||
// check if the RHS is from desugaring
|
||||
let opt_assignment_rhs_span =
|
||||
self.body.find_assignments(local).first().map(|&location| {
|
||||
let stmt = &self.body[location.block].statements
|
||||
[location.statement_index];
|
||||
match stmt.kind {
|
||||
mir::StatementKind::Assign(box (
|
||||
_,
|
||||
mir::Rvalue::Use(mir::Operand::Copy(place)),
|
||||
)) => {
|
||||
self.body.local_decls[place.local].source_info.span
|
||||
}
|
||||
_ => self.body.source_info(location).span,
|
||||
if let Some(mir::Statement {
|
||||
source_info: _,
|
||||
kind:
|
||||
mir::StatementKind::Assign(box (
|
||||
_,
|
||||
mir::Rvalue::Use(mir::Operand::Copy(place)),
|
||||
)),
|
||||
}) = self.body[location.block]
|
||||
.statements
|
||||
.get(location.statement_index)
|
||||
{
|
||||
self.body.local_decls[place.local].source_info.span
|
||||
} else {
|
||||
self.body.source_info(location).span
|
||||
}
|
||||
});
|
||||
match opt_assignment_rhs_span.and_then(|s| s.desugaring_kind()) {
|
||||
|
|
|
@ -14,7 +14,7 @@ fn apply_attrs_callsite(&mut self, _fn_abi: &FnAbi<'tcx, Ty<'tcx>>, _callsite: S
|
|||
// TODO(antoyo)
|
||||
}
|
||||
|
||||
fn get_param(&self, index: usize) -> Self::Value {
|
||||
fn get_param(&mut self, index: usize) -> Self::Value {
|
||||
self.cx.current_func.borrow().expect("current func")
|
||||
.get_param(index as i32)
|
||||
.to_rvalue()
|
||||
|
|
|
@ -607,7 +607,7 @@ fn apply_attrs_callsite(&mut self, fn_abi: &FnAbi<'tcx, Ty<'tcx>>, callsite: Sel
|
|||
fn_abi.apply_attrs_callsite(self, callsite)
|
||||
}
|
||||
|
||||
fn get_param(&self, index: usize) -> Self::Value {
|
||||
fn get_param(&mut self, index: usize) -> Self::Value {
|
||||
llvm::get_param(self.llfn(), index as c_uint)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,5 +4,5 @@
|
|||
|
||||
pub trait AbiBuilderMethods<'tcx>: BackendTypes {
|
||||
fn apply_attrs_callsite(&mut self, fn_abi: &FnAbi<'tcx, Ty<'tcx>>, callsite: Self::Value);
|
||||
fn get_param(&self, index: usize) -> Self::Value;
|
||||
fn get_param(&mut self, index: usize) -> Self::Value;
|
||||
}
|
||||
|
|
|
@ -46,8 +46,17 @@ pub const fn new(user_data: T) -> Spinlock<T> {
|
|||
#[inline]
|
||||
fn obtain_lock(&self) {
|
||||
let ticket = self.queue.fetch_add(1, Ordering::SeqCst) + 1;
|
||||
let mut counter: u16 = 0;
|
||||
while self.dequeue.load(Ordering::SeqCst) != ticket {
|
||||
hint::spin_loop();
|
||||
counter += 1;
|
||||
if counter < 100 {
|
||||
hint::spin_loop();
|
||||
} else {
|
||||
counter = 0;
|
||||
unsafe {
|
||||
abi::yield_now();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -305,6 +305,10 @@ nav.sub {
|
|||
overflow-y: scroll;
|
||||
}
|
||||
|
||||
.rustdoc.source .sidebar {
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
/* Improve the scrollbar display on firefox */
|
||||
* {
|
||||
scrollbar-width: initial;
|
||||
|
|
15
src/test/ui/borrowck/issue-91206.rs
Normal file
15
src/test/ui/borrowck/issue-91206.rs
Normal file
|
@ -0,0 +1,15 @@
|
|||
struct TestClient;
|
||||
|
||||
impl TestClient {
|
||||
fn get_inner_ref(&self) -> &Vec<usize> {
|
||||
todo!()
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let client = TestClient;
|
||||
let inner = client.get_inner_ref();
|
||||
//~^ HELP consider changing this to be a mutable reference
|
||||
inner.clear();
|
||||
//~^ ERROR cannot borrow `*inner` as mutable, as it is behind a `&` reference [E0596]
|
||||
}
|
12
src/test/ui/borrowck/issue-91206.stderr
Normal file
12
src/test/ui/borrowck/issue-91206.stderr
Normal file
|
@ -0,0 +1,12 @@
|
|||
error[E0596]: cannot borrow `*inner` as mutable, as it is behind a `&` reference
|
||||
--> $DIR/issue-91206.rs:13:5
|
||||
|
|
||||
LL | let inner = client.get_inner_ref();
|
||||
| ----- help: consider changing this to be a mutable reference: `&mut Vec<usize>`
|
||||
LL |
|
||||
LL | inner.clear();
|
||||
| ^^^^^^^^^^^^^ `inner` is a `&` reference, so the data it refers to cannot be borrowed as mutable
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0596`.
|
Loading…
Reference in a new issue