Auto merge of #101544 - matthiaskrgr:rollup-4urx917, r=matthiaskrgr
Rollup of 14 pull requests Successful merges: - #101343 (Add -api-level to pm command) - #101416 (stdio: Document no support for writing to non-blocking stdio/stderr) - #101435 (Remove unnecessary `EMIT_MIR_FOR_EACH_BITWIDTH`) - #101493 (Pass ImplTraitContext as &mut to avoid the need of ImplTraitContext::reborrow) - #101502 (Do not suggest a semicolon for a macro without `!`) - #101503 (Add debug calls) - #101506 (rustdoc: remove unused CSS `#main-content > .since`) - #101507 (rustdoc: remove unused CSS `#main-content > table td`) - #101521 (Rustdoc-Json: More accurate struct type.) - #101525 (Fix typo in pass_manager.rs) - #101534 (rustdoc: remove unused mobile CSS `.rustdoc { flex-direction }`) - #101535 (Fix error printing mistake in tidy) - #101536 (Add documentation for Attr::is_doc_comment) - #101538 (rustdoc: remove unused CSS `.content .methods > div`) Failed merges: r? `@ghost` `@rustbot` modify labels: rollup
This commit is contained in:
commit
c2804e6ec2
@ -232,6 +232,8 @@ impl AttrItem {
|
||||
}
|
||||
|
||||
impl Attribute {
|
||||
/// Returns `true` if it is a sugared doc comment (`///` or `//!` for example).
|
||||
/// So `#[doc = "doc"]` will return `false`.
|
||||
pub fn is_doc_comment(&self) -> bool {
|
||||
match self.kind {
|
||||
AttrKind::Normal(..) => false,
|
||||
|
@ -220,7 +220,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
|
||||
&sym.qself,
|
||||
&sym.path,
|
||||
ParamMode::Optional,
|
||||
ImplTraitContext::Disallowed(ImplTraitPosition::Path),
|
||||
&mut ImplTraitContext::Disallowed(ImplTraitPosition::Path),
|
||||
);
|
||||
hir::InlineAsmOperand::SymStatic { path, def_id }
|
||||
} else {
|
||||
|
@ -84,10 +84,9 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
|
||||
}
|
||||
|
||||
fn lower_local(&mut self, l: &Local) -> &'hir hir::Local<'hir> {
|
||||
let ty = l
|
||||
.ty
|
||||
.as_ref()
|
||||
.map(|t| self.lower_ty(t, ImplTraitContext::Disallowed(ImplTraitPosition::Variable)));
|
||||
let ty = l.ty.as_ref().map(|t| {
|
||||
self.lower_ty(t, &mut ImplTraitContext::Disallowed(ImplTraitPosition::Variable))
|
||||
});
|
||||
let init = l.kind.init().map(|init| self.lower_expr(init));
|
||||
let hir_id = self.lower_node_id(l.id);
|
||||
let pat = self.lower_pat(&l.pat);
|
||||
|
@ -66,7 +66,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
|
||||
seg,
|
||||
ParamMode::Optional,
|
||||
ParenthesizedGenericArgs::Err,
|
||||
ImplTraitContext::Disallowed(ImplTraitPosition::Path),
|
||||
&mut ImplTraitContext::Disallowed(ImplTraitPosition::Path),
|
||||
));
|
||||
let receiver = self.lower_expr(receiver);
|
||||
let args =
|
||||
@ -89,14 +89,14 @@ impl<'hir> LoweringContext<'_, 'hir> {
|
||||
}
|
||||
ExprKind::Cast(ref expr, ref ty) => {
|
||||
let expr = self.lower_expr(expr);
|
||||
let ty =
|
||||
self.lower_ty(ty, ImplTraitContext::Disallowed(ImplTraitPosition::Type));
|
||||
let ty = self
|
||||
.lower_ty(ty, &mut ImplTraitContext::Disallowed(ImplTraitPosition::Type));
|
||||
hir::ExprKind::Cast(expr, ty)
|
||||
}
|
||||
ExprKind::Type(ref expr, ref ty) => {
|
||||
let expr = self.lower_expr(expr);
|
||||
let ty =
|
||||
self.lower_ty(ty, ImplTraitContext::Disallowed(ImplTraitPosition::Type));
|
||||
let ty = self
|
||||
.lower_ty(ty, &mut ImplTraitContext::Disallowed(ImplTraitPosition::Type));
|
||||
hir::ExprKind::Type(expr, ty)
|
||||
}
|
||||
ExprKind::AddrOf(k, m, ref ohs) => {
|
||||
@ -219,7 +219,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
|
||||
qself,
|
||||
path,
|
||||
ParamMode::Optional,
|
||||
ImplTraitContext::Disallowed(ImplTraitPosition::Path),
|
||||
&mut ImplTraitContext::Disallowed(ImplTraitPosition::Path),
|
||||
);
|
||||
hir::ExprKind::Path(qpath)
|
||||
}
|
||||
@ -253,7 +253,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
|
||||
&se.qself,
|
||||
&se.path,
|
||||
ParamMode::Optional,
|
||||
ImplTraitContext::Disallowed(ImplTraitPosition::Path),
|
||||
&mut ImplTraitContext::Disallowed(ImplTraitPosition::Path),
|
||||
)),
|
||||
self.arena
|
||||
.alloc_from_iter(se.fields.iter().map(|x| self.lower_expr_field(x))),
|
||||
@ -550,12 +550,14 @@ impl<'hir> LoweringContext<'_, 'hir> {
|
||||
async_gen_kind: hir::AsyncGeneratorKind,
|
||||
body: impl FnOnce(&mut Self) -> hir::Expr<'hir>,
|
||||
) -> hir::ExprKind<'hir> {
|
||||
let output = match ret_ty {
|
||||
Some(ty) => hir::FnRetTy::Return(
|
||||
self.lower_ty(&ty, ImplTraitContext::Disallowed(ImplTraitPosition::AsyncBlock)),
|
||||
),
|
||||
None => hir::FnRetTy::DefaultReturn(self.lower_span(span)),
|
||||
};
|
||||
let output =
|
||||
match ret_ty {
|
||||
Some(ty) => hir::FnRetTy::Return(self.lower_ty(
|
||||
&ty,
|
||||
&mut ImplTraitContext::Disallowed(ImplTraitPosition::AsyncBlock),
|
||||
)),
|
||||
None => hir::FnRetTy::DefaultReturn(self.lower_span(span)),
|
||||
};
|
||||
|
||||
// Resume argument type. We let the compiler infer this to simplify the lowering. It is
|
||||
// fully constrained by `future::from_generator`.
|
||||
@ -1123,7 +1125,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
|
||||
qself,
|
||||
path,
|
||||
ParamMode::Optional,
|
||||
ImplTraitContext::Disallowed(ImplTraitPosition::Path),
|
||||
&mut ImplTraitContext::Disallowed(ImplTraitPosition::Path),
|
||||
);
|
||||
// Destructure like a tuple struct.
|
||||
let tuple_struct_pat =
|
||||
@ -1139,7 +1141,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
|
||||
qself,
|
||||
path,
|
||||
ParamMode::Optional,
|
||||
ImplTraitContext::Disallowed(ImplTraitPosition::Path),
|
||||
&mut ImplTraitContext::Disallowed(ImplTraitPosition::Path),
|
||||
);
|
||||
// Destructure like a unit struct.
|
||||
let unit_struct_pat = hir::PatKind::Path(qpath);
|
||||
@ -1163,7 +1165,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
|
||||
&se.qself,
|
||||
&se.path,
|
||||
ParamMode::Optional,
|
||||
ImplTraitContext::Disallowed(ImplTraitPosition::Path),
|
||||
&mut ImplTraitContext::Disallowed(ImplTraitPosition::Path),
|
||||
);
|
||||
let fields_omitted = match &se.rest {
|
||||
StructRest::Base(e) => {
|
||||
|
@ -264,8 +264,8 @@ impl<'hir> LoweringContext<'_, 'hir> {
|
||||
let body_id =
|
||||
this.lower_maybe_async_body(span, &decl, asyncness, body.as_deref());
|
||||
|
||||
let itctx = ImplTraitContext::Universal;
|
||||
let (generics, decl) = this.lower_generics(generics, id, itctx, |this| {
|
||||
let mut itctx = ImplTraitContext::Universal;
|
||||
let (generics, decl) = this.lower_generics(generics, id, &mut itctx, |this| {
|
||||
let ret_id = asyncness.opt_return_id();
|
||||
this.lower_fn_decl(&decl, Some(id), FnDeclKind::Fn, ret_id)
|
||||
});
|
||||
@ -311,8 +311,8 @@ impl<'hir> LoweringContext<'_, 'hir> {
|
||||
let (generics, ty) = self.lower_generics(
|
||||
&generics,
|
||||
id,
|
||||
ImplTraitContext::Disallowed(ImplTraitPosition::Generic),
|
||||
|this| this.lower_ty(ty, ImplTraitContext::TypeAliasesOpaqueTy),
|
||||
&mut ImplTraitContext::Disallowed(ImplTraitPosition::Generic),
|
||||
|this| this.lower_ty(ty, &mut ImplTraitContext::TypeAliasesOpaqueTy),
|
||||
);
|
||||
hir::ItemKind::TyAlias(ty, generics)
|
||||
}
|
||||
@ -324,7 +324,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
|
||||
let (generics, ty) = self.lower_generics(
|
||||
&generics,
|
||||
id,
|
||||
ImplTraitContext::Disallowed(ImplTraitPosition::Generic),
|
||||
&mut ImplTraitContext::Disallowed(ImplTraitPosition::Generic),
|
||||
|this| this.arena.alloc(this.ty(span, hir::TyKind::Err)),
|
||||
);
|
||||
hir::ItemKind::TyAlias(ty, generics)
|
||||
@ -333,7 +333,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
|
||||
let (generics, variants) = self.lower_generics(
|
||||
generics,
|
||||
id,
|
||||
ImplTraitContext::Disallowed(ImplTraitPosition::Generic),
|
||||
&mut ImplTraitContext::Disallowed(ImplTraitPosition::Generic),
|
||||
|this| {
|
||||
this.arena.alloc_from_iter(
|
||||
enum_definition.variants.iter().map(|x| this.lower_variant(x)),
|
||||
@ -346,7 +346,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
|
||||
let (generics, struct_def) = self.lower_generics(
|
||||
generics,
|
||||
id,
|
||||
ImplTraitContext::Disallowed(ImplTraitPosition::Generic),
|
||||
&mut ImplTraitContext::Disallowed(ImplTraitPosition::Generic),
|
||||
|this| this.lower_variant_data(hir_id, struct_def),
|
||||
);
|
||||
hir::ItemKind::Struct(struct_def, generics)
|
||||
@ -355,7 +355,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
|
||||
let (generics, vdata) = self.lower_generics(
|
||||
generics,
|
||||
id,
|
||||
ImplTraitContext::Disallowed(ImplTraitPosition::Generic),
|
||||
&mut ImplTraitContext::Disallowed(ImplTraitPosition::Generic),
|
||||
|this| this.lower_variant_data(hir_id, vdata),
|
||||
);
|
||||
hir::ItemKind::Union(vdata, generics)
|
||||
@ -383,18 +383,20 @@ impl<'hir> LoweringContext<'_, 'hir> {
|
||||
// method, it will not be considered an in-band
|
||||
// lifetime to be added, but rather a reference to a
|
||||
// parent lifetime.
|
||||
let itctx = ImplTraitContext::Universal;
|
||||
let mut itctx = ImplTraitContext::Universal;
|
||||
let (generics, (trait_ref, lowered_ty)) =
|
||||
self.lower_generics(ast_generics, id, itctx, |this| {
|
||||
self.lower_generics(ast_generics, id, &mut itctx, |this| {
|
||||
let trait_ref = trait_ref.as_ref().map(|trait_ref| {
|
||||
this.lower_trait_ref(
|
||||
trait_ref,
|
||||
ImplTraitContext::Disallowed(ImplTraitPosition::Trait),
|
||||
&mut ImplTraitContext::Disallowed(ImplTraitPosition::Trait),
|
||||
)
|
||||
});
|
||||
|
||||
let lowered_ty = this
|
||||
.lower_ty(ty, ImplTraitContext::Disallowed(ImplTraitPosition::Type));
|
||||
let lowered_ty = this.lower_ty(
|
||||
ty,
|
||||
&mut ImplTraitContext::Disallowed(ImplTraitPosition::Type),
|
||||
);
|
||||
|
||||
(trait_ref, lowered_ty)
|
||||
});
|
||||
@ -433,11 +435,11 @@ impl<'hir> LoweringContext<'_, 'hir> {
|
||||
let (generics, (unsafety, items, bounds)) = self.lower_generics(
|
||||
generics,
|
||||
id,
|
||||
ImplTraitContext::Disallowed(ImplTraitPosition::Generic),
|
||||
&mut ImplTraitContext::Disallowed(ImplTraitPosition::Generic),
|
||||
|this| {
|
||||
let bounds = this.lower_param_bounds(
|
||||
bounds,
|
||||
ImplTraitContext::Disallowed(ImplTraitPosition::Bound),
|
||||
&mut ImplTraitContext::Disallowed(ImplTraitPosition::Bound),
|
||||
);
|
||||
let items = this.arena.alloc_from_iter(
|
||||
items.iter().map(|item| this.lower_trait_item_ref(item)),
|
||||
@ -452,11 +454,11 @@ impl<'hir> LoweringContext<'_, 'hir> {
|
||||
let (generics, bounds) = self.lower_generics(
|
||||
generics,
|
||||
id,
|
||||
ImplTraitContext::Disallowed(ImplTraitPosition::Generic),
|
||||
&mut ImplTraitContext::Disallowed(ImplTraitPosition::Generic),
|
||||
|this| {
|
||||
this.lower_param_bounds(
|
||||
bounds,
|
||||
ImplTraitContext::Disallowed(ImplTraitPosition::Bound),
|
||||
&mut ImplTraitContext::Disallowed(ImplTraitPosition::Bound),
|
||||
)
|
||||
},
|
||||
);
|
||||
@ -479,7 +481,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
|
||||
span: Span,
|
||||
body: Option<&Expr>,
|
||||
) -> (&'hir hir::Ty<'hir>, hir::BodyId) {
|
||||
let ty = self.lower_ty(ty, ImplTraitContext::Disallowed(ImplTraitPosition::Type));
|
||||
let ty = self.lower_ty(ty, &mut ImplTraitContext::Disallowed(ImplTraitPosition::Type));
|
||||
(ty, self.lower_const_body(span, body))
|
||||
}
|
||||
|
||||
@ -652,9 +654,9 @@ impl<'hir> LoweringContext<'_, 'hir> {
|
||||
kind: match i.kind {
|
||||
ForeignItemKind::Fn(box Fn { ref sig, ref generics, .. }) => {
|
||||
let fdec = &sig.decl;
|
||||
let itctx = ImplTraitContext::Universal;
|
||||
let mut itctx = ImplTraitContext::Universal;
|
||||
let (generics, (fn_dec, fn_args)) =
|
||||
self.lower_generics(generics, i.id, itctx, |this| {
|
||||
self.lower_generics(generics, i.id, &mut itctx, |this| {
|
||||
(
|
||||
// Disallow `impl Trait` in foreign items.
|
||||
this.lower_fn_decl(fdec, None, FnDeclKind::ExternFn, None),
|
||||
@ -665,8 +667,8 @@ impl<'hir> LoweringContext<'_, 'hir> {
|
||||
hir::ForeignItemKind::Fn(fn_dec, fn_args, generics)
|
||||
}
|
||||
ForeignItemKind::Static(ref t, m, _) => {
|
||||
let ty =
|
||||
self.lower_ty(t, ImplTraitContext::Disallowed(ImplTraitPosition::Type));
|
||||
let ty = self
|
||||
.lower_ty(t, &mut ImplTraitContext::Disallowed(ImplTraitPosition::Type));
|
||||
hir::ForeignItemKind::Static(ty, m)
|
||||
}
|
||||
ForeignItemKind::TyAlias(..) => hir::ForeignItemKind::Type,
|
||||
@ -734,11 +736,11 @@ impl<'hir> LoweringContext<'_, 'hir> {
|
||||
qself,
|
||||
path,
|
||||
ParamMode::ExplicitNamed, // no `'_` in declarations (Issue #61124)
|
||||
ImplTraitContext::Disallowed(ImplTraitPosition::Path),
|
||||
&mut ImplTraitContext::Disallowed(ImplTraitPosition::Path),
|
||||
);
|
||||
self.arena.alloc(t)
|
||||
} else {
|
||||
self.lower_ty(&f.ty, ImplTraitContext::Disallowed(ImplTraitPosition::Type))
|
||||
self.lower_ty(&f.ty, &mut ImplTraitContext::Disallowed(ImplTraitPosition::Type))
|
||||
};
|
||||
let hir_id = self.lower_node_id(f.id);
|
||||
self.lower_attrs(hir_id, &f.attrs);
|
||||
@ -761,7 +763,8 @@ impl<'hir> LoweringContext<'_, 'hir> {
|
||||
|
||||
let (generics, kind, has_default) = match i.kind {
|
||||
AssocItemKind::Const(_, ref ty, ref default) => {
|
||||
let ty = self.lower_ty(ty, ImplTraitContext::Disallowed(ImplTraitPosition::Type));
|
||||
let ty =
|
||||
self.lower_ty(ty, &mut ImplTraitContext::Disallowed(ImplTraitPosition::Type));
|
||||
let body = default.as_ref().map(|x| self.lower_const_body(i.span, Some(x)));
|
||||
(hir::Generics::empty(), hir::TraitItemKind::Const(ty, body), body.is_some())
|
||||
}
|
||||
@ -796,15 +799,18 @@ impl<'hir> LoweringContext<'_, 'hir> {
|
||||
let (generics, kind) = self.lower_generics(
|
||||
&generics,
|
||||
i.id,
|
||||
ImplTraitContext::Disallowed(ImplTraitPosition::Generic),
|
||||
&mut ImplTraitContext::Disallowed(ImplTraitPosition::Generic),
|
||||
|this| {
|
||||
let ty = ty.as_ref().map(|x| {
|
||||
this.lower_ty(x, ImplTraitContext::Disallowed(ImplTraitPosition::Type))
|
||||
this.lower_ty(
|
||||
x,
|
||||
&mut ImplTraitContext::Disallowed(ImplTraitPosition::Type),
|
||||
)
|
||||
});
|
||||
hir::TraitItemKind::Type(
|
||||
this.lower_param_bounds(
|
||||
bounds,
|
||||
ImplTraitContext::Disallowed(ImplTraitPosition::Generic),
|
||||
&mut ImplTraitContext::Disallowed(ImplTraitPosition::Generic),
|
||||
),
|
||||
ty,
|
||||
)
|
||||
@ -857,7 +863,8 @@ impl<'hir> LoweringContext<'_, 'hir> {
|
||||
|
||||
let (generics, kind) = match &i.kind {
|
||||
AssocItemKind::Const(_, ty, expr) => {
|
||||
let ty = self.lower_ty(ty, ImplTraitContext::Disallowed(ImplTraitPosition::Type));
|
||||
let ty =
|
||||
self.lower_ty(ty, &mut ImplTraitContext::Disallowed(ImplTraitPosition::Type));
|
||||
(
|
||||
hir::Generics::empty(),
|
||||
hir::ImplItemKind::Const(ty, self.lower_const_body(i.span, expr.as_deref())),
|
||||
@ -884,14 +891,14 @@ impl<'hir> LoweringContext<'_, 'hir> {
|
||||
self.lower_generics(
|
||||
&generics,
|
||||
i.id,
|
||||
ImplTraitContext::Disallowed(ImplTraitPosition::Generic),
|
||||
&mut ImplTraitContext::Disallowed(ImplTraitPosition::Generic),
|
||||
|this| match ty {
|
||||
None => {
|
||||
let ty = this.arena.alloc(this.ty(i.span, hir::TyKind::Err));
|
||||
hir::ImplItemKind::TyAlias(ty)
|
||||
}
|
||||
Some(ty) => {
|
||||
let ty = this.lower_ty(ty, ImplTraitContext::TypeAliasesOpaqueTy);
|
||||
let ty = this.lower_ty(ty, &mut ImplTraitContext::TypeAliasesOpaqueTy);
|
||||
hir::ImplItemKind::TyAlias(ty)
|
||||
}
|
||||
},
|
||||
@ -1234,8 +1241,8 @@ impl<'hir> LoweringContext<'_, 'hir> {
|
||||
is_async: Option<NodeId>,
|
||||
) -> (&'hir hir::Generics<'hir>, hir::FnSig<'hir>) {
|
||||
let header = self.lower_fn_header(sig.header);
|
||||
let itctx = ImplTraitContext::Universal;
|
||||
let (generics, decl) = self.lower_generics(generics, id, itctx, |this| {
|
||||
let mut itctx = ImplTraitContext::Universal;
|
||||
let (generics, decl) = self.lower_generics(generics, id, &mut itctx, |this| {
|
||||
this.lower_fn_decl(&sig.decl, Some(id), kind, is_async)
|
||||
});
|
||||
(generics, hir::FnSig { header, decl, span: self.lower_span(sig.span) })
|
||||
@ -1301,7 +1308,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
|
||||
&mut self,
|
||||
generics: &Generics,
|
||||
parent_node_id: NodeId,
|
||||
itctx: ImplTraitContext,
|
||||
itctx: &mut ImplTraitContext,
|
||||
f: impl FnOnce(&mut Self) -> T,
|
||||
) -> (&'hir hir::Generics<'hir>, T) {
|
||||
debug_assert!(self.impl_trait_defs.is_empty());
|
||||
@ -1406,7 +1413,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
|
||||
id: NodeId,
|
||||
kind: &GenericParamKind,
|
||||
bounds: &[GenericBound],
|
||||
itctx: ImplTraitContext,
|
||||
itctx: &mut ImplTraitContext,
|
||||
origin: PredicateOrigin,
|
||||
) -> Option<hir::WherePredicate<'hir>> {
|
||||
// Do not create a clause if we do not have anything inside it.
|
||||
@ -1481,12 +1488,14 @@ impl<'hir> LoweringContext<'_, 'hir> {
|
||||
span,
|
||||
}) => hir::WherePredicate::BoundPredicate(hir::WhereBoundPredicate {
|
||||
bound_generic_params: self.lower_generic_params(bound_generic_params),
|
||||
bounded_ty: self
|
||||
.lower_ty(bounded_ty, ImplTraitContext::Disallowed(ImplTraitPosition::Type)),
|
||||
bounded_ty: self.lower_ty(
|
||||
bounded_ty,
|
||||
&mut ImplTraitContext::Disallowed(ImplTraitPosition::Type),
|
||||
),
|
||||
bounds: self.arena.alloc_from_iter(bounds.iter().map(|bound| {
|
||||
self.lower_param_bound(
|
||||
bound,
|
||||
ImplTraitContext::Disallowed(ImplTraitPosition::Bound),
|
||||
&mut ImplTraitContext::Disallowed(ImplTraitPosition::Bound),
|
||||
)
|
||||
})),
|
||||
span: self.lower_span(span),
|
||||
@ -1501,16 +1510,20 @@ impl<'hir> LoweringContext<'_, 'hir> {
|
||||
lifetime: self.lower_lifetime(lifetime),
|
||||
bounds: self.lower_param_bounds(
|
||||
bounds,
|
||||
ImplTraitContext::Disallowed(ImplTraitPosition::Bound),
|
||||
&mut ImplTraitContext::Disallowed(ImplTraitPosition::Bound),
|
||||
),
|
||||
in_where_clause: true,
|
||||
}),
|
||||
WherePredicate::EqPredicate(WhereEqPredicate { ref lhs_ty, ref rhs_ty, span }) => {
|
||||
hir::WherePredicate::EqPredicate(hir::WhereEqPredicate {
|
||||
lhs_ty: self
|
||||
.lower_ty(lhs_ty, ImplTraitContext::Disallowed(ImplTraitPosition::Type)),
|
||||
rhs_ty: self
|
||||
.lower_ty(rhs_ty, ImplTraitContext::Disallowed(ImplTraitPosition::Type)),
|
||||
lhs_ty: self.lower_ty(
|
||||
lhs_ty,
|
||||
&mut ImplTraitContext::Disallowed(ImplTraitPosition::Type),
|
||||
),
|
||||
rhs_ty: self.lower_ty(
|
||||
rhs_ty,
|
||||
&mut ImplTraitContext::Disallowed(ImplTraitPosition::Type),
|
||||
),
|
||||
span: self.lower_span(span),
|
||||
})
|
||||
}
|
||||
|
@ -660,6 +660,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
|
||||
/// actually used in the HIR, as that would trigger an assertion in the
|
||||
/// `HirIdValidator` later on, which makes sure that all `NodeId`s got mapped
|
||||
/// properly. Calling the method twice with the same `NodeId` is fine though.
|
||||
#[instrument(level = "debug", skip(self), ret)]
|
||||
fn lower_node_id(&mut self, ast_node_id: NodeId) -> hir::HirId {
|
||||
assert_ne!(ast_node_id, DUMMY_NODE_ID);
|
||||
|
||||
@ -693,6 +694,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
|
||||
}
|
||||
|
||||
/// Generate a new `HirId` without a backing `NodeId`.
|
||||
#[instrument(level = "debug", skip(self), ret)]
|
||||
fn next_id(&mut self) -> hir::HirId {
|
||||
let owner = self.current_hir_id_owner;
|
||||
let local_id = self.item_local_id_counter;
|
||||
@ -953,7 +955,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
|
||||
fn lower_assoc_ty_constraint(
|
||||
&mut self,
|
||||
constraint: &AssocConstraint,
|
||||
itctx: ImplTraitContext,
|
||||
itctx: &mut ImplTraitContext,
|
||||
) -> hir::TypeBinding<'hir> {
|
||||
debug!("lower_assoc_ty_constraint(constraint={:?}, itctx={:?})", constraint, itctx);
|
||||
// lower generic arguments of identifier in constraint
|
||||
@ -976,6 +978,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
|
||||
} else {
|
||||
self.arena.alloc(hir::GenericArgs::none())
|
||||
};
|
||||
let mut itctx_tait = ImplTraitContext::TypeAliasesOpaqueTy;
|
||||
|
||||
let kind = match constraint.kind {
|
||||
AssocConstraintKind::Equality { ref term } => {
|
||||
@ -1014,7 +1017,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
|
||||
//
|
||||
// FIXME: this is only needed until `impl Trait` is allowed in type aliases.
|
||||
ImplTraitContext::Disallowed(_) if self.is_in_dyn_type => {
|
||||
(true, ImplTraitContext::TypeAliasesOpaqueTy)
|
||||
(true, &mut itctx_tait)
|
||||
}
|
||||
|
||||
// We are in the parameter position, but not within a dyn type:
|
||||
@ -1096,7 +1099,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
|
||||
fn lower_generic_arg(
|
||||
&mut self,
|
||||
arg: &ast::GenericArg,
|
||||
itctx: ImplTraitContext,
|
||||
itctx: &mut ImplTraitContext,
|
||||
) -> hir::GenericArg<'hir> {
|
||||
match arg {
|
||||
ast::GenericArg::Lifetime(lt) => GenericArg::Lifetime(self.lower_lifetime(<)),
|
||||
@ -1158,7 +1161,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
|
||||
}
|
||||
|
||||
#[instrument(level = "debug", skip(self))]
|
||||
fn lower_ty(&mut self, t: &Ty, itctx: ImplTraitContext) -> &'hir hir::Ty<'hir> {
|
||||
fn lower_ty(&mut self, t: &Ty, itctx: &mut ImplTraitContext) -> &'hir hir::Ty<'hir> {
|
||||
self.arena.alloc(self.lower_ty_direct(t, itctx))
|
||||
}
|
||||
|
||||
@ -1168,7 +1171,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
|
||||
qself: &Option<QSelf>,
|
||||
path: &Path,
|
||||
param_mode: ParamMode,
|
||||
itctx: ImplTraitContext,
|
||||
itctx: &mut ImplTraitContext,
|
||||
) -> hir::Ty<'hir> {
|
||||
// Check whether we should interpret this as a bare trait object.
|
||||
// This check mirrors the one in late resolution. We only introduce this special case in
|
||||
@ -1210,7 +1213,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
|
||||
self.ty(span, hir::TyKind::Tup(tys))
|
||||
}
|
||||
|
||||
fn lower_ty_direct(&mut self, t: &Ty, itctx: ImplTraitContext) -> hir::Ty<'hir> {
|
||||
fn lower_ty_direct(&mut self, t: &Ty, itctx: &mut ImplTraitContext) -> hir::Ty<'hir> {
|
||||
let kind = match t.kind {
|
||||
TyKind::Infer => hir::TyKind::Infer,
|
||||
TyKind::Err => hir::TyKind::Err,
|
||||
@ -1307,16 +1310,16 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
|
||||
let span = t.span;
|
||||
match itctx {
|
||||
ImplTraitContext::ReturnPositionOpaqueTy { origin } => {
|
||||
self.lower_opaque_impl_trait(span, origin, def_node_id, bounds, itctx)
|
||||
self.lower_opaque_impl_trait(span, *origin, def_node_id, bounds, itctx)
|
||||
}
|
||||
ImplTraitContext::TypeAliasesOpaqueTy => {
|
||||
let nested_itctx = ImplTraitContext::TypeAliasesOpaqueTy;
|
||||
let mut nested_itctx = ImplTraitContext::TypeAliasesOpaqueTy;
|
||||
self.lower_opaque_impl_trait(
|
||||
span,
|
||||
hir::OpaqueTyOrigin::TyAlias,
|
||||
def_node_id,
|
||||
bounds,
|
||||
nested_itctx,
|
||||
&mut nested_itctx,
|
||||
)
|
||||
}
|
||||
ImplTraitContext::Universal => {
|
||||
@ -1381,14 +1384,14 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
|
||||
/// added explicitly in the HIR). But this includes all the lifetimes, and we only want to
|
||||
/// capture the lifetimes that are referenced in the bounds. Therefore, we add *extra* lifetime parameters
|
||||
/// for the lifetimes that get captured (`'x`, in our example above) and reference those.
|
||||
#[instrument(level = "debug", skip(self))]
|
||||
#[instrument(level = "debug", skip(self), ret)]
|
||||
fn lower_opaque_impl_trait(
|
||||
&mut self,
|
||||
span: Span,
|
||||
origin: hir::OpaqueTyOrigin,
|
||||
opaque_ty_node_id: NodeId,
|
||||
bounds: &GenericBounds,
|
||||
itctx: ImplTraitContext,
|
||||
itctx: &mut ImplTraitContext,
|
||||
) -> hir::TyKind<'hir> {
|
||||
// Make sure we know that some funky desugaring has been going on here.
|
||||
// This is a first: there is code in other places like for loop
|
||||
@ -1635,11 +1638,11 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
|
||||
}
|
||||
let inputs = self.arena.alloc_from_iter(inputs.iter().map(|param| {
|
||||
if fn_node_id.is_some() {
|
||||
self.lower_ty_direct(¶m.ty, ImplTraitContext::Universal)
|
||||
self.lower_ty_direct(¶m.ty, &mut ImplTraitContext::Universal)
|
||||
} else {
|
||||
self.lower_ty_direct(
|
||||
¶m.ty,
|
||||
ImplTraitContext::Disallowed(match kind {
|
||||
&mut ImplTraitContext::Disallowed(match kind {
|
||||
FnDeclKind::Fn | FnDeclKind::Inherent => {
|
||||
unreachable!("fn should allow in-band lifetimes")
|
||||
}
|
||||
@ -1662,7 +1665,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
|
||||
} else {
|
||||
match decl.output {
|
||||
FnRetTy::Ty(ref ty) => {
|
||||
let context = match fn_node_id {
|
||||
let mut context = match fn_node_id {
|
||||
Some(fn_node_id) if kind.impl_trait_return_allowed() => {
|
||||
let fn_def_id = self.local_def_id(fn_node_id);
|
||||
ImplTraitContext::ReturnPositionOpaqueTy {
|
||||
@ -1680,7 +1683,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
|
||||
FnDeclKind::Impl => ImplTraitPosition::ImplReturn,
|
||||
}),
|
||||
};
|
||||
hir::FnRetTy::Return(self.lower_ty(ty, context))
|
||||
hir::FnRetTy::Return(self.lower_ty(ty, &mut context))
|
||||
}
|
||||
FnRetTy::Default(span) => hir::FnRetTy::DefaultReturn(self.lower_span(span)),
|
||||
}
|
||||
@ -1959,10 +1962,10 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
|
||||
// Not `OpaqueTyOrigin::AsyncFn`: that's only used for the
|
||||
// `impl Future` opaque type that `async fn` implicitly
|
||||
// generates.
|
||||
let context = ImplTraitContext::ReturnPositionOpaqueTy {
|
||||
let mut context = ImplTraitContext::ReturnPositionOpaqueTy {
|
||||
origin: hir::OpaqueTyOrigin::FnReturn(fn_def_id),
|
||||
};
|
||||
self.lower_ty(ty, context)
|
||||
self.lower_ty(ty, &mut context)
|
||||
}
|
||||
FnRetTy::Default(ret_ty_span) => self.arena.alloc(self.ty_tup(*ret_ty_span, &[])),
|
||||
};
|
||||
@ -1988,7 +1991,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
|
||||
fn lower_param_bound(
|
||||
&mut self,
|
||||
tpb: &GenericBound,
|
||||
itctx: ImplTraitContext,
|
||||
itctx: &mut ImplTraitContext,
|
||||
) -> hir::GenericBound<'hir> {
|
||||
match tpb {
|
||||
GenericBound::Trait(p, modifier) => hir::GenericBound::Trait(
|
||||
@ -2100,7 +2103,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
|
||||
GenericParamKind::Type { ref default, .. } => {
|
||||
let kind = hir::GenericParamKind::Type {
|
||||
default: default.as_ref().map(|x| {
|
||||
self.lower_ty(x, ImplTraitContext::Disallowed(ImplTraitPosition::Type))
|
||||
self.lower_ty(x, &mut ImplTraitContext::Disallowed(ImplTraitPosition::Type))
|
||||
}),
|
||||
synthetic: false,
|
||||
};
|
||||
@ -2108,7 +2111,8 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
|
||||
(hir::ParamName::Plain(self.lower_ident(param.ident)), kind)
|
||||
}
|
||||
GenericParamKind::Const { ref ty, kw_span: _, ref default } => {
|
||||
let ty = self.lower_ty(&ty, ImplTraitContext::Disallowed(ImplTraitPosition::Type));
|
||||
let ty =
|
||||
self.lower_ty(&ty, &mut ImplTraitContext::Disallowed(ImplTraitPosition::Type));
|
||||
let default = default.as_ref().map(|def| self.lower_anon_const(def));
|
||||
(
|
||||
hir::ParamName::Plain(self.lower_ident(param.ident)),
|
||||
@ -2118,7 +2122,11 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
|
||||
}
|
||||
}
|
||||
|
||||
fn lower_trait_ref(&mut self, p: &TraitRef, itctx: ImplTraitContext) -> hir::TraitRef<'hir> {
|
||||
fn lower_trait_ref(
|
||||
&mut self,
|
||||
p: &TraitRef,
|
||||
itctx: &mut ImplTraitContext,
|
||||
) -> hir::TraitRef<'hir> {
|
||||
let path = match self.lower_qpath(p.ref_id, &None, &p.path, ParamMode::Explicit, itctx) {
|
||||
hir::QPath::Resolved(None, path) => path,
|
||||
qpath => panic!("lower_trait_ref: unexpected QPath `{:?}`", qpath),
|
||||
@ -2130,7 +2138,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
|
||||
fn lower_poly_trait_ref(
|
||||
&mut self,
|
||||
p: &PolyTraitRef,
|
||||
itctx: ImplTraitContext,
|
||||
itctx: &mut ImplTraitContext,
|
||||
) -> hir::PolyTraitRef<'hir> {
|
||||
let bound_generic_params =
|
||||
self.lower_lifetime_binder(p.trait_ref.ref_id, &p.bound_generic_params);
|
||||
@ -2138,26 +2146,29 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
|
||||
hir::PolyTraitRef { bound_generic_params, trait_ref, span: self.lower_span(p.span) }
|
||||
}
|
||||
|
||||
fn lower_mt(&mut self, mt: &MutTy, itctx: ImplTraitContext) -> hir::MutTy<'hir> {
|
||||
fn lower_mt(&mut self, mt: &MutTy, itctx: &mut ImplTraitContext) -> hir::MutTy<'hir> {
|
||||
hir::MutTy { ty: self.lower_ty(&mt.ty, itctx), mutbl: mt.mutbl }
|
||||
}
|
||||
|
||||
#[instrument(level = "debug", skip(self), ret)]
|
||||
fn lower_param_bounds(
|
||||
&mut self,
|
||||
bounds: &[GenericBound],
|
||||
itctx: ImplTraitContext,
|
||||
itctx: &mut ImplTraitContext,
|
||||
) -> hir::GenericBounds<'hir> {
|
||||
self.arena.alloc_from_iter(self.lower_param_bounds_mut(bounds, itctx))
|
||||
}
|
||||
|
||||
fn lower_param_bounds_mut<'s>(
|
||||
fn lower_param_bounds_mut<'s, 'b>(
|
||||
&'s mut self,
|
||||
bounds: &'s [GenericBound],
|
||||
itctx: ImplTraitContext,
|
||||
) -> impl Iterator<Item = hir::GenericBound<'hir>> + Captures<'s> + Captures<'a> {
|
||||
itctx: &'b mut ImplTraitContext,
|
||||
) -> impl Iterator<Item = hir::GenericBound<'hir>> + Captures<'s> + Captures<'a> + Captures<'b>
|
||||
{
|
||||
bounds.iter().map(move |bound| self.lower_param_bound(bound, itctx))
|
||||
}
|
||||
|
||||
#[instrument(level = "debug", skip(self), ret)]
|
||||
fn lower_generic_and_bounds(
|
||||
&mut self,
|
||||
node_id: NodeId,
|
||||
@ -2183,7 +2194,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
|
||||
node_id,
|
||||
&GenericParamKind::Type { default: None },
|
||||
bounds,
|
||||
ImplTraitContext::Universal,
|
||||
&mut ImplTraitContext::Universal,
|
||||
hir::PredicateOrigin::ImplTrait,
|
||||
);
|
||||
|
||||
|
@ -37,7 +37,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
|
||||
qself,
|
||||
path,
|
||||
ParamMode::Optional,
|
||||
ImplTraitContext::Disallowed(ImplTraitPosition::Path),
|
||||
&mut ImplTraitContext::Disallowed(ImplTraitPosition::Path),
|
||||
);
|
||||
let (pats, ddpos) = self.lower_pat_tuple(pats, "tuple struct");
|
||||
break hir::PatKind::TupleStruct(qpath, pats, ddpos);
|
||||
@ -53,7 +53,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
|
||||
qself,
|
||||
path,
|
||||
ParamMode::Optional,
|
||||
ImplTraitContext::Disallowed(ImplTraitPosition::Path),
|
||||
&mut ImplTraitContext::Disallowed(ImplTraitPosition::Path),
|
||||
);
|
||||
break hir::PatKind::Path(qpath);
|
||||
}
|
||||
@ -63,7 +63,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
|
||||
qself,
|
||||
path,
|
||||
ParamMode::Optional,
|
||||
ImplTraitContext::Disallowed(ImplTraitPosition::Path),
|
||||
&mut ImplTraitContext::Disallowed(ImplTraitPosition::Path),
|
||||
);
|
||||
|
||||
let fs = self.arena.alloc_from_iter(fields.iter().map(|f| {
|
||||
|
@ -22,7 +22,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
|
||||
qself: &Option<QSelf>,
|
||||
p: &Path,
|
||||
param_mode: ParamMode,
|
||||
itctx: ImplTraitContext,
|
||||
itctx: &mut ImplTraitContext,
|
||||
) -> hir::QPath<'hir> {
|
||||
let qself_position = qself.as_ref().map(|q| q.position);
|
||||
let qself = qself.as_ref().map(|q| self.lower_ty(&q.ty, itctx));
|
||||
@ -156,7 +156,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
|
||||
segment,
|
||||
param_mode,
|
||||
ParenthesizedGenericArgs::Err,
|
||||
ImplTraitContext::Disallowed(ImplTraitPosition::Path),
|
||||
&mut ImplTraitContext::Disallowed(ImplTraitPosition::Path),
|
||||
)
|
||||
})),
|
||||
span: self.lower_span(p.span),
|
||||
@ -180,7 +180,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
|
||||
segment: &PathSegment,
|
||||
param_mode: ParamMode,
|
||||
parenthesized_generic_args: ParenthesizedGenericArgs,
|
||||
itctx: ImplTraitContext,
|
||||
itctx: &mut ImplTraitContext,
|
||||
) -> hir::PathSegment<'hir> {
|
||||
debug!("path_span: {:?}, lower_path_segment(segment: {:?})", path_span, segment,);
|
||||
let (mut generic_args, infer_args) = if let Some(ref generic_args) = segment.args {
|
||||
@ -316,7 +316,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
|
||||
&mut self,
|
||||
data: &AngleBracketedArgs,
|
||||
param_mode: ParamMode,
|
||||
itctx: ImplTraitContext,
|
||||
itctx: &mut ImplTraitContext,
|
||||
) -> (GenericArgsCtor<'hir>, bool) {
|
||||
let has_non_lt_args = data.args.iter().any(|arg| match arg {
|
||||
AngleBracketedArg::Arg(ast::GenericArg::Lifetime(_))
|
||||
@ -350,12 +350,14 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
|
||||
// we generally don't permit such things (see #51008).
|
||||
let ParenthesizedArgs { span, inputs, inputs_span, output } = data;
|
||||
let inputs = self.arena.alloc_from_iter(inputs.iter().map(|ty| {
|
||||
self.lower_ty_direct(ty, ImplTraitContext::Disallowed(ImplTraitPosition::FnTraitParam))
|
||||
self.lower_ty_direct(
|
||||
ty,
|
||||
&mut ImplTraitContext::Disallowed(ImplTraitPosition::FnTraitParam),
|
||||
)
|
||||
}));
|
||||
let output_ty = match output {
|
||||
FnRetTy::Ty(ty) => {
|
||||
self.lower_ty(&ty, ImplTraitContext::Disallowed(ImplTraitPosition::FnTraitReturn))
|
||||
}
|
||||
FnRetTy::Ty(ty) => self
|
||||
.lower_ty(&ty, &mut ImplTraitContext::Disallowed(ImplTraitPosition::FnTraitReturn)),
|
||||
FnRetTy::Default(_) => self.arena.alloc(self.ty_tup(*span, &[])),
|
||||
};
|
||||
let args = smallvec![GenericArg::Type(self.arena.alloc(self.ty_tup(*inputs_span, inputs)))];
|
||||
|
@ -50,13 +50,13 @@ impl<'cx, 'tcx> VerifyBoundCx<'cx, 'tcx> {
|
||||
}
|
||||
}
|
||||
|
||||
#[instrument(level = "debug", skip(self))]
|
||||
fn param_bound(&self, param_ty: ty::ParamTy) -> VerifyBound<'tcx> {
|
||||
debug!("param_bound(param_ty={:?})", param_ty);
|
||||
|
||||
// Start with anything like `T: 'a` we can scrape from the
|
||||
// environment. If the environment contains something like
|
||||
// `for<'a> T: 'a`, then we know that `T` outlives everything.
|
||||
let declared_bounds_from_env = self.declared_generic_bounds_from_env(param_ty);
|
||||
debug!(?declared_bounds_from_env);
|
||||
let mut param_bounds = vec![];
|
||||
for declared_bound in declared_bounds_from_env {
|
||||
let bound_region = declared_bound.map_bound(|outlives| outlives.1);
|
||||
@ -65,6 +65,7 @@ impl<'cx, 'tcx> VerifyBoundCx<'cx, 'tcx> {
|
||||
param_bounds.push(VerifyBound::OutlivedBy(region));
|
||||
} else {
|
||||
// This is `for<'a> T: 'a`. This means that `T` outlives everything! All done here.
|
||||
debug!("found that {param_ty:?} outlives any lifetime, returning empty vector");
|
||||
return VerifyBound::AllBounds(vec![]);
|
||||
}
|
||||
}
|
||||
@ -72,6 +73,7 @@ impl<'cx, 'tcx> VerifyBoundCx<'cx, 'tcx> {
|
||||
// Add in the default bound of fn body that applies to all in
|
||||
// scope type parameters:
|
||||
if let Some(r) = self.implicit_region_bound {
|
||||
debug!("adding implicit region bound of {r:?}");
|
||||
param_bounds.push(VerifyBound::OutlivedBy(r));
|
||||
}
|
||||
|
||||
|
@ -328,6 +328,7 @@ impl<'tcx> GenericPredicates<'tcx> {
|
||||
}
|
||||
}
|
||||
|
||||
#[instrument(level = "debug", skip(self, tcx))]
|
||||
fn instantiate_into(
|
||||
&self,
|
||||
tcx: TyCtxt<'tcx>,
|
||||
|
@ -103,7 +103,7 @@ fn run_passes_inner<'tcx>(
|
||||
let name = pass.name();
|
||||
|
||||
// Gather information about what we should be doing for this pass
|
||||
let overriden =
|
||||
let overridden =
|
||||
overridden_passes.iter().rev().find(|(s, _)| s == &*name).map(|(_name, polarity)| {
|
||||
trace!(
|
||||
pass = %name,
|
||||
@ -112,7 +112,7 @@ fn run_passes_inner<'tcx>(
|
||||
);
|
||||
*polarity
|
||||
});
|
||||
let is_enabled = overriden.unwrap_or_else(|| pass.is_enabled(&tcx.sess));
|
||||
let is_enabled = overridden.unwrap_or_else(|| pass.is_enabled(&tcx.sess));
|
||||
let new_phase = pass.phase_change();
|
||||
let dump_enabled = (is_enabled && pass.is_mir_dump_enabled()) || new_phase.is_some();
|
||||
let validate = (validate && is_enabled)
|
||||
|
@ -1977,6 +1977,9 @@ impl<'a> Parser<'a> {
|
||||
open_delim_span: Span,
|
||||
) -> PResult<'a, ()> {
|
||||
if self.token.kind == token::Comma {
|
||||
if !self.sess.source_map().is_multiline(prev_span.until(self.token.span)) {
|
||||
return Ok(());
|
||||
}
|
||||
let mut snapshot = self.create_snapshot_for_diagnostic();
|
||||
snapshot.bump();
|
||||
match snapshot.parse_seq_to_before_end(
|
||||
|
@ -103,7 +103,7 @@ impl<'a, 'hir> HirIdValidator<'a, 'hir> {
|
||||
self.error(|| {
|
||||
format!(
|
||||
"ItemLocalIds not assigned densely in {}. \
|
||||
Max ItemLocalId = {}, missing IDs = {:?}; seens IDs = {:?}",
|
||||
Max ItemLocalId = {}, missing IDs = {:#?}; seens IDs = {:#?}",
|
||||
self.hir_map.def_path(owner).to_string_no_crate_verbose(),
|
||||
max,
|
||||
missing_items,
|
||||
|
@ -525,6 +525,7 @@ impl<'a, 'tcx> Visitor<'tcx> for LifetimeContext<'a, 'tcx> {
|
||||
}
|
||||
}
|
||||
|
||||
#[instrument(level = "debug", skip(self))]
|
||||
fn visit_item(&mut self, item: &'tcx hir::Item<'tcx>) {
|
||||
match &item.kind {
|
||||
hir::ItemKind::Impl(hir::Impl { of_trait, .. }) => {
|
||||
@ -839,6 +840,7 @@ impl<'a, 'tcx> Visitor<'tcx> for LifetimeContext<'a, 'tcx> {
|
||||
}
|
||||
}
|
||||
|
||||
#[instrument(level = "debug", skip(self))]
|
||||
fn visit_trait_item(&mut self, trait_item: &'tcx hir::TraitItem<'tcx>) {
|
||||
use self::hir::TraitItemKind::*;
|
||||
match trait_item.kind {
|
||||
@ -888,6 +890,7 @@ impl<'a, 'tcx> Visitor<'tcx> for LifetimeContext<'a, 'tcx> {
|
||||
}
|
||||
}
|
||||
|
||||
#[instrument(level = "debug", skip(self))]
|
||||
fn visit_impl_item(&mut self, impl_item: &'tcx hir::ImplItem<'tcx>) {
|
||||
use self::hir::ImplItemKind::*;
|
||||
match impl_item.kind {
|
||||
|
@ -434,6 +434,7 @@ impl<'tcx> WfPredicates<'tcx> {
|
||||
}
|
||||
|
||||
/// Pushes all the predicates needed to validate that `ty` is WF into `out`.
|
||||
#[instrument(level = "debug", skip(self))]
|
||||
fn compute(&mut self, arg: GenericArg<'tcx>) {
|
||||
let mut walker = arg.walk();
|
||||
let param_env = self.param_env;
|
||||
@ -488,6 +489,8 @@ impl<'tcx> WfPredicates<'tcx> {
|
||||
}
|
||||
};
|
||||
|
||||
debug!("wf bounds for ty={:?} ty.kind={:#?}", ty, ty.kind());
|
||||
|
||||
match *ty.kind() {
|
||||
ty::Bool
|
||||
| ty::Char
|
||||
|
@ -2697,6 +2697,7 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o {
|
||||
result_ty
|
||||
}
|
||||
|
||||
#[instrument(level = "debug", skip(self), ret)]
|
||||
fn impl_trait_ty_to_ty(
|
||||
&self,
|
||||
def_id: DefId,
|
||||
@ -2745,9 +2746,7 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o {
|
||||
});
|
||||
debug!("impl_trait_ty_to_ty: substs={:?}", substs);
|
||||
|
||||
let ty = tcx.mk_opaque(def_id, substs);
|
||||
debug!("impl_trait_ty_to_ty: {}", ty);
|
||||
ty
|
||||
tcx.mk_opaque(def_id, substs)
|
||||
}
|
||||
|
||||
pub fn ty_of_arg(&self, ty: &hir::Ty<'_>, expected_ty: Option<Ty<'tcx>>) -> Ty<'tcx> {
|
||||
|
@ -573,6 +573,7 @@ fn get_new_lifetime_name<'tcx>(
|
||||
|
||||
/// Returns the predicates defined on `item_def_id` of the form
|
||||
/// `X: Foo` where `X` is the type parameter `def_id`.
|
||||
#[instrument(level = "trace", skip(tcx))]
|
||||
fn type_param_predicates(
|
||||
tcx: TyCtxt<'_>,
|
||||
(item_def_id, def_id, assoc_name): (DefId, LocalDefId, Ident),
|
||||
@ -679,7 +680,7 @@ impl<'tcx> ItemCtxt<'tcx> {
|
||||
assoc_name: Option<Ident>,
|
||||
) -> Vec<(ty::Predicate<'tcx>, Span)> {
|
||||
let param_def_id = self.tcx.hir().local_def_id(param_id).to_def_id();
|
||||
debug!(?param_def_id);
|
||||
trace!(?param_def_id);
|
||||
ast_generics
|
||||
.predicates
|
||||
.iter()
|
||||
@ -708,9 +709,8 @@ impl<'tcx> ItemCtxt<'tcx> {
|
||||
.collect()
|
||||
}
|
||||
|
||||
#[instrument(level = "trace", skip(self))]
|
||||
fn bound_defines_assoc_item(&self, b: &hir::GenericBound<'_>, assoc_name: Ident) -> bool {
|
||||
debug!("bound_defines_assoc_item(b={:?}, assoc_name={:?})", b, assoc_name);
|
||||
|
||||
match b {
|
||||
hir::GenericBound::Trait(poly_trait_ref, _) => {
|
||||
let trait_ref = &poly_trait_ref.trait_ref;
|
||||
@ -2105,11 +2105,10 @@ fn predicates_of(tcx: TyCtxt<'_>, def_id: DefId) -> ty::GenericPredicates<'_> {
|
||||
|
||||
/// Returns a list of user-specified type predicates for the definition with ID `def_id`.
|
||||
/// N.B., this does not include any implied/inferred constraints.
|
||||
#[instrument(level = "trace", skip(tcx), ret)]
|
||||
fn gather_explicit_predicates_of(tcx: TyCtxt<'_>, def_id: DefId) -> ty::GenericPredicates<'_> {
|
||||
use rustc_hir::*;
|
||||
|
||||
debug!("explicit_predicates_of(def_id={:?})", def_id);
|
||||
|
||||
let hir_id = tcx.hir().local_def_id_to_hir_id(def_id.expect_local());
|
||||
let node = tcx.hir().get(hir_id);
|
||||
|
||||
@ -2224,6 +2223,9 @@ fn gather_explicit_predicates_of(tcx: TyCtxt<'_>, def_id: DefId) -> ty::GenericP
|
||||
+ has_own_self as u32
|
||||
+ early_bound_lifetimes_from_generics(tcx, ast_generics).count() as u32;
|
||||
|
||||
trace!(?predicates);
|
||||
trace!(?ast_generics);
|
||||
|
||||
// Collect the predicates that were written inline by the user on each
|
||||
// type parameter (e.g., `<T: Foo>`).
|
||||
for param in ast_generics.params {
|
||||
@ -2244,7 +2246,9 @@ fn gather_explicit_predicates_of(tcx: TyCtxt<'_>, def_id: DefId) -> ty::GenericP
|
||||
Some((param.hir_id, ast_generics.predicates)),
|
||||
param.span,
|
||||
);
|
||||
trace!(?bounds);
|
||||
predicates.extend(bounds.predicates(tcx, param_ty));
|
||||
trace!(?predicates);
|
||||
}
|
||||
GenericParamKind::Const { .. } => {
|
||||
// Bounds on const parameters are currently not possible.
|
||||
@ -2253,6 +2257,7 @@ fn gather_explicit_predicates_of(tcx: TyCtxt<'_>, def_id: DefId) -> ty::GenericP
|
||||
}
|
||||
}
|
||||
|
||||
trace!(?predicates);
|
||||
// Add in the bounds that appear in the where-clause.
|
||||
for predicate in ast_generics.predicates {
|
||||
match predicate {
|
||||
@ -2338,12 +2343,10 @@ fn gather_explicit_predicates_of(tcx: TyCtxt<'_>, def_id: DefId) -> ty::GenericP
|
||||
);
|
||||
}
|
||||
|
||||
let result = ty::GenericPredicates {
|
||||
ty::GenericPredicates {
|
||||
parent: generics.parent,
|
||||
predicates: tcx.arena.alloc_from_iter(predicates),
|
||||
};
|
||||
debug!("explicit_predicates_of(def_id={:?}) = {:?}", def_id, result);
|
||||
result
|
||||
}
|
||||
}
|
||||
|
||||
fn const_evaluatable_predicates_of<'tcx>(
|
||||
|
@ -53,6 +53,7 @@ fn associated_type_bounds<'tcx>(
|
||||
/// impl trait it isn't possible to write a suitable predicate on the
|
||||
/// containing function and for type-alias impl trait we don't have a backwards
|
||||
/// compatibility issue.
|
||||
#[instrument(level = "trace", skip(tcx), ret)]
|
||||
fn opaque_type_bounds<'tcx>(
|
||||
tcx: TyCtxt<'tcx>,
|
||||
opaque_def_id: DefId,
|
||||
@ -67,6 +68,8 @@ fn opaque_type_bounds<'tcx>(
|
||||
let mut bounds = <dyn AstConv<'_>>::compute_bounds(&icx, item_ty, ast_bounds);
|
||||
// Opaque types are implicitly sized unless a `?Sized` bound is found
|
||||
<dyn AstConv<'_>>::add_implicitly_sized(&icx, &mut bounds, ast_bounds, None, span);
|
||||
debug!(?bounds);
|
||||
|
||||
tcx.arena.alloc_from_iter(bounds.predicates(tcx, item_ty))
|
||||
})
|
||||
}
|
||||
|
@ -992,6 +992,9 @@ pub fn set_output_capture(sink: Option<LocalStream>) -> Option<LocalStream> {
|
||||
/// the global stream.
|
||||
///
|
||||
/// However, if the actual I/O causes an error, this function does panic.
|
||||
///
|
||||
/// Writing to non-blocking stdout/stderr can cause an error, which will lead
|
||||
/// this function to panic.
|
||||
fn print_to<T>(args: fmt::Arguments<'_>, global_s: fn() -> T, label: &str)
|
||||
where
|
||||
T: Write,
|
||||
|
@ -49,6 +49,9 @@ macro_rules! panic {
|
||||
///
|
||||
/// Panics if writing to `io::stdout()` fails.
|
||||
///
|
||||
/// Writing to non-blocking stdout can cause an error, which will lead
|
||||
/// this macro to panic.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
@ -107,6 +110,9 @@ macro_rules! print {
|
||||
///
|
||||
/// Panics if writing to [`io::stdout`] fails.
|
||||
///
|
||||
/// Writing to non-blocking stdout can cause an error, which will lead
|
||||
/// this macro to panic.
|
||||
///
|
||||
/// [`io::stdout`]: crate::io::stdout
|
||||
///
|
||||
/// # Examples
|
||||
@ -147,6 +153,9 @@ macro_rules! println {
|
||||
///
|
||||
/// Panics if writing to `io::stderr` fails.
|
||||
///
|
||||
/// Writing to non-blocking stdout can cause an error, which will lead
|
||||
/// this macro to panic.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
@ -179,6 +188,9 @@ macro_rules! eprint {
|
||||
///
|
||||
/// Panics if writing to `io::stderr` fails.
|
||||
///
|
||||
/// Writing to non-blocking stdout can cause an error, which will lead
|
||||
/// this macro to panic.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
|
@ -422,6 +422,7 @@ Next, we'll build a package manifest as defined by our manifest:
|
||||
|
||||
```sh
|
||||
${SDK_PATH}/tools/${ARCH}/pm \
|
||||
-api-level $(${SDK_PATH}/tools/${ARCH}/ffx version -v | grep "api-level" | head -1 | awk -F ' ' '{print $2}') \
|
||||
-o pkg/hello_fuchsia_manifest \
|
||||
-m pkg/hello_fuchsia.manifest \
|
||||
build \
|
||||
|
@ -132,9 +132,11 @@ while work_list:
|
||||
work_list |= set(item["inner"]["items"]) - visited
|
||||
elif item["kind"] == "struct":
|
||||
check_generics(item["inner"]["generics"])
|
||||
work_list |= (
|
||||
set(item["inner"]["fields"]) | set(item["inner"]["impls"])
|
||||
) - visited
|
||||
work_list |= set(item["inner"]["impls"]) - visited
|
||||
if "tuple" in item["inner"]["kind"]:
|
||||
work_list |= set(filter(None, item["inner"]["kind"]["tuple"])) - visited
|
||||
elif "plain" in item["inner"]["kind"]:
|
||||
work_list |= set(item["inner"]["kind"]["plain"]["fields"]) - visited
|
||||
elif item["kind"] == "struct_field":
|
||||
check_type(item["inner"])
|
||||
elif item["kind"] == "enum":
|
||||
|
@ -699,9 +699,6 @@ pre, .rustdoc.source .example-wrap {
|
||||
#main-content {
|
||||
position: relative;
|
||||
}
|
||||
#main-content > .since {
|
||||
top: inherit;
|
||||
}
|
||||
|
||||
.content table {
|
||||
border-spacing: 0 5px;
|
||||
@ -747,11 +744,6 @@ pre, .rustdoc.source .example-wrap {
|
||||
font-size: 0.875rem;
|
||||
}
|
||||
|
||||
.content .methods > div:not(.notable-traits):not(.method) {
|
||||
margin-left: 40px;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
.item-info {
|
||||
display: block;
|
||||
}
|
||||
@ -1751,7 +1743,6 @@ in storage.js plus the media query with (min-width: 701px)
|
||||
padding-top: 0px;
|
||||
}
|
||||
|
||||
.rustdoc,
|
||||
.main-heading {
|
||||
flex-direction: column;
|
||||
}
|
||||
@ -2038,11 +2029,6 @@ in storage.js plus the media query with (min-width: 701px)
|
||||
height: 73px;
|
||||
}
|
||||
|
||||
#main-content > table td {
|
||||
word-break: break-word;
|
||||
width: 50%;
|
||||
}
|
||||
|
||||
#crate-search {
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
@ -304,11 +304,19 @@ impl FromWithTcx<clean::Struct> for Struct {
|
||||
fn from_tcx(struct_: clean::Struct, tcx: TyCtxt<'_>) -> Self {
|
||||
let fields_stripped = struct_.has_stripped_entries();
|
||||
let clean::Struct { struct_type, generics, fields } = struct_;
|
||||
|
||||
let kind = match struct_type {
|
||||
CtorKind::Fn => StructKind::Tuple(ids_keeping_stripped(fields, tcx)),
|
||||
CtorKind::Const => {
|
||||
assert!(fields.is_empty());
|
||||
StructKind::Unit
|
||||
}
|
||||
CtorKind::Fictive => StructKind::Plain { fields: ids(fields, tcx), fields_stripped },
|
||||
};
|
||||
|
||||
Struct {
|
||||
struct_type: from_ctor_kind(struct_type),
|
||||
kind,
|
||||
generics: generics.into_tcx(tcx),
|
||||
fields_stripped,
|
||||
fields: ids(fields, tcx),
|
||||
impls: Vec::new(), // Added in JsonRenderer::item
|
||||
}
|
||||
}
|
||||
@ -327,14 +335,6 @@ impl FromWithTcx<clean::Union> for Union {
|
||||
}
|
||||
}
|
||||
|
||||
pub(crate) fn from_ctor_kind(struct_type: CtorKind) -> StructType {
|
||||
match struct_type {
|
||||
CtorKind::Fictive => StructType::Plain,
|
||||
CtorKind::Fn => StructType::Tuple,
|
||||
CtorKind::Const => StructType::Unit,
|
||||
}
|
||||
}
|
||||
|
||||
pub(crate) fn from_fn_header(header: &rustc_hir::FnHeader) -> Header {
|
||||
Header {
|
||||
async_: header.is_async(),
|
||||
@ -644,20 +644,6 @@ impl FromWithTcx<clean::Enum> for Enum {
|
||||
}
|
||||
}
|
||||
|
||||
impl FromWithTcx<clean::VariantStruct> for Struct {
|
||||
fn from_tcx(struct_: clean::VariantStruct, tcx: TyCtxt<'_>) -> Self {
|
||||
let fields_stripped = struct_.has_stripped_entries();
|
||||
let clean::VariantStruct { struct_type, fields } = struct_;
|
||||
Struct {
|
||||
struct_type: from_ctor_kind(struct_type),
|
||||
generics: Generics { params: vec![], where_predicates: vec![] },
|
||||
fields_stripped,
|
||||
fields: ids(fields, tcx),
|
||||
impls: Vec::new(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl FromWithTcx<clean::Variant> for Variant {
|
||||
fn from_tcx(variant: clean::Variant, tcx: TyCtxt<'_>) -> Self {
|
||||
use clean::Variant::*;
|
||||
|
@ -9,7 +9,7 @@ use std::path::PathBuf;
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
/// rustdoc format-version.
|
||||
pub const FORMAT_VERSION: u32 = 20;
|
||||
pub const FORMAT_VERSION: u32 = 21;
|
||||
|
||||
/// A `Crate` is the root of the emitted JSON blob. It contains all type/documentation information
|
||||
/// about the language items in the local crate, as well as info about external items to allow
|
||||
@ -289,13 +289,39 @@ pub struct Union {
|
||||
|
||||
#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
|
||||
pub struct Struct {
|
||||
pub struct_type: StructType,
|
||||
pub kind: StructKind,
|
||||
pub generics: Generics,
|
||||
pub fields_stripped: bool,
|
||||
pub fields: Vec<Id>,
|
||||
pub impls: Vec<Id>,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
|
||||
#[serde(rename_all = "snake_case")]
|
||||
pub enum StructKind {
|
||||
/// A struct with no fields and no parentheses.
|
||||
///
|
||||
/// ```rust
|
||||
/// pub struct Unit;
|
||||
/// ```
|
||||
Unit,
|
||||
/// A struct with unnamed fields.
|
||||
///
|
||||
/// ```rust
|
||||
/// pub struct TupleStruct(i32);
|
||||
/// pub struct EmptyTupleStruct();
|
||||
/// ```
|
||||
///
|
||||
/// All [`Id`]'s will point to [`ItemEnum::StructField`]. Private and
|
||||
/// `#[doc(hidden)]` fields will be given as `None`
|
||||
Tuple(Vec<Option<Id>>),
|
||||
/// A struct with nammed fields.
|
||||
///
|
||||
/// ```rust
|
||||
/// pub struct PlainStruct { x: i32 }
|
||||
/// pub struct EmptyPlainStruct {}
|
||||
/// ```
|
||||
Plain { fields: Vec<Id>, fields_stripped: bool },
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
|
||||
pub struct Enum {
|
||||
pub generics: Generics,
|
||||
@ -357,14 +383,6 @@ pub struct Discriminant {
|
||||
pub value: String,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
|
||||
#[serde(rename_all = "snake_case")]
|
||||
pub enum StructType {
|
||||
Plain,
|
||||
Tuple,
|
||||
Unit,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
|
||||
pub struct Header {
|
||||
#[serde(rename = "const")]
|
||||
|
@ -3,10 +3,8 @@ use super::*;
|
||||
#[test]
|
||||
fn test_struct_info_roundtrip() {
|
||||
let s = ItemEnum::Struct(Struct {
|
||||
struct_type: StructType::Plain,
|
||||
generics: Generics { params: vec![], where_predicates: vec![] },
|
||||
fields_stripped: false,
|
||||
fields: vec![],
|
||||
kind: StructKind::Plain { fields: vec![], fields_stripped: false },
|
||||
impls: vec![],
|
||||
});
|
||||
|
||||
|
@ -7,7 +7,7 @@ unsafe fn foo(z: *mut usize) -> u32 {
|
||||
99
|
||||
}
|
||||
|
||||
// EMIT_MIR_FOR_EACH_BIT_WIDTH
|
||||
|
||||
// EMIT_MIR array_index_is_temporary.main.SimplifyCfg-elaborate-drops.after.mir
|
||||
fn main() {
|
||||
let mut x = [42, 43, 44];
|
||||
|
@ -1,64 +0,0 @@
|
||||
// MIR for `main` after SimplifyCfg-elaborate-drops
|
||||
|
||||
fn main() -> () {
|
||||
let mut _0: (); // return place in scope 0 at $DIR/array-index-is-temporary.rs:+0:11: +0:11
|
||||
let mut _1: [u32; 3]; // in scope 0 at $DIR/array-index-is-temporary.rs:+1:9: +1:14
|
||||
let mut _4: &mut usize; // in scope 0 at $DIR/array-index-is-temporary.rs:+3:25: +3:31
|
||||
let mut _5: u32; // in scope 0 at $DIR/array-index-is-temporary.rs:+4:12: +4:29
|
||||
let mut _6: *mut usize; // in scope 0 at $DIR/array-index-is-temporary.rs:+4:25: +4:26
|
||||
let _7: usize; // in scope 0 at $DIR/array-index-is-temporary.rs:+4:7: +4:8
|
||||
let mut _8: usize; // in scope 0 at $DIR/array-index-is-temporary.rs:+4:5: +4:9
|
||||
let mut _9: bool; // in scope 0 at $DIR/array-index-is-temporary.rs:+4:5: +4:9
|
||||
scope 1 {
|
||||
debug x => _1; // in scope 1 at $DIR/array-index-is-temporary.rs:+1:9: +1:14
|
||||
let mut _2: usize; // in scope 1 at $DIR/array-index-is-temporary.rs:+2:9: +2:14
|
||||
scope 2 {
|
||||
debug y => _2; // in scope 2 at $DIR/array-index-is-temporary.rs:+2:9: +2:14
|
||||
let _3: *mut usize; // in scope 2 at $DIR/array-index-is-temporary.rs:+3:9: +3:10
|
||||
scope 3 {
|
||||
debug z => _3; // in scope 3 at $DIR/array-index-is-temporary.rs:+3:9: +3:10
|
||||
scope 4 {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bb0: {
|
||||
StorageLive(_1); // scope 0 at $DIR/array-index-is-temporary.rs:+1:9: +1:14
|
||||
_1 = [const 42_u32, const 43_u32, const 44_u32]; // scope 0 at $DIR/array-index-is-temporary.rs:+1:17: +1:29
|
||||
StorageLive(_2); // scope 1 at $DIR/array-index-is-temporary.rs:+2:9: +2:14
|
||||
_2 = const 1_usize; // scope 1 at $DIR/array-index-is-temporary.rs:+2:17: +2:18
|
||||
StorageLive(_3); // scope 2 at $DIR/array-index-is-temporary.rs:+3:9: +3:10
|
||||
StorageLive(_4); // scope 2 at $DIR/array-index-is-temporary.rs:+3:25: +3:31
|
||||
_4 = &mut _2; // scope 2 at $DIR/array-index-is-temporary.rs:+3:25: +3:31
|
||||
_3 = &raw mut (*_4); // scope 2 at $DIR/array-index-is-temporary.rs:+3:25: +3:31
|
||||
StorageDead(_4); // scope 2 at $DIR/array-index-is-temporary.rs:+3:31: +3:32
|
||||
StorageLive(_5); // scope 3 at $DIR/array-index-is-temporary.rs:+4:12: +4:29
|
||||
StorageLive(_6); // scope 4 at $DIR/array-index-is-temporary.rs:+4:25: +4:26
|
||||
_6 = _3; // scope 4 at $DIR/array-index-is-temporary.rs:+4:25: +4:26
|
||||
_5 = foo(move _6) -> bb1; // scope 4 at $DIR/array-index-is-temporary.rs:+4:21: +4:27
|
||||
// mir::Constant
|
||||
// + span: $DIR/array-index-is-temporary.rs:16:21: 16:24
|
||||
// + literal: Const { ty: unsafe fn(*mut usize) -> u32 {foo}, val: Value(<ZST>) }
|
||||
}
|
||||
|
||||
bb1: {
|
||||
StorageDead(_6); // scope 4 at $DIR/array-index-is-temporary.rs:+4:26: +4:27
|
||||
StorageLive(_7); // scope 3 at $DIR/array-index-is-temporary.rs:+4:7: +4:8
|
||||
_7 = _2; // scope 3 at $DIR/array-index-is-temporary.rs:+4:7: +4:8
|
||||
_8 = Len(_1); // scope 3 at $DIR/array-index-is-temporary.rs:+4:5: +4:9
|
||||
_9 = Lt(_7, _8); // scope 3 at $DIR/array-index-is-temporary.rs:+4:5: +4:9
|
||||
assert(move _9, "index out of bounds: the length is {} but the index is {}", move _8, _7) -> bb2; // scope 3 at $DIR/array-index-is-temporary.rs:+4:5: +4:9
|
||||
}
|
||||
|
||||
bb2: {
|
||||
_1[_7] = move _5; // scope 3 at $DIR/array-index-is-temporary.rs:+4:5: +4:29
|
||||
StorageDead(_5); // scope 3 at $DIR/array-index-is-temporary.rs:+4:28: +4:29
|
||||
StorageDead(_7); // scope 3 at $DIR/array-index-is-temporary.rs:+4:29: +4:30
|
||||
_0 = const (); // scope 0 at $DIR/array-index-is-temporary.rs:+0:11: +5:2
|
||||
StorageDead(_3); // scope 2 at $DIR/array-index-is-temporary.rs:+5:1: +5:2
|
||||
StorageDead(_2); // scope 1 at $DIR/array-index-is-temporary.rs:+5:1: +5:2
|
||||
StorageDead(_1); // scope 0 at $DIR/array-index-is-temporary.rs:+5:1: +5:2
|
||||
return; // scope 0 at $DIR/array-index-is-temporary.rs:+5:2: +5:2
|
||||
}
|
||||
}
|
@ -1,7 +1,7 @@
|
||||
// ignore-endian-big
|
||||
// ignore-wasm32-bare compiled with panic=abort by default
|
||||
// compile-flags: -Z mir-opt-level=4
|
||||
// EMIT_MIR_FOR_EACH_BIT_WIDTH
|
||||
|
||||
#![feature(box_syntax)]
|
||||
// EMIT_MIR inline_into_box_place.main.Inline.diff
|
||||
fn main() {
|
||||
|
@ -1,82 +0,0 @@
|
||||
- // MIR for `main` before Inline
|
||||
+ // MIR for `main` after Inline
|
||||
|
||||
fn main() -> () {
|
||||
let mut _0: (); // return place in scope 0 at $DIR/inline-into-box-place.rs:+0:11: +0:11
|
||||
let _1: std::boxed::Box<std::vec::Vec<u32>>; // in scope 0 at $DIR/inline-into-box-place.rs:+1:9: +1:11
|
||||
let mut _2: usize; // in scope 0 at $DIR/inline-into-box-place.rs:+1:29: +1:43
|
||||
let mut _3: usize; // in scope 0 at $DIR/inline-into-box-place.rs:+1:29: +1:43
|
||||
let mut _4: *mut u8; // in scope 0 at $DIR/inline-into-box-place.rs:+1:29: +1:43
|
||||
let mut _5: std::boxed::Box<std::vec::Vec<u32>>; // in scope 0 at $DIR/inline-into-box-place.rs:+1:29: +1:43
|
||||
let mut _6: (); // in scope 0 at $DIR/inline-into-box-place.rs:+1:42: +1:43
|
||||
let mut _7: *const std::vec::Vec<u32>; // in scope 0 at $DIR/inline-into-box-place.rs:+1:29: +1:43
|
||||
+ let mut _8: &mut std::vec::Vec<u32>; // in scope 0 at $DIR/inline-into-box-place.rs:+1:33: +1:43
|
||||
scope 1 {
|
||||
debug _x => _1; // in scope 1 at $DIR/inline-into-box-place.rs:+1:9: +1:11
|
||||
}
|
||||
scope 2 {
|
||||
}
|
||||
+ scope 3 (inlined Vec::<u32>::new) { // at $DIR/inline-into-box-place.rs:8:33: 8:43
|
||||
+ let mut _9: alloc::raw_vec::RawVec<u32>; // in scope 3 at $SRC_DIR/alloc/src/vec/mod.rs:LL:COL
|
||||
+ }
|
||||
|
||||
bb0: {
|
||||
StorageLive(_1); // scope 0 at $DIR/inline-into-box-place.rs:+1:9: +1:11
|
||||
_2 = SizeOf(std::vec::Vec<u32>); // scope 2 at $DIR/inline-into-box-place.rs:+1:29: +1:43
|
||||
_3 = AlignOf(std::vec::Vec<u32>); // scope 2 at $DIR/inline-into-box-place.rs:+1:29: +1:43
|
||||
_4 = alloc::alloc::exchange_malloc(move _2, move _3) -> bb1; // scope 2 at $DIR/inline-into-box-place.rs:+1:29: +1:43
|
||||
// mir::Constant
|
||||
// + span: $DIR/inline-into-box-place.rs:8:29: 8:43
|
||||
// + literal: Const { ty: unsafe fn(usize, usize) -> *mut u8 {alloc::alloc::exchange_malloc}, val: Value(<ZST>) }
|
||||
}
|
||||
|
||||
bb1: {
|
||||
StorageLive(_5); // scope 0 at $DIR/inline-into-box-place.rs:+1:29: +1:43
|
||||
_5 = ShallowInitBox(move _4, std::vec::Vec<u32>); // scope 0 at $DIR/inline-into-box-place.rs:+1:29: +1:43
|
||||
_7 = (((_5.0: std::ptr::Unique<std::vec::Vec<u32>>).0: std::ptr::NonNull<std::vec::Vec<u32>>).0: *const std::vec::Vec<u32>); // scope 0 at $DIR/inline-into-box-place.rs:+1:33: +1:43
|
||||
- (*_7) = Vec::<u32>::new() -> [return: bb2, unwind: bb5]; // scope 0 at $DIR/inline-into-box-place.rs:+1:33: +1:43
|
||||
+ StorageLive(_8); // scope 0 at $DIR/inline-into-box-place.rs:+1:33: +1:43
|
||||
+ _8 = &mut (*_7); // scope 0 at $DIR/inline-into-box-place.rs:+1:33: +1:43
|
||||
+ StorageLive(_9); // scope 3 at $SRC_DIR/alloc/src/vec/mod.rs:LL:COL
|
||||
+ _9 = const alloc::raw_vec::RawVec::<u32>::NEW; // scope 3 at $SRC_DIR/alloc/src/vec/mod.rs:LL:COL
|
||||
// mir::Constant
|
||||
- // + span: $DIR/inline-into-box-place.rs:8:33: 8:41
|
||||
- // + user_ty: UserType(1)
|
||||
- // + literal: Const { ty: fn() -> Vec<u32> {Vec::<u32>::new}, val: Value(<ZST>) }
|
||||
- }
|
||||
-
|
||||
- bb2: {
|
||||
+ // + span: $SRC_DIR/alloc/src/vec/mod.rs:LL:COL
|
||||
+ // + user_ty: UserType(0)
|
||||
+ // + literal: Const { ty: alloc::raw_vec::RawVec<u32>, val: Unevaluated(alloc::raw_vec::RawVec::<T>::NEW, [u32], None) }
|
||||
+ Deinit((*_8)); // scope 3 at $SRC_DIR/alloc/src/vec/mod.rs:LL:COL
|
||||
+ ((*_8).0: alloc::raw_vec::RawVec<u32>) = move _9; // scope 3 at $SRC_DIR/alloc/src/vec/mod.rs:LL:COL
|
||||
+ ((*_8).1: usize) = const 0_usize; // scope 3 at $SRC_DIR/alloc/src/vec/mod.rs:LL:COL
|
||||
+ StorageDead(_9); // scope 3 at $SRC_DIR/alloc/src/vec/mod.rs:LL:COL
|
||||
+ StorageDead(_8); // scope 0 at $DIR/inline-into-box-place.rs:+1:33: +1:43
|
||||
_1 = move _5; // scope 0 at $DIR/inline-into-box-place.rs:+1:29: +1:43
|
||||
StorageDead(_5); // scope 0 at $DIR/inline-into-box-place.rs:+1:42: +1:43
|
||||
_0 = const (); // scope 0 at $DIR/inline-into-box-place.rs:+0:11: +2:2
|
||||
- drop(_1) -> [return: bb3, unwind: bb4]; // scope 0 at $DIR/inline-into-box-place.rs:+2:1: +2:2
|
||||
+ drop(_1) -> [return: bb2, unwind: bb3]; // scope 0 at $DIR/inline-into-box-place.rs:+2:1: +2:2
|
||||
}
|
||||
|
||||
- bb3: {
|
||||
+ bb2: {
|
||||
StorageDead(_1); // scope 0 at $DIR/inline-into-box-place.rs:+2:1: +2:2
|
||||
return; // scope 0 at $DIR/inline-into-box-place.rs:+2:2: +2:2
|
||||
}
|
||||
|
||||
- bb4 (cleanup): {
|
||||
+ bb3 (cleanup): {
|
||||
resume; // scope 0 at $DIR/inline-into-box-place.rs:+0:1: +2:2
|
||||
- }
|
||||
-
|
||||
- bb5 (cleanup): {
|
||||
- _6 = alloc::alloc::box_free::<Vec<u32>, std::alloc::Global>(move (_5.0: std::ptr::Unique<std::vec::Vec<u32>>), move (_5.1: std::alloc::Global)) -> bb4; // scope 0 at $DIR/inline-into-box-place.rs:+1:42: +1:43
|
||||
- // mir::Constant
|
||||
- // + span: $DIR/inline-into-box-place.rs:8:42: 8:43
|
||||
- // + literal: Const { ty: unsafe fn(Unique<Vec<u32>>, std::alloc::Global) {alloc::alloc::box_free::<Vec<u32>, std::alloc::Global>}, val: Value(<ZST>) }
|
||||
}
|
||||
}
|
||||
|
@ -13,7 +13,7 @@ trait Foo {
|
||||
fn get(&self) -> [u8; 2];
|
||||
}
|
||||
|
||||
// EMIT_MIR_FOR_EACH_BIT_WIDTH
|
||||
|
||||
// EMIT_MIR issue_41697.{impl#0}-{constant#0}.SimplifyCfg-promote-consts.after.mir
|
||||
impl Foo for [u8; 1+1] {
|
||||
fn get(&self) -> [u8; 2] {
|
||||
|
@ -11,14 +11,14 @@ union Foo {
|
||||
b: Never
|
||||
}
|
||||
|
||||
// EMIT_MIR_FOR_EACH_BIT_WIDTH
|
||||
|
||||
// EMIT_MIR issue_72181.foo.mir_map.0.mir
|
||||
fn foo(xs: [(Never, u32); 1]) -> u32 { xs[0].1 }
|
||||
|
||||
// EMIT_MIR issue_72181.bar.mir_map.0.mir
|
||||
fn bar([(_, x)]: [(Never, u32); 1]) -> u32 { x }
|
||||
|
||||
// EMIT_MIR_FOR_EACH_BIT_WIDTH
|
||||
|
||||
// EMIT_MIR issue_72181.main.mir_map.0.mir
|
||||
fn main() {
|
||||
let _ = mem::size_of::<Foo>();
|
||||
|
@ -8,5 +8,5 @@ fn main() {
|
||||
assert_eq!(split, 1);
|
||||
}
|
||||
|
||||
// EMIT_MIR_FOR_EACH_BIT_WIDTH
|
||||
|
||||
// EMIT_MIR issue_73223.main.SimplifyArmIdentity.diff
|
||||
|
@ -1,20 +0,0 @@
|
||||
// MIR for `<impl at $DIR/issue-41697.rs:18:1: 18:23>::{constant#0}` after SimplifyCfg-promote-consts
|
||||
|
||||
<impl at $DIR/issue-41697.rs:18:1: 18:23>::{constant#0}: usize = {
|
||||
let mut _0: usize; // return place in scope 0 at $DIR/issue-41697.rs:+0:19: +0:22
|
||||
let mut _1: (usize, bool); // in scope 0 at $DIR/issue-41697.rs:+0:19: +0:22
|
||||
|
||||
bb0: {
|
||||
_1 = CheckedAdd(const 1_usize, const 1_usize); // scope 0 at $DIR/issue-41697.rs:+0:19: +0:22
|
||||
assert(!move (_1.1: bool), "attempt to compute `{} + {}`, which would overflow", const 1_usize, const 1_usize) -> [success: bb1, unwind: bb2]; // scope 0 at $DIR/issue-41697.rs:+0:19: +0:22
|
||||
}
|
||||
|
||||
bb1: {
|
||||
_0 = move (_1.0: usize); // scope 0 at $DIR/issue-41697.rs:+0:19: +0:22
|
||||
return; // scope 0 at $DIR/issue-41697.rs:+0:19: +0:22
|
||||
}
|
||||
|
||||
bb2 (cleanup): {
|
||||
resume; // scope 0 at $DIR/issue-41697.rs:+0:19: +0:22
|
||||
}
|
||||
}
|
@ -1,17 +0,0 @@
|
||||
// MIR for `bar` 0 mir_map
|
||||
|
||||
fn bar(_1: [(Never, u32); 1]) -> u32 {
|
||||
let mut _0: u32; // return place in scope 0 at $DIR/issue-72181.rs:+0:40: +0:43
|
||||
let _2: u32; // in scope 0 at $DIR/issue-72181.rs:+0:13: +0:14
|
||||
scope 1 {
|
||||
debug x => _2; // in scope 1 at $DIR/issue-72181.rs:+0:13: +0:14
|
||||
}
|
||||
|
||||
bb0: {
|
||||
StorageLive(_2); // scope 0 at $DIR/issue-72181.rs:+0:13: +0:14
|
||||
_2 = (_1[0 of 1].1: u32); // scope 0 at $DIR/issue-72181.rs:+0:13: +0:14
|
||||
_0 = _2; // scope 1 at $DIR/issue-72181.rs:+0:46: +0:47
|
||||
StorageDead(_2); // scope 0 at $DIR/issue-72181.rs:+0:48: +0:49
|
||||
return; // scope 0 at $DIR/issue-72181.rs:+0:49: +0:49
|
||||
}
|
||||
}
|
@ -1,27 +0,0 @@
|
||||
// MIR for `foo` 0 mir_map
|
||||
|
||||
fn foo(_1: [(Never, u32); 1]) -> u32 {
|
||||
debug xs => _1; // in scope 0 at $DIR/issue-72181.rs:+0:8: +0:10
|
||||
let mut _0: u32; // return place in scope 0 at $DIR/issue-72181.rs:+0:34: +0:37
|
||||
let _2: usize; // in scope 0 at $DIR/issue-72181.rs:+0:43: +0:44
|
||||
let mut _3: usize; // in scope 0 at $DIR/issue-72181.rs:+0:40: +0:45
|
||||
let mut _4: bool; // in scope 0 at $DIR/issue-72181.rs:+0:40: +0:45
|
||||
|
||||
bb0: {
|
||||
StorageLive(_2); // scope 0 at $DIR/issue-72181.rs:+0:43: +0:44
|
||||
_2 = const 0_usize; // scope 0 at $DIR/issue-72181.rs:+0:43: +0:44
|
||||
_3 = Len(_1); // scope 0 at $DIR/issue-72181.rs:+0:40: +0:45
|
||||
_4 = Lt(_2, _3); // scope 0 at $DIR/issue-72181.rs:+0:40: +0:45
|
||||
assert(move _4, "index out of bounds: the length is {} but the index is {}", move _3, _2) -> [success: bb1, unwind: bb2]; // scope 0 at $DIR/issue-72181.rs:+0:40: +0:45
|
||||
}
|
||||
|
||||
bb1: {
|
||||
_0 = (_1[_2].1: u32); // scope 0 at $DIR/issue-72181.rs:+0:40: +0:47
|
||||
StorageDead(_2); // scope 0 at $DIR/issue-72181.rs:+0:48: +0:49
|
||||
return; // scope 0 at $DIR/issue-72181.rs:+0:49: +0:49
|
||||
}
|
||||
|
||||
bb2 (cleanup): {
|
||||
resume; // scope 0 at $DIR/issue-72181.rs:+0:1: +0:49
|
||||
}
|
||||
}
|
@ -1,62 +0,0 @@
|
||||
// MIR for `main` 0 mir_map
|
||||
|
||||
fn main() -> () {
|
||||
let mut _0: (); // return place in scope 0 at $DIR/issue-72181.rs:+0:11: +0:11
|
||||
let mut _1: usize; // in scope 0 at $DIR/issue-72181.rs:+1:13: +1:34
|
||||
let mut _3: Foo; // in scope 0 at $DIR/issue-72181.rs:+3:14: +3:27
|
||||
let mut _4: Foo; // in scope 0 at $DIR/issue-72181.rs:+3:29: +3:42
|
||||
let mut _5: u64; // in scope 0 at $DIR/issue-72181.rs:+4:13: +4:30
|
||||
let _6: usize; // in scope 0 at $DIR/issue-72181.rs:+4:24: +4:25
|
||||
let mut _7: usize; // in scope 0 at $DIR/issue-72181.rs:+4:22: +4:26
|
||||
let mut _8: bool; // in scope 0 at $DIR/issue-72181.rs:+4:22: +4:26
|
||||
scope 1 {
|
||||
let _2: [Foo; 2]; // in scope 1 at $DIR/issue-72181.rs:+3:9: +3:10
|
||||
scope 2 {
|
||||
debug f => _2; // in scope 2 at $DIR/issue-72181.rs:+3:9: +3:10
|
||||
scope 3 {
|
||||
}
|
||||
scope 4 {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bb0: {
|
||||
StorageLive(_1); // scope 0 at $DIR/issue-72181.rs:+1:13: +1:34
|
||||
_1 = std::mem::size_of::<Foo>() -> [return: bb1, unwind: bb3]; // scope 0 at $DIR/issue-72181.rs:+1:13: +1:34
|
||||
// mir::Constant
|
||||
// + span: $DIR/issue-72181.rs:24:13: 24:32
|
||||
// + literal: Const { ty: fn() -> usize {std::mem::size_of::<Foo>}, val: Value(<ZST>) }
|
||||
}
|
||||
|
||||
bb1: {
|
||||
StorageDead(_1); // scope 0 at $DIR/issue-72181.rs:+1:34: +1:35
|
||||
StorageLive(_2); // scope 1 at $DIR/issue-72181.rs:+3:9: +3:10
|
||||
StorageLive(_3); // scope 1 at $DIR/issue-72181.rs:+3:14: +3:27
|
||||
_3 = Foo { a: const 42_u64 }; // scope 1 at $DIR/issue-72181.rs:+3:14: +3:27
|
||||
StorageLive(_4); // scope 1 at $DIR/issue-72181.rs:+3:29: +3:42
|
||||
_4 = Foo { a: const 10_u64 }; // scope 1 at $DIR/issue-72181.rs:+3:29: +3:42
|
||||
_2 = [move _3, move _4]; // scope 1 at $DIR/issue-72181.rs:+3:13: +3:43
|
||||
StorageDead(_4); // scope 1 at $DIR/issue-72181.rs:+3:42: +3:43
|
||||
StorageDead(_3); // scope 1 at $DIR/issue-72181.rs:+3:42: +3:43
|
||||
FakeRead(ForLet(None), _2); // scope 1 at $DIR/issue-72181.rs:+3:9: +3:10
|
||||
StorageLive(_5); // scope 2 at $DIR/issue-72181.rs:+4:13: +4:30
|
||||
StorageLive(_6); // scope 4 at $DIR/issue-72181.rs:+4:24: +4:25
|
||||
_6 = const 0_usize; // scope 4 at $DIR/issue-72181.rs:+4:24: +4:25
|
||||
_7 = Len(_2); // scope 4 at $DIR/issue-72181.rs:+4:22: +4:26
|
||||
_8 = Lt(_6, _7); // scope 4 at $DIR/issue-72181.rs:+4:22: +4:26
|
||||
assert(move _8, "index out of bounds: the length is {} but the index is {}", move _7, _6) -> [success: bb2, unwind: bb3]; // scope 4 at $DIR/issue-72181.rs:+4:22: +4:26
|
||||
}
|
||||
|
||||
bb2: {
|
||||
_5 = (_2[_6].0: u64); // scope 4 at $DIR/issue-72181.rs:+4:22: +4:28
|
||||
StorageDead(_6); // scope 2 at $DIR/issue-72181.rs:+4:30: +4:31
|
||||
StorageDead(_5); // scope 2 at $DIR/issue-72181.rs:+4:30: +4:31
|
||||
_0 = const (); // scope 0 at $DIR/issue-72181.rs:+0:11: +5:2
|
||||
StorageDead(_2); // scope 1 at $DIR/issue-72181.rs:+5:1: +5:2
|
||||
return; // scope 0 at $DIR/issue-72181.rs:+5:2: +5:2
|
||||
}
|
||||
|
||||
bb3 (cleanup): {
|
||||
resume; // scope 0 at $DIR/issue-72181.rs:+0:1: +5:2
|
||||
}
|
||||
}
|
@ -1,161 +0,0 @@
|
||||
- // MIR for `main` before SimplifyArmIdentity
|
||||
+ // MIR for `main` after SimplifyArmIdentity
|
||||
|
||||
fn main() -> () {
|
||||
let mut _0: (); // return place in scope 0 at $DIR/issue-73223.rs:+0:11: +0:11
|
||||
let _1: i32; // in scope 0 at $DIR/issue-73223.rs:+1:9: +1:14
|
||||
let mut _2: std::option::Option<i32>; // in scope 0 at $DIR/issue-73223.rs:+1:23: +1:30
|
||||
let mut _3: isize; // in scope 0 at $DIR/issue-73223.rs:+2:9: +2:16
|
||||
let _4: i32; // in scope 0 at $DIR/issue-73223.rs:+2:14: +2:15
|
||||
let mut _5: !; // in scope 0 at $DIR/issue-73223.rs:+3:17: +3:23
|
||||
let mut _7: i32; // in scope 0 at $DIR/issue-73223.rs:+6:22: +6:27
|
||||
let _8: (); // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
let mut _9: (&i32, &i32); // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
let mut _10: &i32; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
let mut _11: &i32; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
let _12: i32; // in scope 0 at $DIR/issue-73223.rs:+7:23: +7:24
|
||||
let mut _15: bool; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
let mut _16: bool; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
let mut _17: i32; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
let mut _18: i32; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
let mut _19: !; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
let _21: !; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
let mut _22: core::panicking::AssertKind; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
let mut _23: &i32; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
let _24: &i32; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
let mut _25: &i32; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
let _26: &i32; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
let mut _27: std::option::Option<std::fmt::Arguments>; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
scope 1 {
|
||||
debug split => _1; // in scope 1 at $DIR/issue-73223.rs:+1:9: +1:14
|
||||
let _6: std::option::Option<i32>; // in scope 1 at $DIR/issue-73223.rs:+6:9: +6:14
|
||||
scope 3 {
|
||||
debug _prev => _6; // in scope 3 at $DIR/issue-73223.rs:+6:9: +6:14
|
||||
let _13: &i32; // in scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
let _14: &i32; // in scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
let mut _28: &i32; // in scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
scope 4 {
|
||||
debug left_val => _13; // in scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
debug right_val => _14; // in scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
let _20: core::panicking::AssertKind; // in scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
scope 5 {
|
||||
debug kind => _20; // in scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
scope 2 {
|
||||
debug v => _4; // in scope 2 at $DIR/issue-73223.rs:+2:14: +2:15
|
||||
}
|
||||
|
||||
bb0: {
|
||||
StorageLive(_1); // scope 0 at $DIR/issue-73223.rs:+1:9: +1:14
|
||||
StorageLive(_2); // scope 0 at $DIR/issue-73223.rs:+1:23: +1:30
|
||||
Deinit(_2); // scope 0 at $DIR/issue-73223.rs:+1:23: +1:30
|
||||
((_2 as Some).0: i32) = const 1_i32; // scope 0 at $DIR/issue-73223.rs:+1:23: +1:30
|
||||
discriminant(_2) = 1; // scope 0 at $DIR/issue-73223.rs:+1:23: +1:30
|
||||
_3 = const 1_isize; // scope 0 at $DIR/issue-73223.rs:+1:23: +1:30
|
||||
goto -> bb3; // scope 0 at $DIR/issue-73223.rs:+1:17: +1:30
|
||||
}
|
||||
|
||||
bb1: {
|
||||
nop; // scope 0 at $DIR/issue-73223.rs:+3:17: +3:23
|
||||
StorageDead(_2); // scope 0 at $DIR/issue-73223.rs:+4:6: +4:7
|
||||
StorageDead(_1); // scope 0 at $DIR/issue-73223.rs:+8:1: +8:2
|
||||
return; // scope 0 at $DIR/issue-73223.rs:+8:2: +8:2
|
||||
}
|
||||
|
||||
bb2: {
|
||||
unreachable; // scope 0 at $DIR/issue-73223.rs:+1:23: +1:30
|
||||
}
|
||||
|
||||
bb3: {
|
||||
StorageLive(_4); // scope 0 at $DIR/issue-73223.rs:+2:14: +2:15
|
||||
_4 = ((_2 as Some).0: i32); // scope 0 at $DIR/issue-73223.rs:+2:14: +2:15
|
||||
_1 = _4; // scope 2 at $DIR/issue-73223.rs:+2:20: +2:21
|
||||
StorageDead(_4); // scope 0 at $DIR/issue-73223.rs:+2:20: +2:21
|
||||
StorageDead(_2); // scope 0 at $DIR/issue-73223.rs:+4:6: +4:7
|
||||
StorageLive(_6); // scope 1 at $DIR/issue-73223.rs:+6:9: +6:14
|
||||
StorageLive(_7); // scope 1 at $DIR/issue-73223.rs:+6:22: +6:27
|
||||
_7 = _1; // scope 1 at $DIR/issue-73223.rs:+6:22: +6:27
|
||||
Deinit(_6); // scope 1 at $DIR/issue-73223.rs:+6:17: +6:28
|
||||
((_6 as Some).0: i32) = move _7; // scope 1 at $DIR/issue-73223.rs:+6:17: +6:28
|
||||
discriminant(_6) = 1; // scope 1 at $DIR/issue-73223.rs:+6:17: +6:28
|
||||
StorageDead(_7); // scope 1 at $DIR/issue-73223.rs:+6:27: +6:28
|
||||
StorageLive(_8); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageLive(_9); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageLive(_10); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
_10 = &_1; // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageLive(_11); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
_28 = const main::promoted[0]; // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
// mir::Constant
|
||||
// + span: $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
// + literal: Const { ty: &i32, val: Unevaluated(main, [], Some(promoted[0])) }
|
||||
_11 = _28; // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
Deinit(_9); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
(_9.0: &i32) = move _10; // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
(_9.1: &i32) = move _11; // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageDead(_11); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageDead(_10); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageLive(_13); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
_13 = (_9.0: &i32); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageLive(_14); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
_14 = (_9.1: &i32); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageLive(_15); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageLive(_16); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageLive(_17); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
_17 = (*_13); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageLive(_18); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
_18 = const 1_i32; // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
_16 = Eq(move _17, const 1_i32); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageDead(_18); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageDead(_17); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
_15 = Not(move _16); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageDead(_16); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
switchInt(move _15) -> [false: bb5, otherwise: bb4]; // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
}
|
||||
|
||||
bb4: {
|
||||
StorageLive(_20); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
Deinit(_20); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
discriminant(_20) = 0; // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageLive(_21); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageLive(_22); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
_22 = const core::panicking::AssertKind::Eq; // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
// mir::Constant
|
||||
// + span: $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
// + literal: Const { ty: core::panicking::AssertKind, val: Value(Scalar(0x00)) }
|
||||
StorageLive(_23); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageLive(_24); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
_24 = _13; // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
_23 = _24; // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageLive(_25); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageLive(_26); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
_26 = _14; // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
_25 = _26; // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageLive(_27); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
Deinit(_27); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
discriminant(_27) = 0; // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
_21 = core::panicking::assert_failed::<i32, i32>(const core::panicking::AssertKind::Eq, move _23, move _25, move _27); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
// mir::Constant
|
||||
// + span: $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
// + literal: Const { ty: for<'r, 's, 't0> fn(core::panicking::AssertKind, &'r i32, &'s i32, Option<Arguments<'t0>>) -> ! {core::panicking::assert_failed::<i32, i32>}, val: Value(<ZST>) }
|
||||
// mir::Constant
|
||||
// + span: $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
// + literal: Const { ty: core::panicking::AssertKind, val: Value(Scalar(0x00)) }
|
||||
}
|
||||
|
||||
bb5: {
|
||||
nop; // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageDead(_15); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageDead(_14); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageDead(_13); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageDead(_9); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageDead(_8); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
nop; // scope 0 at $DIR/issue-73223.rs:+0:11: +8:2
|
||||
StorageDead(_6); // scope 1 at $DIR/issue-73223.rs:+8:1: +8:2
|
||||
StorageDead(_1); // scope 0 at $DIR/issue-73223.rs:+8:1: +8:2
|
||||
return; // scope 0 at $DIR/issue-73223.rs:+8:2: +8:2
|
||||
}
|
||||
}
|
||||
|
@ -1,88 +0,0 @@
|
||||
- // MIR for `bar` before MatchBranchSimplification
|
||||
+ // MIR for `bar` after MatchBranchSimplification
|
||||
|
||||
fn bar(_1: i32) -> (bool, bool, bool, bool) {
|
||||
debug i => _1; // in scope 0 at $DIR/matches_reduce_branches.rs:+0:8: +0:9
|
||||
let mut _0: (bool, bool, bool, bool); // return place in scope 0 at $DIR/matches_reduce_branches.rs:+0:19: +0:43
|
||||
let _2: bool; // in scope 0 at $DIR/matches_reduce_branches.rs:+1:9: +1:10
|
||||
let _6: (); // in scope 0 at $DIR/matches_reduce_branches.rs:+6:5: +21:6
|
||||
let mut _7: bool; // in scope 0 at $DIR/matches_reduce_branches.rs:+23:6: +23:7
|
||||
let mut _8: bool; // in scope 0 at $DIR/matches_reduce_branches.rs:+23:9: +23:10
|
||||
let mut _9: bool; // in scope 0 at $DIR/matches_reduce_branches.rs:+23:12: +23:13
|
||||
let mut _10: bool; // in scope 0 at $DIR/matches_reduce_branches.rs:+23:15: +23:16
|
||||
+ let mut _11: i32; // in scope 0 at $DIR/matches_reduce_branches.rs:+6:5: +6:12
|
||||
scope 1 {
|
||||
debug a => _2; // in scope 1 at $DIR/matches_reduce_branches.rs:+1:9: +1:10
|
||||
let _3: bool; // in scope 1 at $DIR/matches_reduce_branches.rs:+2:9: +2:10
|
||||
scope 2 {
|
||||
debug b => _3; // in scope 2 at $DIR/matches_reduce_branches.rs:+2:9: +2:10
|
||||
let _4: bool; // in scope 2 at $DIR/matches_reduce_branches.rs:+3:9: +3:10
|
||||
scope 3 {
|
||||
debug c => _4; // in scope 3 at $DIR/matches_reduce_branches.rs:+3:9: +3:10
|
||||
let _5: bool; // in scope 3 at $DIR/matches_reduce_branches.rs:+4:9: +4:10
|
||||
scope 4 {
|
||||
debug d => _5; // in scope 4 at $DIR/matches_reduce_branches.rs:+4:9: +4:10
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bb0: {
|
||||
StorageLive(_2); // scope 0 at $DIR/matches_reduce_branches.rs:+1:9: +1:10
|
||||
StorageLive(_3); // scope 1 at $DIR/matches_reduce_branches.rs:+2:9: +2:10
|
||||
StorageLive(_4); // scope 2 at $DIR/matches_reduce_branches.rs:+3:9: +3:10
|
||||
StorageLive(_5); // scope 3 at $DIR/matches_reduce_branches.rs:+4:9: +4:10
|
||||
StorageLive(_6); // scope 4 at $DIR/matches_reduce_branches.rs:+6:5: +21:6
|
||||
- switchInt(_1) -> [7_i32: bb2, otherwise: bb1]; // scope 4 at $DIR/matches_reduce_branches.rs:+6:5: +6:12
|
||||
- }
|
||||
-
|
||||
- bb1: {
|
||||
- _2 = const true; // scope 4 at $DIR/matches_reduce_branches.rs:+15:13: +15:21
|
||||
- _3 = const false; // scope 4 at $DIR/matches_reduce_branches.rs:+16:13: +16:22
|
||||
- _4 = const false; // scope 4 at $DIR/matches_reduce_branches.rs:+17:13: +17:22
|
||||
- _5 = const true; // scope 4 at $DIR/matches_reduce_branches.rs:+18:13: +18:21
|
||||
- Deinit(_6); // scope 4 at $DIR/matches_reduce_branches.rs:+19:13: +19:15
|
||||
- goto -> bb3; // scope 4 at $DIR/matches_reduce_branches.rs:+19:13: +19:15
|
||||
- }
|
||||
-
|
||||
- bb2: {
|
||||
- _2 = const false; // scope 4 at $DIR/matches_reduce_branches.rs:+8:13: +8:22
|
||||
- _3 = const true; // scope 4 at $DIR/matches_reduce_branches.rs:+9:13: +9:21
|
||||
+ StorageLive(_11); // scope 4 at $DIR/matches_reduce_branches.rs:+6:5: +6:12
|
||||
+ _11 = _1; // scope 4 at $DIR/matches_reduce_branches.rs:+6:5: +6:12
|
||||
+ _2 = Ne(_11, const 7_i32); // scope 4 at $DIR/matches_reduce_branches.rs:+8:13: +8:22
|
||||
+ _3 = Eq(_11, const 7_i32); // scope 4 at $DIR/matches_reduce_branches.rs:+9:13: +9:21
|
||||
_4 = const false; // scope 4 at $DIR/matches_reduce_branches.rs:+10:13: +10:22
|
||||
_5 = const true; // scope 4 at $DIR/matches_reduce_branches.rs:+11:13: +11:21
|
||||
Deinit(_6); // scope 4 at $DIR/matches_reduce_branches.rs:+12:13: +12:15
|
||||
- goto -> bb3; // scope 4 at $DIR/matches_reduce_branches.rs:+12:13: +12:15
|
||||
- }
|
||||
-
|
||||
- bb3: {
|
||||
+ StorageDead(_11); // scope 4 at $DIR/matches_reduce_branches.rs:+6:5: +6:12
|
||||
StorageDead(_6); // scope 4 at $DIR/matches_reduce_branches.rs:+21:6: +21:7
|
||||
StorageLive(_7); // scope 4 at $DIR/matches_reduce_branches.rs:+23:6: +23:7
|
||||
_7 = _2; // scope 4 at $DIR/matches_reduce_branches.rs:+23:6: +23:7
|
||||
StorageLive(_8); // scope 4 at $DIR/matches_reduce_branches.rs:+23:9: +23:10
|
||||
_8 = _3; // scope 4 at $DIR/matches_reduce_branches.rs:+23:9: +23:10
|
||||
StorageLive(_9); // scope 4 at $DIR/matches_reduce_branches.rs:+23:12: +23:13
|
||||
_9 = _4; // scope 4 at $DIR/matches_reduce_branches.rs:+23:12: +23:13
|
||||
StorageLive(_10); // scope 4 at $DIR/matches_reduce_branches.rs:+23:15: +23:16
|
||||
_10 = _5; // scope 4 at $DIR/matches_reduce_branches.rs:+23:15: +23:16
|
||||
Deinit(_0); // scope 4 at $DIR/matches_reduce_branches.rs:+23:5: +23:17
|
||||
(_0.0: bool) = move _7; // scope 4 at $DIR/matches_reduce_branches.rs:+23:5: +23:17
|
||||
(_0.1: bool) = move _8; // scope 4 at $DIR/matches_reduce_branches.rs:+23:5: +23:17
|
||||
(_0.2: bool) = move _9; // scope 4 at $DIR/matches_reduce_branches.rs:+23:5: +23:17
|
||||
(_0.3: bool) = move _10; // scope 4 at $DIR/matches_reduce_branches.rs:+23:5: +23:17
|
||||
StorageDead(_10); // scope 4 at $DIR/matches_reduce_branches.rs:+23:16: +23:17
|
||||
StorageDead(_9); // scope 4 at $DIR/matches_reduce_branches.rs:+23:16: +23:17
|
||||
StorageDead(_8); // scope 4 at $DIR/matches_reduce_branches.rs:+23:16: +23:17
|
||||
StorageDead(_7); // scope 4 at $DIR/matches_reduce_branches.rs:+23:16: +23:17
|
||||
StorageDead(_5); // scope 3 at $DIR/matches_reduce_branches.rs:+24:1: +24:2
|
||||
StorageDead(_4); // scope 2 at $DIR/matches_reduce_branches.rs:+24:1: +24:2
|
||||
StorageDead(_3); // scope 1 at $DIR/matches_reduce_branches.rs:+24:1: +24:2
|
||||
StorageDead(_2); // scope 0 at $DIR/matches_reduce_branches.rs:+24:1: +24:2
|
||||
return; // scope 0 at $DIR/matches_reduce_branches.rs:+24:2: +24:2
|
||||
}
|
||||
}
|
||||
|
@ -1,55 +0,0 @@
|
||||
- // MIR for `foo` before MatchBranchSimplification
|
||||
+ // MIR for `foo` after MatchBranchSimplification
|
||||
|
||||
fn foo(_1: Option<()>) -> () {
|
||||
debug bar => _1; // in scope 0 at $DIR/matches_reduce_branches.rs:+0:8: +0:11
|
||||
let mut _0: (); // return place in scope 0 at $DIR/matches_reduce_branches.rs:+0:25: +0:25
|
||||
let mut _2: bool; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
let mut _3: isize; // in scope 0 at $DIR/matches_reduce_branches.rs:+1:22: +1:26
|
||||
+ let mut _4: isize; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
|
||||
bb0: {
|
||||
StorageLive(_2); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
_3 = discriminant(_1); // scope 0 at $DIR/matches_reduce_branches.rs:+1:17: +1:20
|
||||
- switchInt(move _3) -> [0_isize: bb2, otherwise: bb1]; // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
+ StorageLive(_4); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
+ _4 = move _3; // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
+ _2 = Eq(_4, const 0_isize); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
+ StorageDead(_4); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
+ switchInt(move _2) -> [false: bb2, otherwise: bb1]; // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
}
|
||||
|
||||
bb1: {
|
||||
- _2 = const false; // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
- goto -> bb3; // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
- }
|
||||
-
|
||||
- bb2: {
|
||||
- _2 = const true; // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
- goto -> bb3; // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
- }
|
||||
-
|
||||
- bb3: {
|
||||
- switchInt(move _2) -> [false: bb5, otherwise: bb4]; // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
- }
|
||||
-
|
||||
- bb4: {
|
||||
Deinit(_0); // scope 0 at $DIR/matches_reduce_branches.rs:+2:9: +2:11
|
||||
- goto -> bb6; // scope 0 at $DIR/matches_reduce_branches.rs:+1:5: +3:6
|
||||
+ goto -> bb3; // scope 0 at $DIR/matches_reduce_branches.rs:+1:5: +3:6
|
||||
}
|
||||
|
||||
- bb5: {
|
||||
+ bb2: {
|
||||
_0 = const (); // scope 0 at $DIR/matches_reduce_branches.rs:+3:6: +3:6
|
||||
- goto -> bb6; // scope 0 at $DIR/matches_reduce_branches.rs:+1:5: +3:6
|
||||
+ goto -> bb3; // scope 0 at $DIR/matches_reduce_branches.rs:+1:5: +3:6
|
||||
}
|
||||
|
||||
- bb6: {
|
||||
+ bb3: {
|
||||
StorageDead(_2); // scope 0 at $DIR/matches_reduce_branches.rs:+3:5: +3:6
|
||||
return; // scope 0 at $DIR/matches_reduce_branches.rs:+4:2: +4:2
|
||||
}
|
||||
}
|
||||
|
@ -1,113 +0,0 @@
|
||||
- // MIR for `match_nested_if` before MatchBranchSimplification
|
||||
+ // MIR for `match_nested_if` after MatchBranchSimplification
|
||||
|
||||
fn match_nested_if() -> bool {
|
||||
let mut _0: bool; // return place in scope 0 at $DIR/matches_reduce_branches.rs:+0:25: +0:29
|
||||
let _1: bool; // in scope 0 at $DIR/matches_reduce_branches.rs:+1:9: +1:12
|
||||
let mut _2: (); // in scope 0 at $DIR/matches_reduce_branches.rs:+1:21: +1:23
|
||||
let mut _3: bool; // in scope 0 at $DIR/matches_reduce_branches.rs:+2:15: +6:10
|
||||
let mut _4: bool; // in scope 0 at $DIR/matches_reduce_branches.rs:+2:18: +2:76
|
||||
let mut _5: bool; // in scope 0 at $DIR/matches_reduce_branches.rs:+2:21: +2:52
|
||||
let mut _6: bool; // in scope 0 at $DIR/matches_reduce_branches.rs:+2:24: +2:28
|
||||
+ let mut _7: bool; // in scope 0 at $DIR/matches_reduce_branches.rs:+2:24: +2:28
|
||||
+ let mut _8: bool; // in scope 0 at $DIR/matches_reduce_branches.rs:+2:21: +2:52
|
||||
+ let mut _9: bool; // in scope 0 at $DIR/matches_reduce_branches.rs:+2:18: +2:76
|
||||
+ let mut _10: bool; // in scope 0 at $DIR/matches_reduce_branches.rs:+2:15: +6:10
|
||||
scope 1 {
|
||||
debug val => _1; // in scope 1 at $DIR/matches_reduce_branches.rs:+1:9: +1:12
|
||||
}
|
||||
|
||||
bb0: {
|
||||
StorageLive(_1); // scope 0 at $DIR/matches_reduce_branches.rs:+1:9: +1:12
|
||||
StorageLive(_2); // scope 0 at $DIR/matches_reduce_branches.rs:+1:21: +1:23
|
||||
Deinit(_2); // scope 0 at $DIR/matches_reduce_branches.rs:+1:21: +1:23
|
||||
StorageLive(_3); // scope 0 at $DIR/matches_reduce_branches.rs:+2:15: +6:10
|
||||
StorageLive(_4); // scope 0 at $DIR/matches_reduce_branches.rs:+2:18: +2:76
|
||||
StorageLive(_5); // scope 0 at $DIR/matches_reduce_branches.rs:+2:21: +2:52
|
||||
StorageLive(_6); // scope 0 at $DIR/matches_reduce_branches.rs:+2:24: +2:28
|
||||
_6 = const true; // scope 0 at $DIR/matches_reduce_branches.rs:+2:24: +2:28
|
||||
- switchInt(move _6) -> [false: bb2, otherwise: bb1]; // scope 0 at $DIR/matches_reduce_branches.rs:+2:24: +2:28
|
||||
- }
|
||||
-
|
||||
- bb1: {
|
||||
- _5 = const true; // scope 0 at $DIR/matches_reduce_branches.rs:+2:31: +2:35
|
||||
- goto -> bb3; // scope 0 at $DIR/matches_reduce_branches.rs:+2:21: +2:52
|
||||
- }
|
||||
-
|
||||
- bb2: {
|
||||
- _5 = const false; // scope 0 at $DIR/matches_reduce_branches.rs:+2:45: +2:50
|
||||
- goto -> bb3; // scope 0 at $DIR/matches_reduce_branches.rs:+2:21: +2:52
|
||||
- }
|
||||
-
|
||||
- bb3: {
|
||||
+ StorageLive(_7); // scope 0 at $DIR/matches_reduce_branches.rs:+2:24: +2:28
|
||||
+ _7 = move _6; // scope 0 at $DIR/matches_reduce_branches.rs:+2:24: +2:28
|
||||
+ _5 = Ne(_7, const false); // scope 0 at $DIR/matches_reduce_branches.rs:+2:45: +2:50
|
||||
+ StorageDead(_7); // scope 0 at $DIR/matches_reduce_branches.rs:+2:24: +2:28
|
||||
StorageDead(_6); // scope 0 at $DIR/matches_reduce_branches.rs:+2:51: +2:52
|
||||
- switchInt(move _5) -> [false: bb5, otherwise: bb4]; // scope 0 at $DIR/matches_reduce_branches.rs:+2:21: +2:52
|
||||
- }
|
||||
-
|
||||
- bb4: {
|
||||
- _4 = const true; // scope 0 at $DIR/matches_reduce_branches.rs:+2:55: +2:59
|
||||
- goto -> bb6; // scope 0 at $DIR/matches_reduce_branches.rs:+2:18: +2:76
|
||||
- }
|
||||
-
|
||||
- bb5: {
|
||||
- _4 = const false; // scope 0 at $DIR/matches_reduce_branches.rs:+2:69: +2:74
|
||||
- goto -> bb6; // scope 0 at $DIR/matches_reduce_branches.rs:+2:18: +2:76
|
||||
- }
|
||||
-
|
||||
- bb6: {
|
||||
+ StorageLive(_8); // scope 0 at $DIR/matches_reduce_branches.rs:+2:21: +2:52
|
||||
+ _8 = move _5; // scope 0 at $DIR/matches_reduce_branches.rs:+2:21: +2:52
|
||||
+ _4 = Ne(_8, const false); // scope 0 at $DIR/matches_reduce_branches.rs:+2:69: +2:74
|
||||
+ StorageDead(_8); // scope 0 at $DIR/matches_reduce_branches.rs:+2:21: +2:52
|
||||
StorageDead(_5); // scope 0 at $DIR/matches_reduce_branches.rs:+2:75: +2:76
|
||||
- switchInt(move _4) -> [false: bb8, otherwise: bb7]; // scope 0 at $DIR/matches_reduce_branches.rs:+2:18: +2:76
|
||||
- }
|
||||
-
|
||||
- bb7: {
|
||||
- _3 = const true; // scope 0 at $DIR/matches_reduce_branches.rs:+3:13: +3:17
|
||||
- goto -> bb9; // scope 0 at $DIR/matches_reduce_branches.rs:+2:15: +6:10
|
||||
- }
|
||||
-
|
||||
- bb8: {
|
||||
- _3 = const false; // scope 0 at $DIR/matches_reduce_branches.rs:+5:13: +5:18
|
||||
- goto -> bb9; // scope 0 at $DIR/matches_reduce_branches.rs:+2:15: +6:10
|
||||
- }
|
||||
-
|
||||
- bb9: {
|
||||
- switchInt(move _3) -> [false: bb11, otherwise: bb10]; // scope 0 at $DIR/matches_reduce_branches.rs:+2:15: +6:10
|
||||
- }
|
||||
-
|
||||
- bb10: {
|
||||
+ StorageLive(_9); // scope 0 at $DIR/matches_reduce_branches.rs:+2:18: +2:76
|
||||
+ _9 = move _4; // scope 0 at $DIR/matches_reduce_branches.rs:+2:18: +2:76
|
||||
+ _3 = Ne(_9, const false); // scope 0 at $DIR/matches_reduce_branches.rs:+5:13: +5:18
|
||||
+ StorageDead(_9); // scope 0 at $DIR/matches_reduce_branches.rs:+2:18: +2:76
|
||||
+ StorageLive(_10); // scope 0 at $DIR/matches_reduce_branches.rs:+2:15: +6:10
|
||||
+ _10 = move _3; // scope 0 at $DIR/matches_reduce_branches.rs:+2:15: +6:10
|
||||
StorageDead(_4); // scope 0 at $DIR/matches_reduce_branches.rs:+6:9: +6:10
|
||||
StorageDead(_3); // scope 0 at $DIR/matches_reduce_branches.rs:+6:9: +6:10
|
||||
- _1 = const true; // scope 0 at $DIR/matches_reduce_branches.rs:+8:13: +8:17
|
||||
- goto -> bb12; // scope 0 at $DIR/matches_reduce_branches.rs:+8:13: +8:17
|
||||
- }
|
||||
-
|
||||
- bb11: {
|
||||
- StorageDead(_4); // scope 0 at $DIR/matches_reduce_branches.rs:+6:9: +6:10
|
||||
- StorageDead(_3); // scope 0 at $DIR/matches_reduce_branches.rs:+6:9: +6:10
|
||||
- _1 = const false; // scope 0 at $DIR/matches_reduce_branches.rs:+10:14: +10:19
|
||||
- goto -> bb12; // scope 0 at $DIR/matches_reduce_branches.rs:+10:14: +10:19
|
||||
- }
|
||||
-
|
||||
- bb12: {
|
||||
+ _1 = Ne(_10, const false); // scope 0 at $DIR/matches_reduce_branches.rs:+10:14: +10:19
|
||||
+ StorageDead(_10); // scope 0 at $DIR/matches_reduce_branches.rs:+2:15: +6:10
|
||||
StorageDead(_2); // scope 0 at $DIR/matches_reduce_branches.rs:+11:6: +11:7
|
||||
_0 = _1; // scope 1 at $DIR/matches_reduce_branches.rs:+12:5: +12:8
|
||||
StorageDead(_1); // scope 0 at $DIR/matches_reduce_branches.rs:+13:1: +13:2
|
||||
return; // scope 0 at $DIR/matches_reduce_branches.rs:+13:2: +13:2
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
// unit-test: MatchBranchSimplification
|
||||
|
||||
// EMIT_MIR_FOR_EACH_BIT_WIDTH
|
||||
|
||||
// EMIT_MIR matches_reduce_branches.foo.MatchBranchSimplification.diff
|
||||
// EMIT_MIR matches_reduce_branches.bar.MatchBranchSimplification.diff
|
||||
// EMIT_MIR matches_reduce_branches.match_nested_if.MatchBranchSimplification.diff
|
||||
|
@ -1,32 +0,0 @@
|
||||
- // MIR for `exhaustive_match` before MatchBranchSimplification
|
||||
+ // MIR for `exhaustive_match` after MatchBranchSimplification
|
||||
|
||||
fn exhaustive_match(_1: E) -> u8 {
|
||||
debug e => _1; // in scope 0 at $DIR/matches_u8.rs:+0:25: +0:26
|
||||
let mut _0: u8; // return place in scope 0 at $DIR/matches_u8.rs:+0:34: +0:36
|
||||
let mut _2: isize; // in scope 0 at $DIR/matches_u8.rs:+2:9: +2:13
|
||||
|
||||
bb0: {
|
||||
_2 = discriminant(_1); // scope 0 at $DIR/matches_u8.rs:+1:11: +1:12
|
||||
switchInt(move _2) -> [0_isize: bb3, 1_isize: bb1, otherwise: bb2]; // scope 0 at $DIR/matches_u8.rs:+1:5: +1:12
|
||||
}
|
||||
|
||||
bb1: {
|
||||
_0 = const 1_u8; // scope 0 at $DIR/matches_u8.rs:+3:17: +3:18
|
||||
goto -> bb4; // scope 0 at $DIR/matches_u8.rs:+3:17: +3:18
|
||||
}
|
||||
|
||||
bb2: {
|
||||
unreachable; // scope 0 at $DIR/matches_u8.rs:+1:11: +1:12
|
||||
}
|
||||
|
||||
bb3: {
|
||||
_0 = const 0_u8; // scope 0 at $DIR/matches_u8.rs:+2:17: +2:18
|
||||
goto -> bb4; // scope 0 at $DIR/matches_u8.rs:+2:17: +2:18
|
||||
}
|
||||
|
||||
bb4: {
|
||||
return; // scope 0 at $DIR/matches_u8.rs:+5:2: +5:2
|
||||
}
|
||||
}
|
||||
|
@ -1,32 +0,0 @@
|
||||
- // MIR for `exhaustive_match_i8` before MatchBranchSimplification
|
||||
+ // MIR for `exhaustive_match_i8` after MatchBranchSimplification
|
||||
|
||||
fn exhaustive_match_i8(_1: E) -> i8 {
|
||||
debug e => _1; // in scope 0 at $DIR/matches_u8.rs:+0:28: +0:29
|
||||
let mut _0: i8; // return place in scope 0 at $DIR/matches_u8.rs:+0:37: +0:39
|
||||
let mut _2: isize; // in scope 0 at $DIR/matches_u8.rs:+2:9: +2:13
|
||||
|
||||
bb0: {
|
||||
_2 = discriminant(_1); // scope 0 at $DIR/matches_u8.rs:+1:11: +1:12
|
||||
switchInt(move _2) -> [0_isize: bb3, 1_isize: bb1, otherwise: bb2]; // scope 0 at $DIR/matches_u8.rs:+1:5: +1:12
|
||||
}
|
||||
|
||||
bb1: {
|
||||
_0 = const 1_i8; // scope 0 at $DIR/matches_u8.rs:+3:17: +3:18
|
||||
goto -> bb4; // scope 0 at $DIR/matches_u8.rs:+3:17: +3:18
|
||||
}
|
||||
|
||||
bb2: {
|
||||
unreachable; // scope 0 at $DIR/matches_u8.rs:+1:11: +1:12
|
||||
}
|
||||
|
||||
bb3: {
|
||||
_0 = const 0_i8; // scope 0 at $DIR/matches_u8.rs:+2:17: +2:18
|
||||
goto -> bb4; // scope 0 at $DIR/matches_u8.rs:+2:17: +2:18
|
||||
}
|
||||
|
||||
bb4: {
|
||||
return; // scope 0 at $DIR/matches_u8.rs:+5:2: +5:2
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
// unit-test: MatchBranchSimplification
|
||||
|
||||
// EMIT_MIR_FOR_EACH_BIT_WIDTH
|
||||
|
||||
// EMIT_MIR matches_u8.exhaustive_match.MatchBranchSimplification.diff
|
||||
// EMIT_MIR matches_u8.exhaustive_match_i8.MatchBranchSimplification.diff
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
// ignore-wasm32-bare compiled with panic=abort by default
|
||||
|
||||
// EMIT_MIR_FOR_EACH_BIT_WIDTH
|
||||
|
||||
// EMIT_MIR packed_struct_drop_aligned.main.SimplifyCfg-elaborate-drops.after.mir
|
||||
fn main() {
|
||||
let mut x = Packed(Aligned(Droppy(0)));
|
||||
|
@ -1,60 +0,0 @@
|
||||
// MIR for `main` after SimplifyCfg-elaborate-drops
|
||||
|
||||
fn main() -> () {
|
||||
let mut _0: (); // return place in scope 0 at $DIR/packed-struct-drop-aligned.rs:+0:11: +0:11
|
||||
let mut _1: Packed; // in scope 0 at $DIR/packed-struct-drop-aligned.rs:+1:9: +1:14
|
||||
let mut _2: Aligned; // in scope 0 at $DIR/packed-struct-drop-aligned.rs:+1:24: +1:42
|
||||
let mut _3: Droppy; // in scope 0 at $DIR/packed-struct-drop-aligned.rs:+1:32: +1:41
|
||||
let mut _4: Aligned; // in scope 0 at $DIR/packed-struct-drop-aligned.rs:+2:11: +2:29
|
||||
let mut _5: Droppy; // in scope 0 at $DIR/packed-struct-drop-aligned.rs:+2:19: +2:28
|
||||
let mut _6: Aligned; // in scope 0 at $DIR/packed-struct-drop-aligned.rs:+2:5: +2:8
|
||||
scope 1 {
|
||||
debug x => _1; // in scope 1 at $DIR/packed-struct-drop-aligned.rs:+1:9: +1:14
|
||||
}
|
||||
|
||||
bb0: {
|
||||
StorageLive(_1); // scope 0 at $DIR/packed-struct-drop-aligned.rs:+1:9: +1:14
|
||||
StorageLive(_2); // scope 0 at $DIR/packed-struct-drop-aligned.rs:+1:24: +1:42
|
||||
StorageLive(_3); // scope 0 at $DIR/packed-struct-drop-aligned.rs:+1:32: +1:41
|
||||
Deinit(_3); // scope 0 at $DIR/packed-struct-drop-aligned.rs:+1:32: +1:41
|
||||
(_3.0: usize) = const 0_usize; // scope 0 at $DIR/packed-struct-drop-aligned.rs:+1:32: +1:41
|
||||
Deinit(_2); // scope 0 at $DIR/packed-struct-drop-aligned.rs:+1:24: +1:42
|
||||
(_2.0: Droppy) = move _3; // scope 0 at $DIR/packed-struct-drop-aligned.rs:+1:24: +1:42
|
||||
StorageDead(_3); // scope 0 at $DIR/packed-struct-drop-aligned.rs:+1:41: +1:42
|
||||
Deinit(_1); // scope 0 at $DIR/packed-struct-drop-aligned.rs:+1:17: +1:43
|
||||
(_1.0: Aligned) = move _2; // scope 0 at $DIR/packed-struct-drop-aligned.rs:+1:17: +1:43
|
||||
StorageDead(_2); // scope 0 at $DIR/packed-struct-drop-aligned.rs:+1:42: +1:43
|
||||
StorageLive(_4); // scope 1 at $DIR/packed-struct-drop-aligned.rs:+2:11: +2:29
|
||||
StorageLive(_5); // scope 1 at $DIR/packed-struct-drop-aligned.rs:+2:19: +2:28
|
||||
Deinit(_5); // scope 1 at $DIR/packed-struct-drop-aligned.rs:+2:19: +2:28
|
||||
(_5.0: usize) = const 0_usize; // scope 1 at $DIR/packed-struct-drop-aligned.rs:+2:19: +2:28
|
||||
Deinit(_4); // scope 1 at $DIR/packed-struct-drop-aligned.rs:+2:11: +2:29
|
||||
(_4.0: Droppy) = move _5; // scope 1 at $DIR/packed-struct-drop-aligned.rs:+2:11: +2:29
|
||||
StorageDead(_5); // scope 1 at $DIR/packed-struct-drop-aligned.rs:+2:28: +2:29
|
||||
StorageLive(_6); // scope 1 at $DIR/packed-struct-drop-aligned.rs:+2:5: +2:8
|
||||
_6 = move (_1.0: Aligned); // scope 1 at $DIR/packed-struct-drop-aligned.rs:+2:5: +2:8
|
||||
drop(_6) -> [return: bb4, unwind: bb3]; // scope 1 at $DIR/packed-struct-drop-aligned.rs:+2:5: +2:8
|
||||
}
|
||||
|
||||
bb1: {
|
||||
StorageDead(_1); // scope 0 at $DIR/packed-struct-drop-aligned.rs:+3:1: +3:2
|
||||
return; // scope 0 at $DIR/packed-struct-drop-aligned.rs:+3:2: +3:2
|
||||
}
|
||||
|
||||
bb2 (cleanup): {
|
||||
resume; // scope 0 at $DIR/packed-struct-drop-aligned.rs:+0:1: +3:2
|
||||
}
|
||||
|
||||
bb3 (cleanup): {
|
||||
(_1.0: Aligned) = move _4; // scope 1 at $DIR/packed-struct-drop-aligned.rs:+2:5: +2:8
|
||||
drop(_1) -> bb2; // scope 0 at $DIR/packed-struct-drop-aligned.rs:+3:1: +3:2
|
||||
}
|
||||
|
||||
bb4: {
|
||||
StorageDead(_6); // scope 1 at $DIR/packed-struct-drop-aligned.rs:+2:5: +2:8
|
||||
(_1.0: Aligned) = move _4; // scope 1 at $DIR/packed-struct-drop-aligned.rs:+2:5: +2:8
|
||||
StorageDead(_4); // scope 1 at $DIR/packed-struct-drop-aligned.rs:+2:28: +2:29
|
||||
_0 = const (); // scope 0 at $DIR/packed-struct-drop-aligned.rs:+0:11: +3:2
|
||||
drop(_1) -> [return: bb1, unwind: bb2]; // scope 0 at $DIR/packed-struct-drop-aligned.rs:+3:1: +3:2
|
||||
}
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
// Test that we don't generate unnecessarily large MIR for very simple matches
|
||||
|
||||
// EMIT_MIR_FOR_EACH_BIT_WIDTH
|
||||
|
||||
// EMIT_MIR simple_match.match_bool.mir_map.0.mir
|
||||
fn match_bool(x: bool) -> usize {
|
||||
match x {
|
||||
|
@ -1,29 +0,0 @@
|
||||
// MIR for `match_bool` 0 mir_map
|
||||
|
||||
fn match_bool(_1: bool) -> usize {
|
||||
debug x => _1; // in scope 0 at $DIR/simple-match.rs:+0:15: +0:16
|
||||
let mut _0: usize; // return place in scope 0 at $DIR/simple-match.rs:+0:27: +0:32
|
||||
|
||||
bb0: {
|
||||
FakeRead(ForMatchedPlace(None), _1); // scope 0 at $DIR/simple-match.rs:+1:11: +1:12
|
||||
switchInt(_1) -> [false: bb2, otherwise: bb1]; // scope 0 at $DIR/simple-match.rs:+1:5: +1:12
|
||||
}
|
||||
|
||||
bb1: {
|
||||
falseEdge -> [real: bb3, imaginary: bb2]; // scope 0 at $DIR/simple-match.rs:+2:9: +2:13
|
||||
}
|
||||
|
||||
bb2: {
|
||||
_0 = const 20_usize; // scope 0 at $DIR/simple-match.rs:+3:14: +3:16
|
||||
goto -> bb4; // scope 0 at $DIR/simple-match.rs:+3:14: +3:16
|
||||
}
|
||||
|
||||
bb3: {
|
||||
_0 = const 10_usize; // scope 0 at $DIR/simple-match.rs:+2:17: +2:19
|
||||
goto -> bb4; // scope 0 at $DIR/simple-match.rs:+2:17: +2:19
|
||||
}
|
||||
|
||||
bb4: {
|
||||
return; // scope 0 at $DIR/simple-match.rs:+5:2: +5:2
|
||||
}
|
||||
}
|
@ -11,5 +11,4 @@ fn main() {
|
||||
map(None);
|
||||
}
|
||||
|
||||
// EMIT_MIR_FOR_EACH_BIT_WIDTH
|
||||
// EMIT_MIR simplify_locals_removes_unused_discriminant_reads.map.SimplifyLocals.diff
|
||||
|
@ -1,52 +0,0 @@
|
||||
- // MIR for `map` before SimplifyLocals
|
||||
+ // MIR for `map` after SimplifyLocals
|
||||
|
||||
fn map(_1: Option<Box<()>>) -> Option<Box<()>> {
|
||||
debug x => _1; // in scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+0:8: +0:9
|
||||
let mut _0: std::option::Option<std::boxed::Box<()>>; // return place in scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+0:31: +0:46
|
||||
let mut _2: isize; // in scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+2:9: +2:13
|
||||
let _3: std::boxed::Box<()>; // in scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+3:14: +3:15
|
||||
let mut _4: std::boxed::Box<()>; // in scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+3:25: +3:26
|
||||
- let mut _5: bool; // in scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+5:1: +5:2
|
||||
- let mut _6: isize; // in scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+5:1: +5:2
|
||||
- let mut _7: isize; // in scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+5:1: +5:2
|
||||
scope 1 {
|
||||
debug x => _3; // in scope 1 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+3:14: +3:15
|
||||
}
|
||||
|
||||
bb0: {
|
||||
- _5 = const false; // scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+1:11: +1:12
|
||||
- _5 = const true; // scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+1:11: +1:12
|
||||
_2 = discriminant(_1); // scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+1:11: +1:12
|
||||
switchInt(move _2) -> [0_isize: bb3, 1_isize: bb1, otherwise: bb2]; // scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+1:5: +1:12
|
||||
}
|
||||
|
||||
bb1: {
|
||||
StorageLive(_3); // scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+3:14: +3:15
|
||||
_3 = move ((_1 as Some).0: std::boxed::Box<()>); // scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+3:14: +3:15
|
||||
StorageLive(_4); // scope 1 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+3:25: +3:26
|
||||
_4 = move _3; // scope 1 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+3:25: +3:26
|
||||
Deinit(_0); // scope 1 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+3:20: +3:27
|
||||
((_0 as Some).0: std::boxed::Box<()>) = move _4; // scope 1 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+3:20: +3:27
|
||||
discriminant(_0) = 1; // scope 1 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+3:20: +3:27
|
||||
StorageDead(_4); // scope 1 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+3:26: +3:27
|
||||
StorageDead(_3); // scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+3:26: +3:27
|
||||
goto -> bb4; // scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+3:26: +3:27
|
||||
}
|
||||
|
||||
bb2: {
|
||||
unreachable; // scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+1:11: +1:12
|
||||
}
|
||||
|
||||
bb3: {
|
||||
Deinit(_0); // scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+2:17: +2:21
|
||||
discriminant(_0) = 0; // scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+2:17: +2:21
|
||||
goto -> bb4; // scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+2:17: +2:21
|
||||
}
|
||||
|
||||
bb4: {
|
||||
- _6 = discriminant(_1); // scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+5:1: +5:2
|
||||
return; // scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+5:2: +5:2
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
// compile-flags: -Zmir-opt-level=0
|
||||
|
||||
// EMIT_MIR_FOR_EACH_BIT_WIDTH
|
||||
|
||||
// EMIT_MIR core.ptr-drop_in_place.[String].AddMovesForPackedDrops.before.mir
|
||||
fn main() {
|
||||
let _fn = std::ptr::drop_in_place::<[String]> as unsafe fn(_);
|
||||
|
@ -1,101 +0,0 @@
|
||||
// MIR for `std::ptr::drop_in_place` before AddMovesForPackedDrops
|
||||
|
||||
fn std::ptr::drop_in_place(_1: *mut [String]) -> () {
|
||||
let mut _0: (); // return place in scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
|
||||
let mut _2: usize; // in scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
|
||||
let mut _3: usize; // in scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
|
||||
let mut _4: usize; // in scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
|
||||
let mut _5: *mut std::string::String; // in scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
|
||||
let mut _6: bool; // in scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
|
||||
let mut _7: *mut std::string::String; // in scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
|
||||
let mut _8: bool; // in scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
|
||||
let mut _9: *mut std::string::String; // in scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
|
||||
let mut _10: *mut std::string::String; // in scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
|
||||
let mut _11: *mut std::string::String; // in scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
|
||||
let mut _12: bool; // in scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
|
||||
let mut _13: *mut std::string::String; // in scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
|
||||
let mut _14: bool; // in scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
|
||||
let mut _15: *mut [std::string::String]; // in scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
|
||||
|
||||
bb0: {
|
||||
goto -> bb15; // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
|
||||
}
|
||||
|
||||
bb1: {
|
||||
return; // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
|
||||
}
|
||||
|
||||
bb2 (cleanup): {
|
||||
resume; // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
|
||||
}
|
||||
|
||||
bb3 (cleanup): {
|
||||
_5 = &raw mut (*_1)[_4]; // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
|
||||
_4 = Add(move _4, const 1_usize); // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
|
||||
drop((*_5)) -> bb4; // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
|
||||
}
|
||||
|
||||
bb4 (cleanup): {
|
||||
_6 = Eq(_4, _3); // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
|
||||
switchInt(move _6) -> [false: bb3, otherwise: bb2]; // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
|
||||
}
|
||||
|
||||
bb5: {
|
||||
_7 = &raw mut (*_1)[_4]; // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
|
||||
_4 = Add(move _4, const 1_usize); // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
|
||||
drop((*_7)) -> [return: bb6, unwind: bb4]; // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
|
||||
}
|
||||
|
||||
bb6: {
|
||||
_8 = Eq(_4, _3); // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
|
||||
switchInt(move _8) -> [false: bb5, otherwise: bb1]; // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
|
||||
}
|
||||
|
||||
bb7: {
|
||||
_4 = const 0_usize; // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
|
||||
goto -> bb6; // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
|
||||
}
|
||||
|
||||
bb8: {
|
||||
goto -> bb7; // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
|
||||
}
|
||||
|
||||
bb9 (cleanup): {
|
||||
_11 = _9; // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
|
||||
_9 = Offset(move _9, const 1_usize); // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
|
||||
drop((*_11)) -> bb10; // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
|
||||
}
|
||||
|
||||
bb10 (cleanup): {
|
||||
_12 = Eq(_9, _10); // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
|
||||
switchInt(move _12) -> [false: bb9, otherwise: bb2]; // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
|
||||
}
|
||||
|
||||
bb11: {
|
||||
_13 = _9; // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
|
||||
_9 = Offset(move _9, const 1_usize); // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
|
||||
drop((*_13)) -> [return: bb12, unwind: bb10]; // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
|
||||
}
|
||||
|
||||
bb12: {
|
||||
_14 = Eq(_9, _10); // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
|
||||
switchInt(move _14) -> [false: bb11, otherwise: bb1]; // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
|
||||
}
|
||||
|
||||
bb13: {
|
||||
_15 = &raw mut (*_1); // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
|
||||
_9 = move _15 as *mut std::string::String (Misc); // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
|
||||
_10 = Offset(_9, move _3); // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
|
||||
goto -> bb12; // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
|
||||
}
|
||||
|
||||
bb14: {
|
||||
goto -> bb13; // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
|
||||
}
|
||||
|
||||
bb15: {
|
||||
_2 = SizeOf(std::string::String); // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
|
||||
_3 = Len((*_1)); // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
|
||||
switchInt(move _2) -> [0_usize: bb8, otherwise: bb14]; // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
|
||||
}
|
||||
}
|
@ -1,7 +1,7 @@
|
||||
// Test that we don't ICE when trying to dump MIR for unusual item types and
|
||||
// that we don't create filenames containing `<` and `>`
|
||||
// compile-flags: -Zmir-opt-level=0
|
||||
// EMIT_MIR_FOR_EACH_BIT_WIDTH
|
||||
|
||||
|
||||
struct A;
|
||||
|
||||
|
@ -1,10 +0,0 @@
|
||||
// MIR for `E::V::{constant#0}` 0 mir_map
|
||||
|
||||
E::V::{constant#0}: isize = {
|
||||
let mut _0: isize; // return place in scope 0 at $DIR/unusual-item-types.rs:+0:9: +0:10
|
||||
|
||||
bb0: {
|
||||
_0 = const 5_isize; // scope 0 at $DIR/unusual-item-types.rs:+0:9: +0:10
|
||||
return; // scope 0 at $DIR/unusual-item-types.rs:+0:9: +0:10
|
||||
}
|
||||
}
|
@ -1,12 +0,0 @@
|
||||
// MIR for `Test::X` 0 mir_map
|
||||
|
||||
fn Test::X(_1: usize) -> Test {
|
||||
let mut _0: Test; // return place in scope 0 at $DIR/unusual-item-types.rs:+0:5: +0:6
|
||||
|
||||
bb0: {
|
||||
Deinit(_0); // scope 0 at $DIR/unusual-item-types.rs:+0:5: +0:6
|
||||
((_0 as X).0: usize) = move _1; // scope 0 at $DIR/unusual-item-types.rs:+0:5: +0:6
|
||||
discriminant(_0) = 0; // scope 0 at $DIR/unusual-item-types.rs:+0:5: +0:6
|
||||
return; // scope 0 at $DIR/unusual-item-types.rs:+0:5: +0:6
|
||||
}
|
||||
}
|
@ -1,39 +0,0 @@
|
||||
// MIR for `std::ptr::drop_in_place` before AddMovesForPackedDrops
|
||||
|
||||
fn std::ptr::drop_in_place(_1: *mut Vec<i32>) -> () {
|
||||
let mut _0: (); // return place in scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
|
||||
let mut _2: &mut std::vec::Vec<i32>; // in scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
|
||||
let mut _3: (); // in scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
|
||||
|
||||
bb0: {
|
||||
goto -> bb6; // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
|
||||
}
|
||||
|
||||
bb1: {
|
||||
return; // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
|
||||
}
|
||||
|
||||
bb2 (cleanup): {
|
||||
resume; // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
|
||||
}
|
||||
|
||||
bb3: {
|
||||
goto -> bb1; // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
|
||||
}
|
||||
|
||||
bb4 (cleanup): {
|
||||
drop(((*_1).0: alloc::raw_vec::RawVec<i32>)) -> bb2; // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
|
||||
}
|
||||
|
||||
bb5: {
|
||||
drop(((*_1).0: alloc::raw_vec::RawVec<i32>)) -> [return: bb3, unwind: bb2]; // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
|
||||
}
|
||||
|
||||
bb6: {
|
||||
_2 = &mut (*_1); // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
|
||||
_3 = <Vec<i32> as Drop>::drop(move _2) -> [return: bb5, unwind: bb4]; // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
|
||||
// mir::Constant
|
||||
// + span: $SRC_DIR/core/src/ptr/mod.rs:LL:COL
|
||||
// + literal: Const { ty: for<'r> fn(&'r mut Vec<i32>) {<Vec<i32> as Drop>::drop}, val: Value(<ZST>) }
|
||||
}
|
||||
}
|
@ -1,10 +0,0 @@
|
||||
// MIR for `<impl at $DIR/unusual-item-types.rs:9:1: 9:7>::ASSOCIATED_CONSTANT` 0 mir_map
|
||||
|
||||
const <impl at $DIR/unusual-item-types.rs:9:1: 9:7>::ASSOCIATED_CONSTANT: i32 = {
|
||||
let mut _0: i32; // return place in scope 0 at $DIR/unusual-item-types.rs:+0:32: +0:35
|
||||
|
||||
bb0: {
|
||||
_0 = const 2_i32; // scope 0 at $DIR/unusual-item-types.rs:+0:38: +0:39
|
||||
return; // scope 0 at $DIR/unusual-item-types.rs:+0:5: +0:39
|
||||
}
|
||||
}
|
@ -1,55 +0,0 @@
|
||||
- // MIR for `change_loop_body` before ConstProp
|
||||
+ // MIR for `change_loop_body` after ConstProp
|
||||
|
||||
fn change_loop_body() -> () {
|
||||
let mut _0: (); // return place in scope 0 at $DIR/while_let_loops.rs:+0:27: +0:27
|
||||
let mut _1: i32; // in scope 0 at $DIR/while_let_loops.rs:+1:9: +1:15
|
||||
let mut _2: (); // in scope 0 at $DIR/while_let_loops.rs:+0:1: +6:2
|
||||
let mut _3: std::option::Option<u32>; // in scope 0 at $DIR/while_let_loops.rs:+2:28: +2:32
|
||||
let mut _4: isize; // in scope 0 at $DIR/while_let_loops.rs:+2:15: +2:25
|
||||
let mut _5: !; // in scope 0 at $DIR/while_let_loops.rs:+2:33: +5:6
|
||||
let mut _6: !; // in scope 0 at $DIR/while_let_loops.rs:+2:5: +5:6
|
||||
let _7: (); // in scope 0 at $DIR/while_let_loops.rs:+2:5: +5:6
|
||||
let mut _8: !; // in scope 0 at $DIR/while_let_loops.rs:+2:5: +5:6
|
||||
scope 1 {
|
||||
debug _x => _1; // in scope 1 at $DIR/while_let_loops.rs:+1:9: +1:15
|
||||
scope 2 {
|
||||
}
|
||||
}
|
||||
|
||||
bb0: {
|
||||
StorageLive(_1); // scope 0 at $DIR/while_let_loops.rs:+1:9: +1:15
|
||||
_1 = const 0_i32; // scope 0 at $DIR/while_let_loops.rs:+1:18: +1:19
|
||||
StorageLive(_3); // scope 2 at $DIR/while_let_loops.rs:+2:28: +2:32
|
||||
Deinit(_3); // scope 2 at $DIR/while_let_loops.rs:+2:28: +2:32
|
||||
discriminant(_3) = 0; // scope 2 at $DIR/while_let_loops.rs:+2:28: +2:32
|
||||
- _4 = discriminant(_3); // scope 2 at $DIR/while_let_loops.rs:+2:15: +2:25
|
||||
- switchInt(move _4) -> [1_isize: bb1, otherwise: bb3]; // scope 2 at $DIR/while_let_loops.rs:+2:15: +2:25
|
||||
+ _4 = const 0_isize; // scope 2 at $DIR/while_let_loops.rs:+2:15: +2:25
|
||||
+ switchInt(const 0_isize) -> [1_isize: bb1, otherwise: bb3]; // scope 2 at $DIR/while_let_loops.rs:+2:15: +2:25
|
||||
}
|
||||
|
||||
bb1: {
|
||||
switchInt(((_3 as Some).0: u32)) -> [0_u32: bb2, otherwise: bb3]; // scope 2 at $DIR/while_let_loops.rs:+2:15: +2:25
|
||||
}
|
||||
|
||||
bb2: {
|
||||
_1 = const 1_i32; // scope 2 at $DIR/while_let_loops.rs:+3:9: +3:15
|
||||
nop; // scope 2 at $DIR/while_let_loops.rs:+4:9: +4:14
|
||||
goto -> bb4; // scope 2 at $DIR/while_let_loops.rs:+4:9: +4:14
|
||||
}
|
||||
|
||||
bb3: {
|
||||
StorageLive(_7); // scope 1 at $DIR/while_let_loops.rs:+2:5: +5:6
|
||||
nop; // scope 1 at $DIR/while_let_loops.rs:+2:5: +5:6
|
||||
StorageDead(_7); // scope 1 at $DIR/while_let_loops.rs:+5:5: +5:6
|
||||
goto -> bb4; // scope 1 at no-location
|
||||
}
|
||||
|
||||
bb4: {
|
||||
StorageDead(_3); // scope 1 at $DIR/while_let_loops.rs:+5:5: +5:6
|
||||
StorageDead(_1); // scope 0 at $DIR/while_let_loops.rs:+6:1: +6:2
|
||||
return; // scope 0 at $DIR/while_let_loops.rs:+6:2: +6:2
|
||||
}
|
||||
}
|
||||
|
@ -1,17 +0,0 @@
|
||||
// MIR for `change_loop_body` after PreCodegen
|
||||
|
||||
fn change_loop_body() -> () {
|
||||
let mut _0: (); // return place in scope 0 at $DIR/while_let_loops.rs:+0:27: +0:27
|
||||
let mut _1: i32; // in scope 0 at $DIR/while_let_loops.rs:+1:9: +1:15
|
||||
scope 1 {
|
||||
debug _x => _1; // in scope 1 at $DIR/while_let_loops.rs:+1:9: +1:15
|
||||
scope 2 {
|
||||
}
|
||||
}
|
||||
|
||||
bb0: {
|
||||
StorageLive(_1); // scope 0 at $DIR/while_let_loops.rs:+1:9: +1:15
|
||||
StorageDead(_1); // scope 0 at $DIR/while_let_loops.rs:+6:1: +6:2
|
||||
return; // scope 0 at $DIR/while_let_loops.rs:+6:2: +6:2
|
||||
}
|
||||
}
|
@ -1,6 +1,5 @@
|
||||
// EMIT_MIR while_let_loops.change_loop_body.ConstProp.diff
|
||||
// EMIT_MIR while_let_loops.change_loop_body.PreCodegen.after.mir
|
||||
// EMIT_MIR_FOR_EACH_BIT_WIDTH
|
||||
|
||||
pub fn change_loop_body() {
|
||||
let mut _x = 0;
|
||||
|
@ -17,7 +17,7 @@ pub mod l1 {
|
||||
pub mod l3 {
|
||||
|
||||
// @is "$.index[*][?(@.name=='L4')].kind" \"struct\"
|
||||
// @is "$.index[*][?(@.name=='L4')].inner.struct_type" \"unit\"
|
||||
// @is "$.index[*][?(@.name=='L4')].inner.kind" \"unit\"
|
||||
// @set l4_id = "$.index[*][?(@.name=='L4')].id"
|
||||
// @ismany "$.index[*][?(@.name=='l3')].inner.items[*]" $l4_id
|
||||
pub struct L4;
|
||||
|
11
src/test/rustdoc-json/structs/plain_all_pub.rs
Normal file
11
src/test/rustdoc-json/structs/plain_all_pub.rs
Normal file
@ -0,0 +1,11 @@
|
||||
pub struct Demo {
|
||||
pub x: i32,
|
||||
pub y: i32,
|
||||
}
|
||||
|
||||
// @set x = "$.index[*][?(@.name=='x')].id"
|
||||
// @set y = "$.index[*][?(@.name=='y')].id"
|
||||
// @is "$.index[*][?(@.name=='Demo')].inner.kind.plain.fields[0]" $x
|
||||
// @is "$.index[*][?(@.name=='Demo')].inner.kind.plain.fields[1]" $y
|
||||
// @count "$.index[*][?(@.name=='Demo')].inner.kind.plain.fields[*]" 2
|
||||
// @is "$.index[*][?(@.name=='Demo')].inner.kind.plain.fields_stripped" false
|
11
src/test/rustdoc-json/structs/plain_doc_hidden.rs
Normal file
11
src/test/rustdoc-json/structs/plain_doc_hidden.rs
Normal file
@ -0,0 +1,11 @@
|
||||
pub struct Demo {
|
||||
pub x: i32,
|
||||
#[doc(hidden)]
|
||||
pub y: i32,
|
||||
}
|
||||
|
||||
// @set x = "$.index[*][?(@.name=='x')].id"
|
||||
// @!has "$.index[*][?(@.name=='y')].id"
|
||||
// @is "$.index[*][?(@.name=='Demo')].inner.kind.plain.fields[0]" $x
|
||||
// @count "$.index[*][?(@.name=='Demo')].inner.kind.plain.fields[*]" 1
|
||||
// @is "$.index[*][?(@.name=='Demo')].inner.kind.plain.fields_stripped" true
|
@ -1,6 +1,5 @@
|
||||
// @has "$.index[*][?(@.name=='PlainEmpty')].visibility" \"public\"
|
||||
// @has "$.index[*][?(@.name=='PlainEmpty')].kind" \"struct\"
|
||||
// @has "$.index[*][?(@.name=='PlainEmpty')].inner.struct_type" \"plain\"
|
||||
// @has "$.index[*][?(@.name=='PlainEmpty')].inner.fields_stripped" false
|
||||
// @has "$.index[*][?(@.name=='PlainEmpty')].inner.fields" []
|
||||
// @is "$.index[*][?(@.name=='PlainEmpty')].visibility" \"public\"
|
||||
// @is "$.index[*][?(@.name=='PlainEmpty')].kind" \"struct\"
|
||||
// @is "$.index[*][?(@.name=='PlainEmpty')].inner.kind.plain.fields_stripped" false
|
||||
// @is "$.index[*][?(@.name=='PlainEmpty')].inner.kind.plain.fields" []
|
||||
pub struct PlainEmpty {}
|
||||
|
9
src/test/rustdoc-json/structs/plain_pub_priv.rs
Normal file
9
src/test/rustdoc-json/structs/plain_pub_priv.rs
Normal file
@ -0,0 +1,9 @@
|
||||
pub struct Demo {
|
||||
pub x: i32,
|
||||
y: i32,
|
||||
}
|
||||
|
||||
// @set x = "$.index[*][?(@.name=='x')].id"
|
||||
// @is "$.index[*][?(@.name=='Demo')].inner.kind.plain.fields[0]" $x
|
||||
// @count "$.index[*][?(@.name=='Demo')].inner.kind.plain.fields[*]" 1
|
||||
// @is "$.index[*][?(@.name=='Demo')].inner.kind.plain.fields_stripped" true
|
@ -1,5 +1,4 @@
|
||||
// @has "$.index[*][?(@.name=='Tuple')].visibility" \"public\"
|
||||
// @has "$.index[*][?(@.name=='Tuple')].kind" \"struct\"
|
||||
// @has "$.index[*][?(@.name=='Tuple')].inner.struct_type" \"tuple\"
|
||||
// @has "$.index[*][?(@.name=='Tuple')].inner.fields_stripped" true
|
||||
// @is "$.index[*][?(@.name=='Tuple')].visibility" \"public\"
|
||||
// @is "$.index[*][?(@.name=='Tuple')].kind" \"struct\"
|
||||
// @is "$.index[*][?(@.name=='Tuple')].inner.kind.tuple" '[null, null]'
|
||||
pub struct Tuple(u32, String);
|
||||
|
2
src/test/rustdoc-json/structs/tuple_empty.rs
Normal file
2
src/test/rustdoc-json/structs/tuple_empty.rs
Normal file
@ -0,0 +1,2 @@
|
||||
// @is "$.index[*][?(@.name=='TupleUnit')].inner.kind.tuple" []
|
||||
pub struct TupleUnit();
|
13
src/test/rustdoc-json/structs/tuple_pub_priv.rs
Normal file
13
src/test/rustdoc-json/structs/tuple_pub_priv.rs
Normal file
@ -0,0 +1,13 @@
|
||||
pub struct Demo(
|
||||
i32,
|
||||
/// field
|
||||
pub i32,
|
||||
#[doc(hidden)] i32,
|
||||
);
|
||||
|
||||
// @set field = "$.index[*][?(@.docs=='field')].id"
|
||||
|
||||
// @is "$.index[*][?(@.name=='Demo')].inner.kind.tuple[0]" null
|
||||
// @is "$.index[*][?(@.name=='Demo')].inner.kind.tuple[1]" $field
|
||||
// @is "$.index[*][?(@.name=='Demo')].inner.kind.tuple[2]" null
|
||||
// @count "$.index[*][?(@.name=='Demo')].inner.kind.tuple[*]" 3
|
@ -1,5 +1,4 @@
|
||||
// @has "$.index[*][?(@.name=='Unit')].visibility" \"public\"
|
||||
// @has "$.index[*][?(@.name=='Unit')].kind" \"struct\"
|
||||
// @has "$.index[*][?(@.name=='Unit')].inner.struct_type" \"unit\"
|
||||
// @has "$.index[*][?(@.name=='Unit')].inner.fields" []
|
||||
// @is "$.index[*][?(@.name=='Unit')].visibility" \"public\"
|
||||
// @is "$.index[*][?(@.name=='Unit')].kind" \"struct\"
|
||||
// @is "$.index[*][?(@.name=='Unit')].inner.kind" \"unit\"
|
||||
pub struct Unit;
|
||||
|
@ -1,13 +1,13 @@
|
||||
use std::collections::HashMap;
|
||||
|
||||
// @has "$.index[*][?(@.name=='WithGenerics')].visibility" \"public\"
|
||||
// @has "$.index[*][?(@.name=='WithGenerics')].kind" \"struct\"
|
||||
// @has "$.index[*][?(@.name=='WithGenerics')].inner.generics.params[0].name" \"T\"
|
||||
// @has "$.index[*][?(@.name=='WithGenerics')].inner.generics.params[0].kind.type"
|
||||
// @has "$.index[*][?(@.name=='WithGenerics')].inner.generics.params[1].name" \"U\"
|
||||
// @has "$.index[*][?(@.name=='WithGenerics')].inner.generics.params[1].kind.type"
|
||||
// @has "$.index[*][?(@.name=='WithGenerics')].inner.struct_type" \"plain\"
|
||||
// @has "$.index[*][?(@.name=='WithGenerics')].inner.fields_stripped" true
|
||||
// @is "$.index[*][?(@.name=='WithGenerics')].visibility" \"public\"
|
||||
// @is "$.index[*][?(@.name=='WithGenerics')].kind" \"struct\"
|
||||
// @is "$.index[*][?(@.name=='WithGenerics')].inner.generics.params[0].name" \"T\"
|
||||
// @is "$.index[*][?(@.name=='WithGenerics')].inner.generics.params[0].kind.type.bounds" []
|
||||
// @is "$.index[*][?(@.name=='WithGenerics')].inner.generics.params[1].name" \"U\"
|
||||
// @is "$.index[*][?(@.name=='WithGenerics')].inner.generics.params[1].kind.type.bounds" []
|
||||
// @is "$.index[*][?(@.name=='WithGenerics')].inner.kind.plain.fields_stripped" true
|
||||
// @is "$.index[*][?(@.name=='WithGenerics')].inner.kind.plain.fields" []
|
||||
pub struct WithGenerics<T, U> {
|
||||
stuff: Vec<T>,
|
||||
things: HashMap<U, U>,
|
||||
|
@ -1,9 +1,9 @@
|
||||
// @has "$.index[*][?(@.name=='WithPrimitives')].visibility" \"public\"
|
||||
// @has "$.index[*][?(@.name=='WithPrimitives')].kind" \"struct\"
|
||||
// @has "$.index[*][?(@.name=='WithPrimitives')].inner.generics.params[0].name" \"\'a\"
|
||||
// @has "$.index[*][?(@.name=='WithPrimitives')].inner.generics.params[0].kind.lifetime.outlives" []
|
||||
// @has "$.index[*][?(@.name=='WithPrimitives')].inner.struct_type" \"plain\"
|
||||
// @has "$.index[*][?(@.name=='WithPrimitives')].inner.fields_stripped" true
|
||||
// @is "$.index[*][?(@.name=='WithPrimitives')].visibility" \"public\"
|
||||
// @is "$.index[*][?(@.name=='WithPrimitives')].kind" \"struct\"
|
||||
// @is "$.index[*][?(@.name=='WithPrimitives')].inner.generics.params[0].name" \"\'a\"
|
||||
// @is "$.index[*][?(@.name=='WithPrimitives')].inner.generics.params[0].kind.lifetime.outlives" []
|
||||
// @is "$.index[*][?(@.name=='WithPrimitives')].inner.kind.plain.fields_stripped" true
|
||||
// @is "$.index[*][?(@.name=='WithPrimitives')].inner.kind.plain.fields" []
|
||||
pub struct WithPrimitives<'a> {
|
||||
num: u32,
|
||||
s: &'a str,
|
||||
|
@ -1,5 +1,5 @@
|
||||
error: expected one of `.`, `?`, `]`, or an operator, found `,`
|
||||
--> $DIR/do-not-suggest-suggest-semicolon-before-array.rs:5:5
|
||||
--> $DIR/do-not-suggest-semicolon-before-array.rs:5:5
|
||||
|
|
||||
LL | [1, 3)
|
||||
| ^ ^ help: `]` may belong here
|
@ -0,0 +1,3 @@
|
||||
fn main() {
|
||||
let _x = vec[1, 2, 3]; //~ ERROR expected one of `.`, `?`, `]`, or an operator
|
||||
}
|
@ -0,0 +1,8 @@
|
||||
error: expected one of `.`, `?`, `]`, or an operator, found `,`
|
||||
--> $DIR/do-not-suggest-semicolon-between-macro-without-exclamation-mark-and-array.rs:2:19
|
||||
|
|
||||
LL | let _x = vec[1, 2, 3];
|
||||
| ^ expected one of `.`, `?`, `]`, or an operator
|
||||
|
||||
error: aborting due to previous error
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user