Auto merge of #117126 - matthiaskrgr:rollup-8huie8f, r=matthiaskrgr
Rollup of 5 pull requests Successful merges: - #117081 (fix typos in comments) - #117091 (`OptWithInfcx` naming nits, trait bound simplifications) - #117092 (Add regression test for #117058) - #117093 (Update books) - #117105 (remove change-id assertion in bootstrap test) r? `@ghost` `@rustbot` modify labels: rollup
This commit is contained in:
commit
98b4a64a16
@ -1010,7 +1010,7 @@ fn is_very_trivially_sized(ty: Ty<'_>) -> bool {
|
||||
// Just make this an efficient immediate.
|
||||
// Note that not calling `layout_of` here does have one real consequence:
|
||||
// if the type is too big, we'll only notice this when the local is actually initialized,
|
||||
// which is a bit too late -- we should ideally notice this alreayd here, when the memory
|
||||
// which is a bit too late -- we should ideally notice this already here, when the memory
|
||||
// is conceptually allocated. But given how rare that error is and that this is a hot function,
|
||||
// we accept this downside for now.
|
||||
Operand::Immediate(Immediate::Uninit)
|
||||
|
@ -341,7 +341,9 @@ pub struct InferCtxt<'tcx> {
|
||||
next_trait_solver: bool,
|
||||
}
|
||||
|
||||
impl<'tcx> ty::InferCtxtLike<TyCtxt<'tcx>> for InferCtxt<'tcx> {
|
||||
impl<'tcx> ty::InferCtxtLike for InferCtxt<'tcx> {
|
||||
type Interner = TyCtxt<'tcx>;
|
||||
|
||||
fn universe_of_ty(&self, ty: ty::InferTy) -> Option<ty::UniverseIndex> {
|
||||
use InferTy::*;
|
||||
match ty {
|
||||
|
@ -1,7 +1,7 @@
|
||||
use crate::arena::Arena;
|
||||
use rustc_data_structures::aligned::{align_of, Aligned};
|
||||
use rustc_serialize::{Encodable, Encoder};
|
||||
use rustc_type_ir::{InferCtxtLike, OptWithInfcx};
|
||||
use rustc_type_ir::{InferCtxtLike, WithInfcx};
|
||||
use std::alloc::Layout;
|
||||
use std::cmp::Ordering;
|
||||
use std::fmt;
|
||||
@ -121,8 +121,8 @@ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
}
|
||||
}
|
||||
impl<'tcx, T: super::DebugWithInfcx<TyCtxt<'tcx>>> super::DebugWithInfcx<TyCtxt<'tcx>> for List<T> {
|
||||
fn fmt<InfCtx: InferCtxtLike<TyCtxt<'tcx>>>(
|
||||
this: OptWithInfcx<'_, TyCtxt<'tcx>, InfCtx, &Self>,
|
||||
fn fmt<Infcx: InferCtxtLike<Interner = TyCtxt<'tcx>>>(
|
||||
this: WithInfcx<'_, Infcx, &Self>,
|
||||
f: &mut core::fmt::Formatter<'_>,
|
||||
) -> core::fmt::Result {
|
||||
fmt::Debug::fmt(&this.map(|this| this.as_slice()), f)
|
||||
|
@ -54,7 +54,7 @@
|
||||
use rustc_span::{ExpnId, ExpnKind, Span};
|
||||
use rustc_target::abi::{Align, FieldIdx, Integer, IntegerType, VariantIdx};
|
||||
pub use rustc_target::abi::{ReprFlags, ReprOptions};
|
||||
pub use rustc_type_ir::{DebugWithInfcx, InferCtxtLike, OptWithInfcx};
|
||||
pub use rustc_type_ir::{DebugWithInfcx, InferCtxtLike, WithInfcx};
|
||||
pub use vtable::*;
|
||||
|
||||
use std::fmt::Debug;
|
||||
|
@ -10,7 +10,7 @@
|
||||
use crate::ty::{self, AliasTy, InferConst, Lift, Term, TermKind, Ty, TyCtxt};
|
||||
use rustc_hir::def::Namespace;
|
||||
use rustc_target::abi::TyAndLayout;
|
||||
use rustc_type_ir::{ConstKind, DebugWithInfcx, InferCtxtLike, OptWithInfcx};
|
||||
use rustc_type_ir::{ConstKind, DebugWithInfcx, InferCtxtLike, WithInfcx};
|
||||
|
||||
use std::fmt::{self, Debug};
|
||||
use std::ops::ControlFlow;
|
||||
@ -87,12 +87,12 @@ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
|
||||
impl<'tcx> fmt::Debug for ty::FnSig<'tcx> {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
OptWithInfcx::new_no_ctx(self).fmt(f)
|
||||
WithInfcx::with_no_infcx(self).fmt(f)
|
||||
}
|
||||
}
|
||||
impl<'tcx> DebugWithInfcx<TyCtxt<'tcx>> for ty::FnSig<'tcx> {
|
||||
fn fmt<InfCtx: InferCtxtLike<TyCtxt<'tcx>>>(
|
||||
this: OptWithInfcx<'_, TyCtxt<'tcx>, InfCtx, &Self>,
|
||||
fn fmt<Infcx: InferCtxtLike<Interner = TyCtxt<'tcx>>>(
|
||||
this: WithInfcx<'_, Infcx, &Self>,
|
||||
f: &mut core::fmt::Formatter<'_>,
|
||||
) -> core::fmt::Result {
|
||||
let sig = this.data;
|
||||
@ -147,8 +147,8 @@ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
}
|
||||
|
||||
impl<'tcx> ty::DebugWithInfcx<TyCtxt<'tcx>> for Ty<'tcx> {
|
||||
fn fmt<InfCtx: InferCtxtLike<TyCtxt<'tcx>>>(
|
||||
this: OptWithInfcx<'_, TyCtxt<'tcx>, InfCtx, &Self>,
|
||||
fn fmt<Infcx: InferCtxtLike<Interner = TyCtxt<'tcx>>>(
|
||||
this: WithInfcx<'_, Infcx, &Self>,
|
||||
f: &mut core::fmt::Formatter<'_>,
|
||||
) -> core::fmt::Result {
|
||||
this.data.fmt(f)
|
||||
@ -236,12 +236,12 @@ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
|
||||
impl<'tcx> fmt::Debug for AliasTy<'tcx> {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
OptWithInfcx::new_no_ctx(self).fmt(f)
|
||||
WithInfcx::with_no_infcx(self).fmt(f)
|
||||
}
|
||||
}
|
||||
impl<'tcx> DebugWithInfcx<TyCtxt<'tcx>> for AliasTy<'tcx> {
|
||||
fn fmt<InfCtx: InferCtxtLike<TyCtxt<'tcx>>>(
|
||||
this: OptWithInfcx<'_, TyCtxt<'tcx>, InfCtx, &Self>,
|
||||
fn fmt<Infcx: InferCtxtLike<Interner = TyCtxt<'tcx>>>(
|
||||
this: WithInfcx<'_, Infcx, &Self>,
|
||||
f: &mut core::fmt::Formatter<'_>,
|
||||
) -> core::fmt::Result {
|
||||
f.debug_struct("AliasTy")
|
||||
@ -261,12 +261,12 @@ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
}
|
||||
}
|
||||
impl<'tcx> DebugWithInfcx<TyCtxt<'tcx>> for ty::InferConst<'tcx> {
|
||||
fn fmt<InfCtx: InferCtxtLike<TyCtxt<'tcx>>>(
|
||||
this: OptWithInfcx<'_, TyCtxt<'tcx>, InfCtx, &Self>,
|
||||
fn fmt<Infcx: InferCtxtLike<Interner = TyCtxt<'tcx>>>(
|
||||
this: WithInfcx<'_, Infcx, &Self>,
|
||||
f: &mut core::fmt::Formatter<'_>,
|
||||
) -> core::fmt::Result {
|
||||
use ty::InferConst::*;
|
||||
match this.infcx.and_then(|infcx| infcx.universe_of_ct(*this.data)) {
|
||||
match this.infcx.universe_of_ct(*this.data) {
|
||||
None => write!(f, "{:?}", this.data),
|
||||
Some(universe) => match *this.data {
|
||||
Var(vid) => write!(f, "?{}_{}c", vid.index, universe.index()),
|
||||
@ -281,12 +281,12 @@ fn fmt<InfCtx: InferCtxtLike<TyCtxt<'tcx>>>(
|
||||
|
||||
impl<'tcx> fmt::Debug for ty::consts::Expr<'tcx> {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
OptWithInfcx::new_no_ctx(self).fmt(f)
|
||||
WithInfcx::with_no_infcx(self).fmt(f)
|
||||
}
|
||||
}
|
||||
impl<'tcx> DebugWithInfcx<TyCtxt<'tcx>> for ty::consts::Expr<'tcx> {
|
||||
fn fmt<InfCtx: InferCtxtLike<TyCtxt<'tcx>>>(
|
||||
this: OptWithInfcx<'_, TyCtxt<'tcx>, InfCtx, &Self>,
|
||||
fn fmt<Infcx: InferCtxtLike<Interner = TyCtxt<'tcx>>>(
|
||||
this: WithInfcx<'_, Infcx, &Self>,
|
||||
f: &mut core::fmt::Formatter<'_>,
|
||||
) -> core::fmt::Result {
|
||||
match this.data {
|
||||
@ -314,12 +314,12 @@ fn fmt<InfCtx: InferCtxtLike<TyCtxt<'tcx>>>(
|
||||
|
||||
impl<'tcx> fmt::Debug for ty::UnevaluatedConst<'tcx> {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
OptWithInfcx::new_no_ctx(self).fmt(f)
|
||||
WithInfcx::with_no_infcx(self).fmt(f)
|
||||
}
|
||||
}
|
||||
impl<'tcx> DebugWithInfcx<TyCtxt<'tcx>> for ty::UnevaluatedConst<'tcx> {
|
||||
fn fmt<InfCtx: InferCtxtLike<TyCtxt<'tcx>>>(
|
||||
this: OptWithInfcx<'_, TyCtxt<'tcx>, InfCtx, &Self>,
|
||||
fn fmt<Infcx: InferCtxtLike<Interner = TyCtxt<'tcx>>>(
|
||||
this: WithInfcx<'_, Infcx, &Self>,
|
||||
f: &mut core::fmt::Formatter<'_>,
|
||||
) -> core::fmt::Result {
|
||||
f.debug_struct("UnevaluatedConst")
|
||||
@ -331,12 +331,12 @@ fn fmt<InfCtx: InferCtxtLike<TyCtxt<'tcx>>>(
|
||||
|
||||
impl<'tcx> fmt::Debug for ty::Const<'tcx> {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
OptWithInfcx::new_no_ctx(self).fmt(f)
|
||||
WithInfcx::with_no_infcx(self).fmt(f)
|
||||
}
|
||||
}
|
||||
impl<'tcx> DebugWithInfcx<TyCtxt<'tcx>> for ty::Const<'tcx> {
|
||||
fn fmt<InfCtx: InferCtxtLike<TyCtxt<'tcx>>>(
|
||||
this: OptWithInfcx<'_, TyCtxt<'tcx>, InfCtx, &Self>,
|
||||
fn fmt<Infcx: InferCtxtLike<Interner = TyCtxt<'tcx>>>(
|
||||
this: WithInfcx<'_, Infcx, &Self>,
|
||||
f: &mut core::fmt::Formatter<'_>,
|
||||
) -> core::fmt::Result {
|
||||
// If this is a value, we spend some effort to make it look nice.
|
||||
@ -392,8 +392,8 @@ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
}
|
||||
}
|
||||
impl<'tcx> DebugWithInfcx<TyCtxt<'tcx>> for GenericArg<'tcx> {
|
||||
fn fmt<InfCtx: InferCtxtLike<TyCtxt<'tcx>>>(
|
||||
this: OptWithInfcx<'_, TyCtxt<'tcx>, InfCtx, &Self>,
|
||||
fn fmt<Infcx: InferCtxtLike<Interner = TyCtxt<'tcx>>>(
|
||||
this: WithInfcx<'_, Infcx, &Self>,
|
||||
f: &mut core::fmt::Formatter<'_>,
|
||||
) -> core::fmt::Result {
|
||||
match this.data.unpack() {
|
||||
@ -410,8 +410,8 @@ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
}
|
||||
}
|
||||
impl<'tcx> DebugWithInfcx<TyCtxt<'tcx>> for Region<'tcx> {
|
||||
fn fmt<InfCtx: InferCtxtLike<TyCtxt<'tcx>>>(
|
||||
this: OptWithInfcx<'_, TyCtxt<'tcx>, InfCtx, &Self>,
|
||||
fn fmt<Infcx: InferCtxtLike<Interner = TyCtxt<'tcx>>>(
|
||||
this: WithInfcx<'_, Infcx, &Self>,
|
||||
f: &mut core::fmt::Formatter<'_>,
|
||||
) -> core::fmt::Result {
|
||||
write!(f, "{:?}", &this.map(|data| data.kind()))
|
||||
@ -419,11 +419,11 @@ fn fmt<InfCtx: InferCtxtLike<TyCtxt<'tcx>>>(
|
||||
}
|
||||
|
||||
impl<'tcx> DebugWithInfcx<TyCtxt<'tcx>> for ty::RegionVid {
|
||||
fn fmt<InfCtx: InferCtxtLike<TyCtxt<'tcx>>>(
|
||||
this: OptWithInfcx<'_, TyCtxt<'tcx>, InfCtx, &Self>,
|
||||
fn fmt<Infcx: InferCtxtLike<Interner = TyCtxt<'tcx>>>(
|
||||
this: WithInfcx<'_, Infcx, &Self>,
|
||||
f: &mut core::fmt::Formatter<'_>,
|
||||
) -> core::fmt::Result {
|
||||
match this.infcx.and_then(|infcx| infcx.universe_of_lt(*this.data)) {
|
||||
match this.infcx.universe_of_lt(*this.data) {
|
||||
Some(universe) => write!(f, "'?{}_{}", this.data.index(), universe.index()),
|
||||
None => write!(f, "{:?}", this.data),
|
||||
}
|
||||
@ -431,8 +431,8 @@ fn fmt<InfCtx: InferCtxtLike<TyCtxt<'tcx>>>(
|
||||
}
|
||||
|
||||
impl<'tcx, T: DebugWithInfcx<TyCtxt<'tcx>>> DebugWithInfcx<TyCtxt<'tcx>> for ty::Binder<'tcx, T> {
|
||||
fn fmt<InfCtx: InferCtxtLike<TyCtxt<'tcx>>>(
|
||||
this: OptWithInfcx<'_, TyCtxt<'tcx>, InfCtx, &Self>,
|
||||
fn fmt<Infcx: InferCtxtLike<Interner = TyCtxt<'tcx>>>(
|
||||
this: WithInfcx<'_, Infcx, &Self>,
|
||||
f: &mut core::fmt::Formatter<'_>,
|
||||
) -> core::fmt::Result {
|
||||
f.debug_tuple("Binder")
|
||||
|
@ -683,8 +683,8 @@ pub enum ExistentialPredicate<'tcx> {
|
||||
}
|
||||
|
||||
impl<'tcx> DebugWithInfcx<TyCtxt<'tcx>> for ExistentialPredicate<'tcx> {
|
||||
fn fmt<InfCtx: rustc_type_ir::InferCtxtLike<TyCtxt<'tcx>>>(
|
||||
this: rustc_type_ir::OptWithInfcx<'_, TyCtxt<'tcx>, InfCtx, &Self>,
|
||||
fn fmt<Infcx: rustc_type_ir::InferCtxtLike<Interner = TyCtxt<'tcx>>>(
|
||||
this: rustc_type_ir::WithInfcx<'_, Infcx, &Self>,
|
||||
f: &mut core::fmt::Formatter<'_>,
|
||||
) -> core::fmt::Result {
|
||||
fmt::Debug::fmt(&this.data, f)
|
||||
|
@ -5,8 +5,8 @@
|
||||
use std::hash;
|
||||
|
||||
use crate::{
|
||||
DebruijnIndex, DebugWithInfcx, HashStableContext, InferCtxtLike, Interner, OptWithInfcx,
|
||||
TyDecoder, TyEncoder,
|
||||
DebruijnIndex, DebugWithInfcx, HashStableContext, InferCtxtLike, Interner, TyDecoder,
|
||||
TyEncoder, WithInfcx,
|
||||
};
|
||||
|
||||
use self::ConstKind::*;
|
||||
@ -231,13 +231,13 @@ fn clone(&self) -> Self {
|
||||
|
||||
impl<I: Interner> fmt::Debug for ConstKind<I> {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
OptWithInfcx::new_no_ctx(self).fmt(f)
|
||||
WithInfcx::with_no_infcx(self).fmt(f)
|
||||
}
|
||||
}
|
||||
|
||||
impl<I: Interner> DebugWithInfcx<I> for ConstKind<I> {
|
||||
fn fmt<InfCtx: InferCtxtLike<I>>(
|
||||
this: OptWithInfcx<'_, I, InfCtx, &Self>,
|
||||
fn fmt<Infcx: InferCtxtLike<Interner = I>>(
|
||||
this: WithInfcx<'_, Infcx, &Self>,
|
||||
f: &mut core::fmt::Formatter<'_>,
|
||||
) -> core::fmt::Result {
|
||||
use ConstKind::*;
|
||||
|
@ -3,38 +3,48 @@
|
||||
use core::fmt;
|
||||
use std::marker::PhantomData;
|
||||
|
||||
pub trait InferCtxtLike<I: Interner> {
|
||||
fn universe_of_ty(&self, ty: I::InferTy) -> Option<UniverseIndex>;
|
||||
pub trait InferCtxtLike {
|
||||
type Interner: Interner;
|
||||
|
||||
fn universe_of_lt(&self, lt: I::InferRegion) -> Option<UniverseIndex>;
|
||||
fn universe_of_ty(&self, ty: <Self::Interner as Interner>::InferTy) -> Option<UniverseIndex>;
|
||||
|
||||
fn universe_of_ct(&self, ct: I::InferConst) -> Option<UniverseIndex>;
|
||||
fn universe_of_lt(
|
||||
&self,
|
||||
lt: <Self::Interner as Interner>::InferRegion,
|
||||
) -> Option<UniverseIndex>;
|
||||
|
||||
fn universe_of_ct(&self, ct: <Self::Interner as Interner>::InferConst)
|
||||
-> Option<UniverseIndex>;
|
||||
}
|
||||
|
||||
impl<I: Interner> InferCtxtLike<I> for core::convert::Infallible {
|
||||
pub struct NoInfcx<I>(PhantomData<I>);
|
||||
|
||||
impl<I: Interner> InferCtxtLike for NoInfcx<I> {
|
||||
type Interner = I;
|
||||
|
||||
fn universe_of_ty(&self, _ty: <I as Interner>::InferTy) -> Option<UniverseIndex> {
|
||||
match *self {}
|
||||
None
|
||||
}
|
||||
|
||||
fn universe_of_ct(&self, _ct: <I as Interner>::InferConst) -> Option<UniverseIndex> {
|
||||
match *self {}
|
||||
None
|
||||
}
|
||||
|
||||
fn universe_of_lt(&self, _lt: <I as Interner>::InferRegion) -> Option<UniverseIndex> {
|
||||
match *self {}
|
||||
None
|
||||
}
|
||||
}
|
||||
|
||||
pub trait DebugWithInfcx<I: Interner>: fmt::Debug {
|
||||
fn fmt<InfCtx: InferCtxtLike<I>>(
|
||||
this: OptWithInfcx<'_, I, InfCtx, &Self>,
|
||||
fn fmt<Infcx: InferCtxtLike<Interner = I>>(
|
||||
this: WithInfcx<'_, Infcx, &Self>,
|
||||
f: &mut fmt::Formatter<'_>,
|
||||
) -> fmt::Result;
|
||||
}
|
||||
|
||||
impl<I: Interner, T: DebugWithInfcx<I> + ?Sized> DebugWithInfcx<I> for &'_ T {
|
||||
fn fmt<InfCtx: InferCtxtLike<I>>(
|
||||
this: OptWithInfcx<'_, I, InfCtx, &Self>,
|
||||
fn fmt<Infcx: InferCtxtLike<Interner = I>>(
|
||||
this: WithInfcx<'_, Infcx, &Self>,
|
||||
f: &mut fmt::Formatter<'_>,
|
||||
) -> fmt::Result {
|
||||
<T as DebugWithInfcx<I>>::fmt(this.map(|&data| data), f)
|
||||
@ -42,8 +52,8 @@ fn fmt<InfCtx: InferCtxtLike<I>>(
|
||||
}
|
||||
|
||||
impl<I: Interner, T: DebugWithInfcx<I>> DebugWithInfcx<I> for [T] {
|
||||
fn fmt<InfCtx: InferCtxtLike<I>>(
|
||||
this: OptWithInfcx<'_, I, InfCtx, &Self>,
|
||||
fn fmt<Infcx: InferCtxtLike<Interner = I>>(
|
||||
this: WithInfcx<'_, Infcx, &Self>,
|
||||
f: &mut fmt::Formatter<'_>,
|
||||
) -> fmt::Result {
|
||||
match f.alternate() {
|
||||
@ -70,46 +80,45 @@ fn fmt<InfCtx: InferCtxtLike<I>>(
|
||||
}
|
||||
}
|
||||
|
||||
pub struct OptWithInfcx<'a, I: Interner, InfCtx: InferCtxtLike<I>, T> {
|
||||
pub struct WithInfcx<'a, Infcx: InferCtxtLike, T> {
|
||||
pub data: T,
|
||||
pub infcx: Option<&'a InfCtx>,
|
||||
_interner: PhantomData<I>,
|
||||
pub infcx: &'a Infcx,
|
||||
}
|
||||
|
||||
impl<I: Interner, InfCtx: InferCtxtLike<I>, T: Copy> Copy for OptWithInfcx<'_, I, InfCtx, T> {}
|
||||
impl<Infcx: InferCtxtLike, T: Copy> Copy for WithInfcx<'_, Infcx, T> {}
|
||||
|
||||
impl<I: Interner, InfCtx: InferCtxtLike<I>, T: Clone> Clone for OptWithInfcx<'_, I, InfCtx, T> {
|
||||
impl<Infcx: InferCtxtLike, T: Clone> Clone for WithInfcx<'_, Infcx, T> {
|
||||
fn clone(&self) -> Self {
|
||||
Self { data: self.data.clone(), infcx: self.infcx, _interner: self._interner }
|
||||
Self { data: self.data.clone(), infcx: self.infcx }
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a, I: Interner, T> OptWithInfcx<'a, I, core::convert::Infallible, T> {
|
||||
pub fn new_no_ctx(data: T) -> Self {
|
||||
Self { data, infcx: None, _interner: PhantomData }
|
||||
impl<'a, I: Interner, T> WithInfcx<'a, NoInfcx<I>, T> {
|
||||
pub fn with_no_infcx(data: T) -> Self {
|
||||
Self { data, infcx: &NoInfcx(PhantomData) }
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a, I: Interner, InfCtx: InferCtxtLike<I>, T> OptWithInfcx<'a, I, InfCtx, T> {
|
||||
pub fn new(data: T, infcx: &'a InfCtx) -> Self {
|
||||
Self { data, infcx: Some(infcx), _interner: PhantomData }
|
||||
impl<'a, Infcx: InferCtxtLike, T> WithInfcx<'a, Infcx, T> {
|
||||
pub fn new(data: T, infcx: &'a Infcx) -> Self {
|
||||
Self { data, infcx }
|
||||
}
|
||||
|
||||
pub fn wrap<U>(self, u: U) -> OptWithInfcx<'a, I, InfCtx, U> {
|
||||
OptWithInfcx { data: u, infcx: self.infcx, _interner: PhantomData }
|
||||
pub fn wrap<U>(self, u: U) -> WithInfcx<'a, Infcx, U> {
|
||||
WithInfcx { data: u, infcx: self.infcx }
|
||||
}
|
||||
|
||||
pub fn map<U>(self, f: impl FnOnce(T) -> U) -> OptWithInfcx<'a, I, InfCtx, U> {
|
||||
OptWithInfcx { data: f(self.data), infcx: self.infcx, _interner: PhantomData }
|
||||
pub fn map<U>(self, f: impl FnOnce(T) -> U) -> WithInfcx<'a, Infcx, U> {
|
||||
WithInfcx { data: f(self.data), infcx: self.infcx }
|
||||
}
|
||||
|
||||
pub fn as_ref(&self) -> OptWithInfcx<'a, I, InfCtx, &T> {
|
||||
OptWithInfcx { data: &self.data, infcx: self.infcx, _interner: PhantomData }
|
||||
pub fn as_ref(&self) -> WithInfcx<'a, Infcx, &T> {
|
||||
WithInfcx { data: &self.data, infcx: self.infcx }
|
||||
}
|
||||
}
|
||||
|
||||
impl<I: Interner, InfCtx: InferCtxtLike<I>, T: DebugWithInfcx<I>> fmt::Debug
|
||||
for OptWithInfcx<'_, I, InfCtx, T>
|
||||
impl<Infcx: InferCtxtLike, T: DebugWithInfcx<Infcx::Interner>> fmt::Debug
|
||||
for WithInfcx<'_, Infcx, T>
|
||||
{
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
DebugWithInfcx::fmt(self.as_ref(), f)
|
||||
|
@ -34,7 +34,7 @@
|
||||
|
||||
pub use codec::*;
|
||||
pub use const_kind::*;
|
||||
pub use debug::{DebugWithInfcx, InferCtxtLike, OptWithInfcx};
|
||||
pub use debug::{DebugWithInfcx, InferCtxtLike, WithInfcx};
|
||||
pub use flags::*;
|
||||
pub use interner::*;
|
||||
pub use region_kind::*;
|
||||
|
@ -5,8 +5,8 @@
|
||||
use std::hash;
|
||||
|
||||
use crate::{
|
||||
DebruijnIndex, DebugWithInfcx, HashStableContext, InferCtxtLike, Interner, OptWithInfcx,
|
||||
TyDecoder, TyEncoder,
|
||||
DebruijnIndex, DebugWithInfcx, HashStableContext, InferCtxtLike, Interner, TyDecoder,
|
||||
TyEncoder, WithInfcx,
|
||||
};
|
||||
|
||||
use self::RegionKind::*;
|
||||
@ -274,8 +274,8 @@ fn hash<H: hash::Hasher>(&self, state: &mut H) -> () {
|
||||
}
|
||||
|
||||
impl<I: Interner> DebugWithInfcx<I> for RegionKind<I> {
|
||||
fn fmt<InfCtx: InferCtxtLike<I>>(
|
||||
this: OptWithInfcx<'_, I, InfCtx, &Self>,
|
||||
fn fmt<Infcx: InferCtxtLike<Interner = I>>(
|
||||
this: WithInfcx<'_, Infcx, &Self>,
|
||||
f: &mut core::fmt::Formatter<'_>,
|
||||
) -> core::fmt::Result {
|
||||
match this.data {
|
||||
@ -301,7 +301,7 @@ fn fmt<InfCtx: InferCtxtLike<I>>(
|
||||
}
|
||||
impl<I: Interner> fmt::Debug for RegionKind<I> {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
OptWithInfcx::new_no_ctx(self).fmt(f)
|
||||
WithInfcx::with_no_infcx(self).fmt(f)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -11,7 +11,7 @@
|
||||
use crate::Interner;
|
||||
use crate::TyDecoder;
|
||||
use crate::TyEncoder;
|
||||
use crate::{DebruijnIndex, DebugWithInfcx, InferCtxtLike, OptWithInfcx};
|
||||
use crate::{DebruijnIndex, DebugWithInfcx, InferCtxtLike, WithInfcx};
|
||||
|
||||
use self::TyKind::*;
|
||||
|
||||
@ -534,8 +534,8 @@ fn hash<__H: hash::Hasher>(&self, state: &mut __H) -> () {
|
||||
}
|
||||
|
||||
impl<I: Interner> DebugWithInfcx<I> for TyKind<I> {
|
||||
fn fmt<InfCtx: InferCtxtLike<I>>(
|
||||
this: OptWithInfcx<'_, I, InfCtx, &Self>,
|
||||
fn fmt<Infcx: InferCtxtLike<Interner = I>>(
|
||||
this: WithInfcx<'_, Infcx, &Self>,
|
||||
f: &mut core::fmt::Formatter<'_>,
|
||||
) -> fmt::Result {
|
||||
match this.data {
|
||||
@ -617,7 +617,7 @@ fn fmt<InfCtx: InferCtxtLike<I>>(
|
||||
// This is manually implemented because a derive would require `I: Debug`
|
||||
impl<I: Interner> fmt::Debug for TyKind<I> {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
OptWithInfcx::new_no_ctx(self).fmt(f)
|
||||
WithInfcx::with_no_infcx(self).fmt(f)
|
||||
}
|
||||
}
|
||||
|
||||
@ -1239,12 +1239,12 @@ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
}
|
||||
|
||||
impl<I: Interner<InferTy = InferTy>> DebugWithInfcx<I> for InferTy {
|
||||
fn fmt<InfCtx: InferCtxtLike<I>>(
|
||||
this: OptWithInfcx<'_, I, InfCtx, &Self>,
|
||||
fn fmt<Infcx: InferCtxtLike<Interner = I>>(
|
||||
this: WithInfcx<'_, Infcx, &Self>,
|
||||
f: &mut fmt::Formatter<'_>,
|
||||
) -> fmt::Result {
|
||||
use InferTy::*;
|
||||
match this.infcx.and_then(|infcx| infcx.universe_of_ty(*this.data)) {
|
||||
match this.infcx.universe_of_ty(*this.data) {
|
||||
None => write!(f, "{:?}", this.data),
|
||||
Some(universe) => match *this.data {
|
||||
TyVar(ty_vid) => write!(f, "?{}_{}t", ty_vid.index(), universe.index()),
|
||||
|
@ -114,7 +114,7 @@ macro_rules! midpoint_impl {
|
||||
without modifying the original"]
|
||||
#[inline]
|
||||
pub const fn midpoint(self, rhs: $SelfT) -> $SelfT {
|
||||
// Use the well known branchless algorthim from Hacker's Delight to compute
|
||||
// Use the well known branchless algorithm from Hacker's Delight to compute
|
||||
// `(a + b) / 2` without overflowing: `((a ^ b) >> 1) + (a & b)`.
|
||||
((self ^ rhs) >> 1) + (self & rhs)
|
||||
}
|
||||
|
@ -103,7 +103,6 @@ class GenerateAndParseConfig(unittest.TestCase):
|
||||
"""Test that we can serialize and deserialize a config.toml file"""
|
||||
def test_no_args(self):
|
||||
build = serialize_and_parse([])
|
||||
self.assertEqual(build.get_toml("change-id"), '116998')
|
||||
self.assertEqual(build.get_toml("profile"), 'dist')
|
||||
self.assertIsNone(build.get_toml("llvm.download-ci-llvm"))
|
||||
|
||||
|
@ -1 +1 @@
|
||||
Subproject commit 72187f5cd0beaaa9c6f584156bcd88f921871e83
|
||||
Subproject commit 3dca2fc50b922a8efb94903b9fee8bb42ab48f38
|
@ -1 +1 @@
|
||||
Subproject commit eac173690b8cc99094e1d88bd49dd61127fbd285
|
||||
Subproject commit 22bca3d0f6e9b9b556689b54ce96f25b46ecd1b3
|
@ -1 +1 @@
|
||||
Subproject commit ddfa4214487686e91b21aa29afb972c08a8f0d5b
|
||||
Subproject commit 1842257814919fa62e81bdecd5e8f95be2839dbb
|
@ -1 +1 @@
|
||||
Subproject commit 142b2ed77d33f37a9973772bd95e6144ed9dce43
|
||||
Subproject commit 16fd3c06d9e558dae2d52000818274ae70c9e90a
|
@ -1 +1 @@
|
||||
Subproject commit 8eb3a01ab74c567b7174784892fb807f2c632d6b
|
||||
Subproject commit 6709beeb7d0fbc5ffc91ac4893a24434123b9bfa
|
@ -1 +1 @@
|
||||
Subproject commit b98af7d661e4744baab81fb8dc7a049e44a4a998
|
||||
Subproject commit b0ee9ec8fa59a6c7620165e061f4747202377a62
|
@ -123,7 +123,7 @@ rustc --check-cfg 'cfg(is_embedded, has_feathers, values(any()))' \
|
||||
fn do_embedded() {} // and because names exhaustiveness was not disabled
|
||||
|
||||
#[cfg(has_feathers)] // This is expected as "has_feathers" was provided in cfg()
|
||||
fn do_features() {} // and because names exhaustiveness was not disbaled
|
||||
fn do_features() {} // and because names exhaustiveness was not disabled
|
||||
|
||||
#[cfg(has_feathers = "zapping")] // This is expected as "has_feathers" was provided in cfg()
|
||||
// and because no value checking was enable for "has_feathers"
|
||||
|
39
tests/ui/attributes/statement-attribute-validation.rs
Normal file
39
tests/ui/attributes/statement-attribute-validation.rs
Normal file
@ -0,0 +1,39 @@
|
||||
// test for #117058 - check that attributes are validated on various kinds of statements.
|
||||
|
||||
struct A;
|
||||
|
||||
fn func() {}
|
||||
|
||||
fn main() {
|
||||
#[allow(two-words)]
|
||||
//~^ ERROR expected one of `(`, `,`, `::`, or `=`, found `-`
|
||||
if true {
|
||||
} else {
|
||||
}
|
||||
#[allow(two-words)]
|
||||
//~^ ERROR expected one of `(`, `,`, `::`, or `=`, found `-`
|
||||
(1);
|
||||
#[allow(two-words)]
|
||||
//~^ ERROR expected one of `(`, `,`, `::`, or `=`, found `-`
|
||||
match 1 {
|
||||
_ => {}
|
||||
}
|
||||
#[allow(two-words)]
|
||||
//~^ ERROR expected one of `(`, `,`, `::`, or `=`, found `-`
|
||||
while false {}
|
||||
#[allow(two-words)]
|
||||
//~^ ERROR expected one of `(`, `,`, `::`, or `=`, found `-`
|
||||
{}
|
||||
#[allow(two-words)]
|
||||
//~^ ERROR expected one of `(`, `,`, `::`, or `=`, found `-`
|
||||
A {};
|
||||
#[allow(two-words)]
|
||||
//~^ ERROR expected one of `(`, `,`, `::`, or `=`, found `-`
|
||||
func();
|
||||
#[allow(two-words)]
|
||||
//~^ ERROR expected one of `(`, `,`, `::`, or `=`, found `-`
|
||||
A;
|
||||
#[allow(two-words)]
|
||||
//~^ ERROR expected one of `(`, `,`, `::`, or `=`, found `-`
|
||||
loop {}
|
||||
}
|
56
tests/ui/attributes/statement-attribute-validation.stderr
Normal file
56
tests/ui/attributes/statement-attribute-validation.stderr
Normal file
@ -0,0 +1,56 @@
|
||||
error: expected one of `(`, `,`, `::`, or `=`, found `-`
|
||||
--> $DIR/statement-attribute-validation.rs:8:16
|
||||
|
|
||||
LL | #[allow(two-words)]
|
||||
| ^ expected one of `(`, `,`, `::`, or `=`
|
||||
|
||||
error: expected one of `(`, `,`, `::`, or `=`, found `-`
|
||||
--> $DIR/statement-attribute-validation.rs:13:16
|
||||
|
|
||||
LL | #[allow(two-words)]
|
||||
| ^ expected one of `(`, `,`, `::`, or `=`
|
||||
|
||||
error: expected one of `(`, `,`, `::`, or `=`, found `-`
|
||||
--> $DIR/statement-attribute-validation.rs:16:16
|
||||
|
|
||||
LL | #[allow(two-words)]
|
||||
| ^ expected one of `(`, `,`, `::`, or `=`
|
||||
|
||||
error: expected one of `(`, `,`, `::`, or `=`, found `-`
|
||||
--> $DIR/statement-attribute-validation.rs:21:16
|
||||
|
|
||||
LL | #[allow(two-words)]
|
||||
| ^ expected one of `(`, `,`, `::`, or `=`
|
||||
|
||||
error: expected one of `(`, `,`, `::`, or `=`, found `-`
|
||||
--> $DIR/statement-attribute-validation.rs:24:16
|
||||
|
|
||||
LL | #[allow(two-words)]
|
||||
| ^ expected one of `(`, `,`, `::`, or `=`
|
||||
|
||||
error: expected one of `(`, `,`, `::`, or `=`, found `-`
|
||||
--> $DIR/statement-attribute-validation.rs:27:16
|
||||
|
|
||||
LL | #[allow(two-words)]
|
||||
| ^ expected one of `(`, `,`, `::`, or `=`
|
||||
|
||||
error: expected one of `(`, `,`, `::`, or `=`, found `-`
|
||||
--> $DIR/statement-attribute-validation.rs:30:16
|
||||
|
|
||||
LL | #[allow(two-words)]
|
||||
| ^ expected one of `(`, `,`, `::`, or `=`
|
||||
|
||||
error: expected one of `(`, `,`, `::`, or `=`, found `-`
|
||||
--> $DIR/statement-attribute-validation.rs:33:16
|
||||
|
|
||||
LL | #[allow(two-words)]
|
||||
| ^ expected one of `(`, `,`, `::`, or `=`
|
||||
|
||||
error: expected one of `(`, `,`, `::`, or `=`, found `-`
|
||||
--> $DIR/statement-attribute-validation.rs:36:16
|
||||
|
|
||||
LL | #[allow(two-words)]
|
||||
| ^ expected one of `(`, `,`, `::`, or `=`
|
||||
|
||||
error: aborting due to 9 previous errors
|
||||
|
Loading…
Reference in New Issue
Block a user