Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
600607f
Move `search_for_adt_without_structural_match` to `ty/mod`
varkor Oct 20, 2019
bbd53de
Forbid non-`structural_match` types in const generics
varkor Oct 20, 2019
133cd2c
Search for generic parameters when finding non-`structural_match` types
varkor Oct 20, 2019
f0e6cd9
Remove "type parameter depends on const parameter" error from resolution
varkor Oct 20, 2019
9f788f3
Fix rustdoc const generics test
varkor Oct 21, 2019
7f13a4a
Remove FIXME
varkor Oct 22, 2019
2dda8ad
Use E0741 for structural match error
varkor Oct 22, 2019
fe3dc31
Update cargo
ehuss Oct 22, 2019
eb6d757
UI failures fix
Oct 21, 2019
8467cef
Tweak format string error to point at arguments always
estebank Oct 24, 2019
18d873e
Avoid ICE when adjusting bad self ty
estebank Oct 24, 2019
060b6cb
Update hashbrown to 0.6.2
alexcrichton Oct 24, 2019
184a61f
Don't assert for different instance on impl trait alias
csmoe Oct 24, 2019
2c16f84
rustc_driver: Remove unnecessary use of crate store
petrochenkov Oct 16, 2019
2cda75c
rustc_metadata: Remove unnecessary use of crate store in plugin loader
petrochenkov Oct 16, 2019
175d325
rustc_metadata: Move some code around
petrochenkov Oct 17, 2019
222503a
rustc: Add a convenience alias for `dyn MetadataLoader + Sync`
petrochenkov Oct 17, 2019
fb353f0
resolve: Privatize all resolver fields
petrochenkov Oct 19, 2019
5fd796a
rustc: Combine resolver outputs into a single struct
petrochenkov Oct 20, 2019
3534ca8
Turn crate store into a resolver output
petrochenkov Oct 20, 2019
c5fee33
rustc_metadata: Remove `RwLock` from `CStore`
petrochenkov Oct 20, 2019
9f5a530
rustc_metadata: Minimize use of `Lrc` in crate store
petrochenkov Oct 20, 2019
94216ce
rustc_interface: Remove `ExpansionResult` and some `Steal`s
petrochenkov Oct 21, 2019
cdb7634
Rollup merge of #65625 - petrochenkov:cstore, r=Mark-Simulacrum,Zoxc
Centril Oct 24, 2019
9c04bd1
Rollup merge of #65627 - varkor:const-generics-forbid-non-structural_…
Centril Oct 24, 2019
0da94a4
Rollup merge of #65710 - ehuss:update-cargo, r=alexcrichton
Centril Oct 24, 2019
efa5037
Rollup merge of #65729 - Wind-River:master_003, r=alexcrichton
Centril Oct 24, 2019
1e4a2ee
Rollup merge of #65746 - estebank:newcomer-format, r=Centril
Centril Oct 24, 2019
1b03671
Rollup merge of #65753 - csmoe:derive_fold, r=Centril
Centril Oct 24, 2019
7b3896f
Rollup merge of #65755 - estebank:icicle, r=davidtwco
Centril Oct 24, 2019
fd6795b
Rollup merge of #65766 - alexcrichton:less-inline-hashbrown, r=Mark-S…
Centril Oct 24, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Avoid ICE when adjusting bad self ty
  • Loading branch information
estebank committed Oct 24, 2019
commit 18d873e8f0d10ad61a6110af28e2d1008e6acd16
20 changes: 15 additions & 5 deletions src/librustc_typeck/check/method/confirm.rs
Original file line number Diff line number Diff line change
Expand Up @@ -141,14 +141,24 @@ impl<'a, 'tcx> ConfirmContext<'a, 'tcx> {
///////////////////////////////////////////////////////////////////////////
// ADJUSTMENTS

fn adjust_self_ty(&mut self,
unadjusted_self_ty: Ty<'tcx>,
pick: &probe::Pick<'tcx>)
-> Ty<'tcx> {
fn adjust_self_ty(
&mut self,
unadjusted_self_ty: Ty<'tcx>,
pick: &probe::Pick<'tcx>,
) -> Ty<'tcx> {
// Commit the autoderefs by calling `autoderef` again, but this
// time writing the results into the various tables.
let mut autoderef = self.autoderef(self.span, unadjusted_self_ty);
let (_, n) = autoderef.nth(pick.autoderefs).unwrap();
let (_, n) = match autoderef.nth(pick.autoderefs) {
Some(n) => n,
None => {
self.tcx.sess.delay_span_bug(
syntax_pos::DUMMY_SP,
&format!("failed autoderef {}", pick.autoderefs),
);
return self.tcx.types.err;
}
};
assert_eq!(n, pick.autoderefs);

let mut adjustments = autoderef.adjust_steps(self, Needs::None);
Expand Down
63 changes: 63 additions & 0 deletions src/test/ui/issues/issue-65611.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
use std::mem::MaybeUninit;
use std::ops::Deref;

pub unsafe trait Array {
/// The array’s element type
type Item;
#[doc(hidden)]
/// The smallest index type that indexes the array.
type Index: Index;
#[doc(hidden)]
fn as_ptr(&self) -> *const Self::Item;
#[doc(hidden)]
fn as_mut_ptr(&mut self) -> *mut Self::Item;
#[doc(hidden)]
fn capacity() -> usize;
}

pub trait Index : PartialEq + Copy {
fn to_usize(self) -> usize;
fn from(usize) -> Self;
}

impl Index for usize {
fn to_usize(self) -> usize { self }
fn from(val: usize) -> Self {
val
}
}

unsafe impl<T> Array for [T; 1] {
type Item = T;
type Index = usize;
fn as_ptr(&self) -> *const T { self as *const _ as *const _ }
fn as_mut_ptr(&mut self) -> *mut T { self as *mut _ as *mut _}
fn capacity() -> usize { 1 }
}

impl<A: Array> Deref for ArrayVec<A> {
type Target = [A::Item];
#[inline]
fn deref(&self) -> &[A::Item] {
panic!()
}
}

pub struct ArrayVec<A: Array> {
xs: MaybeUninit<A>,
len: usize,
}

impl<A: Array> ArrayVec<A> {
pub fn new() -> ArrayVec<A> {
panic!()
}
}

fn main() {
let mut buffer = ArrayVec::new();
let x = buffer.last().unwrap().0.clone();
//~^ ERROR type annotations needed
//~| ERROR no field `0` on type `&_`
buffer.reverse();
}
18 changes: 18 additions & 0 deletions src/test/ui/issues/issue-65611.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
error[E0282]: type annotations needed
--> $DIR/issue-65611.rs:59:20
|
LL | let x = buffer.last().unwrap().0.clone();
| ^^^^ cannot infer type for `T`
|
= note: type must be known at this point

error[E0609]: no field `0` on type `&_`
--> $DIR/issue-65611.rs:59:36
|
LL | let x = buffer.last().unwrap().0.clone();
| ^

error: aborting due to 2 previous errors

Some errors have detailed explanations: E0282, E0609.
For more information about an error, try `rustc --explain E0282`.