diff --git a/compiler/rustc_ast/src/ast.rs b/compiler/rustc_ast/src/ast.rs
index af246e31371..f24e2a22c07 100644
--- a/compiler/rustc_ast/src/ast.rs
+++ b/compiler/rustc_ast/src/ast.rs
@@ -3126,6 +3126,35 @@ pub struct StaticItem {
pub expr: Option
>,
}
+/// A static item in `extern` block.
+// This struct is identical to StaticItem for now but it's going to have a safety attribute.
+#[derive(Clone, Encodable, Decodable, Debug)]
+pub struct StaticForeignItem {
+ pub ty: P,
+ pub mutability: Mutability,
+ pub expr: Option>,
+}
+
+impl From for StaticForeignItem {
+ fn from(static_item: StaticItem) -> StaticForeignItem {
+ StaticForeignItem {
+ ty: static_item.ty,
+ mutability: static_item.mutability,
+ expr: static_item.expr,
+ }
+ }
+}
+
+impl From for StaticItem {
+ fn from(static_item: StaticForeignItem) -> StaticItem {
+ StaticItem {
+ ty: static_item.ty,
+ mutability: static_item.mutability,
+ expr: static_item.expr,
+ }
+ }
+}
+
#[derive(Clone, Encodable, Decodable, Debug)]
pub struct ConstItem {
pub defaultness: Defaultness,
@@ -3329,7 +3358,7 @@ impl TryFrom for AssocItemKind {
#[derive(Clone, Encodable, Decodable, Debug)]
pub enum ForeignItemKind {
/// A foreign static item (`static FOO: u8`).
- Static(P, Mutability, Option>),
+ Static(Box),
/// An foreign function.
Fn(Box),
/// An foreign type.
@@ -3341,8 +3370,8 @@ pub enum ForeignItemKind {
impl From for ItemKind {
fn from(foreign_item_kind: ForeignItemKind) -> ItemKind {
match foreign_item_kind {
- ForeignItemKind::Static(a, b, c) => {
- ItemKind::Static(StaticItem { ty: a, mutability: b, expr: c }.into())
+ ForeignItemKind::Static(box static_foreign_item) => {
+ ItemKind::Static(Box::new(static_foreign_item.into()))
}
ForeignItemKind::Fn(fn_kind) => ItemKind::Fn(fn_kind),
ForeignItemKind::TyAlias(ty_alias_kind) => ItemKind::TyAlias(ty_alias_kind),
@@ -3356,8 +3385,8 @@ impl TryFrom for ForeignItemKind {
fn try_from(item_kind: ItemKind) -> Result {
Ok(match item_kind {
- ItemKind::Static(box StaticItem { ty: a, mutability: b, expr: c }) => {
- ForeignItemKind::Static(a, b, c)
+ ItemKind::Static(box static_item) => {
+ ForeignItemKind::Static(Box::new(static_item.into()))
}
ItemKind::Fn(fn_kind) => ForeignItemKind::Fn(fn_kind),
ItemKind::TyAlias(ty_alias_kind) => ForeignItemKind::TyAlias(ty_alias_kind),
@@ -3382,8 +3411,8 @@ mod size_asserts {
static_assert_size!(Expr, 72);
static_assert_size!(ExprKind, 40);
static_assert_size!(Fn, 160);
- static_assert_size!(ForeignItem, 96);
- static_assert_size!(ForeignItemKind, 24);
+ static_assert_size!(ForeignItem, 88);
+ static_assert_size!(ForeignItemKind, 16);
static_assert_size!(GenericArg, 24);
static_assert_size!(GenericBound, 88);
static_assert_size!(Generics, 40);
diff --git a/compiler/rustc_ast/src/mut_visit.rs b/compiler/rustc_ast/src/mut_visit.rs
index fc445600e77..4d28ef56df1 100644
--- a/compiler/rustc_ast/src/mut_visit.rs
+++ b/compiler/rustc_ast/src/mut_visit.rs
@@ -1261,7 +1261,7 @@ pub fn noop_flat_map_item(
impl NoopVisitItemKind for ForeignItemKind {
fn noop_visit(&mut self, visitor: &mut impl MutVisitor) {
match self {
- ForeignItemKind::Static(ty, _, expr) => {
+ ForeignItemKind::Static(box StaticForeignItem { ty, mutability: _, expr }) => {
visitor.visit_ty(ty);
visit_opt(expr, |expr| visitor.visit_expr(expr));
}
diff --git a/compiler/rustc_ast/src/visit.rs b/compiler/rustc_ast/src/visit.rs
index a0ada9a7788..1d8fd63e459 100644
--- a/compiler/rustc_ast/src/visit.rs
+++ b/compiler/rustc_ast/src/visit.rs
@@ -642,7 +642,7 @@ impl WalkItemKind for ForeignItemKind {
) -> V::Result {
let &Item { id, span, ident, ref vis, .. } = item;
match self {
- ForeignItemKind::Static(ty, _, expr) => {
+ ForeignItemKind::Static(box StaticForeignItem { ty, mutability: _, expr }) => {
try_visit!(visitor.visit_ty(ty));
visit_opt!(visitor, visit_expr, expr);
}
diff --git a/compiler/rustc_ast_lowering/src/item.rs b/compiler/rustc_ast_lowering/src/item.rs
index dcce54d66c2..ccbc44bff57 100644
--- a/compiler/rustc_ast_lowering/src/item.rs
+++ b/compiler/rustc_ast_lowering/src/item.rs
@@ -662,10 +662,10 @@ impl<'hir> LoweringContext<'_, 'hir> {
hir::ForeignItemKind::Fn(fn_dec, fn_args, generics)
}
- ForeignItemKind::Static(t, m, _) => {
- let ty =
- self.lower_ty(t, ImplTraitContext::Disallowed(ImplTraitPosition::StaticTy));
- hir::ForeignItemKind::Static(ty, *m)
+ ForeignItemKind::Static(box StaticForeignItem { ty, mutability, expr: _ }) => {
+ let ty = self
+ .lower_ty(ty, ImplTraitContext::Disallowed(ImplTraitPosition::StaticTy));
+ hir::ForeignItemKind::Static(ty, *mutability)
}
ForeignItemKind::TyAlias(..) => hir::ForeignItemKind::Type,
ForeignItemKind::MacCall(_) => panic!("macro shouldn't exist here"),
diff --git a/compiler/rustc_ast_passes/src/ast_validation.rs b/compiler/rustc_ast_passes/src/ast_validation.rs
index 1fb410253d1..1eefad2af4d 100644
--- a/compiler/rustc_ast_passes/src/ast_validation.rs
+++ b/compiler/rustc_ast_passes/src/ast_validation.rs
@@ -1185,8 +1185,8 @@ impl<'a> Visitor<'a> for AstValidator<'a> {
self.check_foreign_ty_genericless(generics, where_clauses);
self.check_foreign_item_ascii_only(fi.ident);
}
- ForeignItemKind::Static(_, _, body) => {
- self.check_foreign_kind_bodyless(fi.ident, "static", body.as_ref().map(|b| b.span));
+ ForeignItemKind::Static(box StaticForeignItem { ty: _, mutability: _, expr }) => {
+ self.check_foreign_kind_bodyless(fi.ident, "static", expr.as_ref().map(|b| b.span));
self.check_foreign_item_ascii_only(fi.ident);
}
ForeignItemKind::MacCall(..) => {}
diff --git a/compiler/rustc_ast_pretty/src/pprust/state/item.rs b/compiler/rustc_ast_pretty/src/pprust/state/item.rs
index 10886aace53..b90182c2b3e 100644
--- a/compiler/rustc_ast_pretty/src/pprust/state/item.rs
+++ b/compiler/rustc_ast_pretty/src/pprust/state/item.rs
@@ -30,15 +30,17 @@ impl<'a> State<'a> {
ast::ForeignItemKind::Fn(box ast::Fn { defaultness, sig, generics, body }) => {
self.print_fn_full(sig, ident, generics, vis, *defaultness, body.as_deref(), attrs);
}
- ast::ForeignItemKind::Static(ty, mutbl, body) => self.print_item_const(
- ident,
- Some(*mutbl),
- &ast::Generics::default(),
- ty,
- body.as_deref(),
- vis,
- ast::Defaultness::Final,
- ),
+ ast::ForeignItemKind::Static(box ast::StaticForeignItem { ty, mutability, expr }) => {
+ self.print_item_const(
+ ident,
+ Some(*mutability),
+ &ast::Generics::default(),
+ ty,
+ expr.as_deref(),
+ vis,
+ ast::Defaultness::Final,
+ )
+ }
ast::ForeignItemKind::TyAlias(box ast::TyAlias {
defaultness,
generics,
diff --git a/compiler/rustc_middle/src/traits/solve/inspect.rs b/compiler/rustc_middle/src/traits/solve/inspect.rs
index 0f3ace2d55d..70d5a082291 100644
--- a/compiler/rustc_middle/src/traits/solve/inspect.rs
+++ b/compiler/rustc_middle/src/traits/solve/inspect.rs
@@ -60,14 +60,14 @@ pub struct GoalEvaluation<'tcx> {
pub evaluation: CanonicalGoalEvaluation<'tcx>,
}
-#[derive(Eq, PartialEq)]
+#[derive(Eq, PartialEq, Debug)]
pub struct CanonicalGoalEvaluation<'tcx> {
pub goal: CanonicalInput<'tcx>,
pub kind: CanonicalGoalEvaluationKind<'tcx>,
pub result: QueryResult<'tcx>,
}
-#[derive(Eq, PartialEq)]
+#[derive(Eq, PartialEq, Debug)]
pub enum CanonicalGoalEvaluationKind<'tcx> {
Overflow,
CycleInStack,
@@ -86,7 +86,7 @@ pub struct AddedGoalsEvaluation<'tcx> {
pub result: Result,
}
-#[derive(Eq, PartialEq)]
+#[derive(Eq, PartialEq, Debug)]
pub struct GoalEvaluationStep<'tcx> {
pub instantiated_goal: QueryInput<'tcx, ty::Predicate<'tcx>>,
diff --git a/compiler/rustc_parse/src/parser/item.rs b/compiler/rustc_parse/src/parser/item.rs
index ed51710564a..848277c4611 100644
--- a/compiler/rustc_parse/src/parser/item.rs
+++ b/compiler/rustc_parse/src/parser/item.rs
@@ -1191,7 +1191,11 @@ impl<'a> Parser<'a> {
ident_span: ident.span,
const_span,
});
- ForeignItemKind::Static(ty, Mutability::Not, expr)
+ ForeignItemKind::Static(Box::new(StaticForeignItem {
+ ty,
+ mutability: Mutability::Not,
+ expr,
+ }))
}
_ => return self.error_bad_item_kind(span, &kind, "`extern` blocks"),
},
diff --git a/compiler/rustc_resolve/src/def_collector.rs b/compiler/rustc_resolve/src/def_collector.rs
index d4d999f6f9c..a27a6bceda3 100644
--- a/compiler/rustc_resolve/src/def_collector.rs
+++ b/compiler/rustc_resolve/src/def_collector.rs
@@ -209,7 +209,7 @@ impl<'a, 'b, 'tcx> visit::Visitor<'a> for DefCollector<'a, 'b, 'tcx> {
fn visit_foreign_item(&mut self, fi: &'a ForeignItem) {
let def_kind = match fi.kind {
- ForeignItemKind::Static(_, mutability, _) => {
+ ForeignItemKind::Static(box StaticForeignItem { ty: _, mutability, expr: _ }) => {
DefKind::Static { mutability, nested: false }
}
ForeignItemKind::Fn(_) => DefKind::Fn,
diff --git a/compiler/rustc_trait_selection/src/solve/inspect/analyse.rs b/compiler/rustc_trait_selection/src/solve/inspect/analyse.rs
index 2d58111e803..cba32620175 100644
--- a/compiler/rustc_trait_selection/src/solve/inspect/analyse.rs
+++ b/compiler/rustc_trait_selection/src/solve/inspect/analyse.rs
@@ -34,9 +34,9 @@ pub struct InspectConfig {
pub struct InspectGoal<'a, 'tcx> {
infcx: &'a InferCtxt<'tcx>,
depth: usize,
- orig_values: &'a [ty::GenericArg<'tcx>],
+ orig_values: Vec>,
goal: Goal<'tcx, ty::Predicate<'tcx>>,
- evaluation: &'a inspect::GoalEvaluation<'tcx>,
+ evaluation: inspect::CanonicalGoalEvaluation<'tcx>,
}
pub struct InspectCandidate<'a, 'tcx> {
@@ -57,6 +57,10 @@ impl<'a, 'tcx> InspectCandidate<'a, 'tcx> {
self.result.map(|c| c.value.certainty)
}
+ pub fn goal(&self) -> &'a InspectGoal<'a, 'tcx> {
+ self.goal
+ }
+
/// Certainty passed into `evaluate_added_goals_and_make_canonical_response`.
///
/// If this certainty is `Yes`, then we must be confident that the candidate
@@ -74,46 +78,55 @@ impl<'a, 'tcx> InspectCandidate<'a, 'tcx> {
/// the state of the `infcx`.
pub fn visit_nested_no_probe>(&self, visitor: &mut V) -> V::Result {
if self.goal.depth < visitor.config().max_depth {
- let infcx = self.goal.infcx;
- let param_env = self.goal.goal.param_env;
- let mut orig_values = self.goal.orig_values.to_vec();
- let mut instantiated_goals = vec![];
- for goal in &self.nested_goals {
- let goal = canonical::instantiate_canonical_state(
+ for goal in self.instantiate_nested_goals(visitor.span()) {
+ try_visit!(visitor.visit_goal(&goal));
+ }
+ }
+
+ V::Result::output()
+ }
+
+ /// Instantiate the nested goals for the candidate without rolling back their
+ /// inference constraints. This function modifies the state of the `infcx`.
+ pub fn instantiate_nested_goals(&self, span: Span) -> Vec> {
+ let infcx = self.goal.infcx;
+ let param_env = self.goal.goal.param_env;
+ let mut orig_values = self.goal.orig_values.to_vec();
+ let instantiated_goals: Vec<_> = self
+ .nested_goals
+ .iter()
+ .map(|goal| {
+ canonical::instantiate_canonical_state(
infcx,
- visitor.span(),
+ span,
param_env,
&mut orig_values,
*goal,
- );
- instantiated_goals.push(goal);
- }
+ )
+ })
+ .collect();
- let () = canonical::instantiate_canonical_state(
- infcx,
- visitor.span(),
- param_env,
- &mut orig_values,
- self.final_state,
- );
+ let () = canonical::instantiate_canonical_state(
+ infcx,
+ span,
+ param_env,
+ &mut orig_values,
+ self.final_state,
+ );
- for &goal in &instantiated_goals {
+ instantiated_goals
+ .into_iter()
+ .map(|goal| {
let proof_tree = match goal.predicate.kind().no_bound_vars() {
Some(ty::PredicateKind::NormalizesTo(ty::NormalizesTo { alias, term })) => {
let unconstrained_term = match term.unpack() {
ty::TermKind::Ty(_) => infcx
- .next_ty_var(TypeVariableOrigin {
- param_def_id: None,
- span: visitor.span(),
- })
+ .next_ty_var(TypeVariableOrigin { param_def_id: None, span })
.into(),
ty::TermKind::Const(ct) => infcx
.next_const_var(
ct.ty(),
- ConstVariableOrigin {
- param_def_id: None,
- span: visitor.span(),
- },
+ ConstVariableOrigin { param_def_id: None, span },
)
.into(),
};
@@ -129,22 +142,16 @@ impl<'a, 'tcx> InspectCandidate<'a, 'tcx> {
})
.1;
let InferOk { value: (), obligations: _ } = infcx
- .at(&ObligationCause::dummy(), param_env)
+ .at(&ObligationCause::dummy_with_span(span), param_env)
.eq(DefineOpaqueTypes::Yes, term, unconstrained_term)
.unwrap();
proof_tree
}
_ => infcx.evaluate_root_goal(goal, GenerateProofTree::Yes).1,
};
- try_visit!(visitor.visit_goal(&InspectGoal::new(
- infcx,
- self.goal.depth + 1,
- &proof_tree.unwrap(),
- )));
- }
- }
-
- V::Result::output()
+ InspectGoal::new(infcx, self.goal.depth + 1, proof_tree.unwrap())
+ })
+ .collect()
}
/// Visit all nested goals of this candidate, rolling back
@@ -164,7 +171,7 @@ impl<'a, 'tcx> InspectGoal<'a, 'tcx> {
}
pub fn result(&self) -> Result {
- self.evaluation.evaluation.result.map(|c| c.value.certainty)
+ self.evaluation.result.map(|c| c.value.certainty)
}
fn candidates_recur(
@@ -221,7 +228,7 @@ impl<'a, 'tcx> InspectGoal<'a, 'tcx> {
pub fn candidates(&'a self) -> Vec> {
let mut candidates = vec![];
- let last_eval_step = match self.evaluation.evaluation.kind {
+ let last_eval_step = match self.evaluation.kind {
inspect::CanonicalGoalEvaluationKind::Overflow
| inspect::CanonicalGoalEvaluationKind::CycleInStack
| inspect::CanonicalGoalEvaluationKind::ProvisionalCacheHit => {
@@ -254,18 +261,15 @@ impl<'a, 'tcx> InspectGoal<'a, 'tcx> {
candidates.pop().filter(|_| candidates.is_empty())
}
- fn new(
- infcx: &'a InferCtxt<'tcx>,
- depth: usize,
- root: &'a inspect::GoalEvaluation<'tcx>,
- ) -> Self {
- match root.kind {
- inspect::GoalEvaluationKind::Root { ref orig_values } => InspectGoal {
+ fn new(infcx: &'a InferCtxt<'tcx>, depth: usize, root: inspect::GoalEvaluation<'tcx>) -> Self {
+ let inspect::GoalEvaluation { uncanonicalized_goal, kind, evaluation } = root;
+ match kind {
+ inspect::GoalEvaluationKind::Root { orig_values } => InspectGoal {
infcx,
depth,
orig_values,
- goal: root.uncanonicalized_goal.fold_with(&mut EagerResolver::new(infcx)),
- evaluation: root,
+ goal: uncanonicalized_goal.fold_with(&mut EagerResolver::new(infcx)),
+ evaluation,
},
inspect::GoalEvaluationKind::Nested { .. } => unreachable!(),
}
@@ -294,6 +298,6 @@ impl<'tcx> InferCtxt<'tcx> {
) -> V::Result {
let (_, proof_tree) = self.evaluate_root_goal(goal, GenerateProofTree::Yes);
let proof_tree = proof_tree.unwrap();
- visitor.visit_goal(&InspectGoal::new(self, 0, &proof_tree))
+ visitor.visit_goal(&InspectGoal::new(self, 0, proof_tree))
}
}
diff --git a/src/tools/clippy/clippy_utils/src/ast_utils.rs b/src/tools/clippy/clippy_utils/src/ast_utils.rs
index 0395eb1449b..529d20126b2 100644
--- a/src/tools/clippy/clippy_utils/src/ast_utils.rs
+++ b/src/tools/clippy/clippy_utils/src/ast_utils.rs
@@ -446,7 +446,18 @@ pub fn eq_item_kind(l: &ItemKind, r: &ItemKind) -> bool {
pub fn eq_foreign_item_kind(l: &ForeignItemKind, r: &ForeignItemKind) -> bool {
use ForeignItemKind::*;
match (l, r) {
- (Static(lt, lm, le), Static(rt, rm, re)) => lm == rm && eq_ty(lt, rt) && eq_expr_opt(le, re),
+ (
+ Static(box StaticForeignItem {
+ ty: lt,
+ mutability: lm,
+ expr: le,
+ }),
+ Static(box StaticForeignItem {
+ ty: rt,
+ mutability: rm,
+ expr: re,
+ }),
+ ) => lm == rm && eq_ty(lt, rt) && eq_expr_opt(le, re),
(
Fn(box ast::Fn {
defaultness: ld,
diff --git a/src/tools/rustfmt/src/items.rs b/src/tools/rustfmt/src/items.rs
index f6f51fbd8ea..e196d1817f3 100644
--- a/src/tools/rustfmt/src/items.rs
+++ b/src/tools/rustfmt/src/items.rs
@@ -3325,11 +3325,11 @@ impl Rewrite for ast::ForeignItem {
.map(|(s, _, _)| format!("{};", s))
}
}
- ast::ForeignItemKind::Static(ref ty, mutability, _) => {
+ ast::ForeignItemKind::Static(ref static_foreign_item) => {
// FIXME(#21): we're dropping potential comments in between the
// function kw here.
let vis = format_visibility(context, &self.vis);
- let mut_str = format_mutability(mutability);
+ let mut_str = format_mutability(static_foreign_item.mutability);
let prefix = format!(
"{}static {}{}:",
vis,
@@ -3340,7 +3340,7 @@ impl Rewrite for ast::ForeignItem {
rewrite_assign_rhs(
context,
prefix,
- &**ty,
+ &static_foreign_item.ty,
&RhsAssignKind::Ty,
shape.sub_width(1)?,
)
diff --git a/tests/codegen/enum/enum-match.rs b/tests/codegen/enum/enum-match.rs
index f1c40f6695b..ced26c0a434 100644
--- a/tests/codegen/enum/enum-match.rs
+++ b/tests/codegen/enum/enum-match.rs
@@ -11,7 +11,7 @@ pub enum Enum0 {
B,
}
-// CHECK: define noundef i8 @match0{{.*}}
+// CHECK: define noundef{{( range\(i8 [0-9]+, [0-9]+\))?}} i8 @match0{{.*}}
// CHECK-NEXT: start:
// CHECK-NEXT: %1 = icmp eq i8 %0, 2
// CHECK-NEXT: %2 = and i8 %0, 1
@@ -32,7 +32,7 @@ pub enum Enum1 {
C,
}
-// CHECK: define noundef i8 @match1{{.*}}
+// CHECK: define noundef{{( range\(i8 [0-9]+, [0-9]+\))?}} i8 @match1{{.*}}
// CHECK-NEXT: start:
// CHECK-NEXT: %1 = add i8 %0, -2
// CHECK-NEXT: %2 = zext i8 %1 to i64
@@ -91,7 +91,7 @@ pub enum Enum2 {
E,
}
-// CHECK: define noundef i8 @match2{{.*}}
+// CHECK: define noundef{{( range\(i8 [0-9]+, [0-9]+\))?}} i8 @match2{{.*}}
// CHECK-NEXT: start:
// CHECK-NEXT: %1 = add i8 %0, 2
// CHECK-NEXT: %2 = zext i8 %1 to i64
diff --git a/tests/codegen/ptr-read-metadata.rs b/tests/codegen/ptr-read-metadata.rs
index 4c623dee5e1..e3565c962f7 100644
--- a/tests/codegen/ptr-read-metadata.rs
+++ b/tests/codegen/ptr-read-metadata.rs
@@ -47,7 +47,7 @@ pub unsafe fn read_byte_assume_init(p: &MaybeUninit) -> u8 {
p.assume_init_read()
}
-// CHECK-LABEL: define {{(dso_local )?}}noundef i32 @copy_char(
+// CHECK-LABEL: define {{(dso_local )?}}noundef {{(range\(.*\) )?}}i32 @copy_char(
#[no_mangle]
pub unsafe fn copy_char(p: *const char) -> char {
// CHECK-NOT: load
@@ -58,7 +58,7 @@ pub unsafe fn copy_char(p: *const char) -> char {
*p
}
-// CHECK-LABEL: define {{(dso_local )?}}noundef i32 @read_char(
+// CHECK-LABEL: define {{(dso_local )?}}noundef {{(range\(.*\) )?}}i32 @read_char(
#[no_mangle]
pub unsafe fn read_char(p: *const char) -> char {
// CHECK-NOT: load
@@ -80,7 +80,7 @@ pub unsafe fn read_char_maybe_uninit(p: *const MaybeUninit) -> MaybeUninit
p.read()
}
-// CHECK-LABEL: define {{(dso_local )?}}noundef i32 @read_char_assume_init(
+// CHECK-LABEL: define {{(dso_local )?}}noundef {{(range\(.*\) )?}}i32 @read_char_assume_init(
#[no_mangle]
pub unsafe fn read_char_assume_init(p: &MaybeUninit) -> char {
// CHECK-NOT: load
diff --git a/tests/ui/stats/hir-stats.stderr b/tests/ui/stats/hir-stats.stderr
index dc24833c267..1a67c943844 100644
--- a/tests/ui/stats/hir-stats.stderr
+++ b/tests/ui/stats/hir-stats.stderr
@@ -11,15 +11,15 @@ ast-stats-1 Attribute 64 ( 1.0%) 2 32
ast-stats-1 - Normal 32 ( 0.5%) 1
ast-stats-1 - DocComment 32 ( 0.5%) 1
ast-stats-1 Local 80 ( 1.2%) 1 80
-ast-stats-1 Arm 96 ( 1.4%) 2 48
-ast-stats-1 ForeignItem 96 ( 1.4%) 1 96
-ast-stats-1 - Fn 96 ( 1.4%) 1
+ast-stats-1 ForeignItem 88 ( 1.3%) 1 88
+ast-stats-1 - Fn 88 ( 1.3%) 1
+ast-stats-1 Arm 96 ( 1.5%) 2 48
ast-stats-1 FnDecl 120 ( 1.8%) 5 24
ast-stats-1 FieldDef 160 ( 2.4%) 2 80
ast-stats-1 Stmt 160 ( 2.4%) 5 32
ast-stats-1 - Let 32 ( 0.5%) 1
ast-stats-1 - MacCall 32 ( 0.5%) 1
-ast-stats-1 - Expr 96 ( 1.4%) 3
+ast-stats-1 - Expr 96 ( 1.5%) 3
ast-stats-1 Param 160 ( 2.4%) 4 40
ast-stats-1 Block 192 ( 2.9%) 6 32
ast-stats-1 Variant 208 ( 3.1%) 2 104
@@ -28,7 +28,7 @@ ast-stats-1 - Trait 352 ( 5.3%) 4
ast-stats-1 AssocItem 352 ( 5.3%) 4 88
ast-stats-1 - Type 176 ( 2.7%) 2
ast-stats-1 - Fn 176 ( 2.7%) 2
-ast-stats-1 GenericParam 480 ( 7.2%) 5 96
+ast-stats-1 GenericParam 480 ( 7.3%) 5 96
ast-stats-1 Pat 504 ( 7.6%) 7 72
ast-stats-1 - Struct 72 ( 1.1%) 1
ast-stats-1 - Wild 72 ( 1.1%) 1
@@ -53,7 +53,7 @@ ast-stats-1 - Impl 136 ( 2.1%) 1
ast-stats-1 - Fn 272 ( 4.1%) 2
ast-stats-1 - Use 408 ( 6.2%) 3
ast-stats-1 ----------------------------------------------------------------
-ast-stats-1 Total 6_624
+ast-stats-1 Total 6_616
ast-stats-1
ast-stats-2 POST EXPANSION AST STATS
ast-stats-2 Name Accumulated Size Count Item Size
@@ -65,9 +65,9 @@ ast-stats-2 ExprField 48 ( 0.7%) 1 48
ast-stats-2 WherePredicate 56 ( 0.8%) 1 56
ast-stats-2 - BoundPredicate 56 ( 0.8%) 1
ast-stats-2 Local 80 ( 1.1%) 1 80
+ast-stats-2 ForeignItem 88 ( 1.2%) 1 88
+ast-stats-2 - Fn 88 ( 1.2%) 1
ast-stats-2 Arm 96 ( 1.3%) 2 48
-ast-stats-2 ForeignItem 96 ( 1.3%) 1 96
-ast-stats-2 - Fn 96 ( 1.3%) 1
ast-stats-2 InlineAsm 120 ( 1.7%) 1 120
ast-stats-2 FnDecl 120 ( 1.7%) 5 24
ast-stats-2 Attribute 128 ( 1.8%) 4 32
@@ -86,7 +86,7 @@ ast-stats-2 - Trait 352 ( 4.9%) 4
ast-stats-2 AssocItem 352 ( 4.9%) 4 88
ast-stats-2 - Type 176 ( 2.4%) 2
ast-stats-2 - Fn 176 ( 2.4%) 2
-ast-stats-2 GenericParam 480 ( 6.6%) 5 96
+ast-stats-2 GenericParam 480 ( 6.7%) 5 96
ast-stats-2 Pat 504 ( 7.0%) 7 72
ast-stats-2 - Struct 72 ( 1.0%) 1
ast-stats-2 - Wild 72 ( 1.0%) 1
@@ -113,7 +113,7 @@ ast-stats-2 - Impl 136 ( 1.9%) 1
ast-stats-2 - Fn 272 ( 3.8%) 2
ast-stats-2 - Use 544 ( 7.5%) 4
ast-stats-2 ----------------------------------------------------------------
-ast-stats-2 Total 7_224
+ast-stats-2 Total 7_216
ast-stats-2
hir-stats HIR STATS
hir-stats Name Accumulated Size Count Item Size