Rollup merge of #99911 - cjgillot:no-guess, r=davidtwco
Remove some uses of `guess_head_span` That function cuts a span at the first occurrence of `{`. Using `def_span` is almost always more precise.
This commit is contained in:
commit
8db3d7cfb6
20 changed files with 97 additions and 114 deletions
|
@ -1364,7 +1364,6 @@ impl UnreachablePub {
|
|||
cx: &LateContext<'_>,
|
||||
what: &str,
|
||||
def_id: LocalDefId,
|
||||
span: Span,
|
||||
vis_span: Span,
|
||||
exportable: bool,
|
||||
) {
|
||||
|
@ -1373,7 +1372,7 @@ impl UnreachablePub {
|
|||
if vis_span.from_expansion() {
|
||||
applicability = Applicability::MaybeIncorrect;
|
||||
}
|
||||
let def_span = cx.tcx.sess.source_map().guess_head_span(span);
|
||||
let def_span = cx.tcx.def_span(def_id);
|
||||
cx.struct_span_lint(UNREACHABLE_PUB, def_span, |lint| {
|
||||
let mut err = lint.build(fluent::lint::builtin_unreachable_pub);
|
||||
err.set_arg("what", what);
|
||||
|
@ -1399,36 +1398,22 @@ impl<'tcx> LateLintPass<'tcx> for UnreachablePub {
|
|||
if let hir::ItemKind::Use(_, hir::UseKind::ListStem) = &item.kind {
|
||||
return;
|
||||
}
|
||||
self.perform_lint(cx, "item", item.def_id, item.span, item.vis_span, true);
|
||||
self.perform_lint(cx, "item", item.def_id, item.vis_span, true);
|
||||
}
|
||||
|
||||
fn check_foreign_item(&mut self, cx: &LateContext<'_>, foreign_item: &hir::ForeignItem<'tcx>) {
|
||||
self.perform_lint(
|
||||
cx,
|
||||
"item",
|
||||
foreign_item.def_id,
|
||||
foreign_item.span,
|
||||
foreign_item.vis_span,
|
||||
true,
|
||||
);
|
||||
self.perform_lint(cx, "item", foreign_item.def_id, foreign_item.vis_span, true);
|
||||
}
|
||||
|
||||
fn check_field_def(&mut self, cx: &LateContext<'_>, field: &hir::FieldDef<'_>) {
|
||||
let def_id = cx.tcx.hir().local_def_id(field.hir_id);
|
||||
self.perform_lint(cx, "field", def_id, field.span, field.vis_span, false);
|
||||
self.perform_lint(cx, "field", def_id, field.vis_span, false);
|
||||
}
|
||||
|
||||
fn check_impl_item(&mut self, cx: &LateContext<'_>, impl_item: &hir::ImplItem<'_>) {
|
||||
// Only lint inherent impl items.
|
||||
if cx.tcx.associated_item(impl_item.def_id).trait_item_def_id.is_none() {
|
||||
self.perform_lint(
|
||||
cx,
|
||||
"item",
|
||||
impl_item.def_id,
|
||||
impl_item.span,
|
||||
impl_item.vis_span,
|
||||
false,
|
||||
);
|
||||
self.perform_lint(cx, "item", impl_item.def_id, impl_item.vis_span, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
use rustc_data_structures::graph::iterate::{
|
||||
NodeStatus, TriColorDepthFirstSearch, TriColorVisitor,
|
||||
};
|
||||
use rustc_hir::intravisit::FnKind;
|
||||
use rustc_hir::def::DefKind;
|
||||
use rustc_middle::mir::{BasicBlock, BasicBlocks, Body, Operand, TerminatorKind};
|
||||
use rustc_middle::ty::subst::{GenericArg, InternalSubsts};
|
||||
use rustc_middle::ty::{self, AssocItem, AssocItemContainer, Instance, TyCtxt};
|
||||
|
@ -12,12 +12,7 @@ use std::ops::ControlFlow;
|
|||
pub(crate) fn check<'tcx>(tcx: TyCtxt<'tcx>, body: &Body<'tcx>) {
|
||||
let def_id = body.source.def_id().expect_local();
|
||||
|
||||
if let Some(fn_kind) = tcx.hir().get_by_def_id(def_id).fn_kind() {
|
||||
if let FnKind::Closure = fn_kind {
|
||||
// closures can't recur, so they don't matter.
|
||||
return;
|
||||
}
|
||||
|
||||
if let DefKind::Fn | DefKind::AssocFn = tcx.def_kind(def_id) {
|
||||
// If this is trait/impl method, extract the trait's substs.
|
||||
let trait_substs = match tcx.opt_associated_item(def_id.to_def_id()) {
|
||||
Some(AssocItem {
|
||||
|
@ -41,8 +36,8 @@ pub(crate) fn check<'tcx>(tcx: TyCtxt<'tcx>, body: &Body<'tcx>) {
|
|||
|
||||
vis.reachable_recursive_calls.sort();
|
||||
|
||||
let sp = tcx.def_span(def_id);
|
||||
let hir_id = tcx.hir().local_def_id_to_hir_id(def_id);
|
||||
let sp = tcx.sess.source_map().guess_head_span(tcx.hir().span_with_body(hir_id));
|
||||
tcx.struct_span_lint_hir(UNCONDITIONAL_RECURSION, hir_id, sp, |lint| {
|
||||
let mut db = lint.build("function cannot return without recursing");
|
||||
db.span_label(sp, "cannot return without recursing");
|
||||
|
|
|
@ -1754,8 +1754,7 @@ impl SearchInterfaceForPrivateItemsVisitor<'_> {
|
|||
|| self.in_assoc_ty
|
||||
|| self.tcx.resolutions(()).has_pub_restricted
|
||||
{
|
||||
let vis_span =
|
||||
self.tcx.sess.source_map().guess_head_span(self.tcx.def_span(def_id));
|
||||
let vis_span = self.tcx.def_span(def_id);
|
||||
if kind == "trait" {
|
||||
self.tcx.sess.emit_err(InPublicInterfaceTraits {
|
||||
span,
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
use crate::dep_graph::DepContext;
|
||||
use crate::query::plumbing::CycleError;
|
||||
use crate::query::{QueryContext, QueryStackFrame};
|
||||
use rustc_hir::def::DefKind;
|
||||
|
@ -536,17 +535,13 @@ pub(crate) fn report_cycle<'a>(
|
|||
) -> DiagnosticBuilder<'a, ErrorGuaranteed> {
|
||||
assert!(!stack.is_empty());
|
||||
|
||||
let fix_span = |span: Span, query: &QueryStackFrame| {
|
||||
sess.source_map().guess_head_span(query.default_span(span))
|
||||
};
|
||||
|
||||
let span = fix_span(stack[1 % stack.len()].span, &stack[0].query);
|
||||
let span = stack[0].query.default_span(stack[1 % stack.len()].span);
|
||||
let mut err =
|
||||
struct_span_err!(sess, span, E0391, "cycle detected when {}", stack[0].query.description);
|
||||
|
||||
for i in 1..stack.len() {
|
||||
let query = &stack[i].query;
|
||||
let span = fix_span(stack[(i + 1) % stack.len()].span, query);
|
||||
let span = query.default_span(stack[(i + 1) % stack.len()].span);
|
||||
err.span_note(span, &format!("...which requires {}...", query.description));
|
||||
}
|
||||
|
||||
|
@ -577,7 +572,7 @@ pub(crate) fn report_cycle<'a>(
|
|||
}
|
||||
|
||||
if let Some((span, query)) = usage {
|
||||
err.span_note(fix_span(span, &query), &format!("cycle used when {}", query.description));
|
||||
err.span_note(query.default_span(span), &format!("cycle used when {}", query.description));
|
||||
}
|
||||
|
||||
err
|
||||
|
@ -606,8 +601,7 @@ pub fn print_query_stack<CTX: QueryContext>(
|
|||
Level::FailureNote,
|
||||
&format!("#{} [{}] {}", i, query_info.query.name, query_info.query.description),
|
||||
);
|
||||
diag.span =
|
||||
tcx.dep_context().sess().source_map().guess_head_span(query_info.job.span).into();
|
||||
diag.span = query_info.job.span.into();
|
||||
handler.force_print_diagnostic(diag);
|
||||
|
||||
current_query = query_info.job.parent;
|
||||
|
|
|
@ -1587,11 +1587,7 @@ impl<'a> Resolver<'a> {
|
|||
};
|
||||
let def_span = suggestion.res.opt_def_id().and_then(|def_id| match def_id.krate {
|
||||
LOCAL_CRATE => self.opt_span(def_id),
|
||||
_ => Some(
|
||||
self.session
|
||||
.source_map()
|
||||
.guess_head_span(self.cstore().get_span_untracked(def_id, self.session)),
|
||||
),
|
||||
_ => Some(self.cstore().get_span_untracked(def_id, self.session)),
|
||||
});
|
||||
if let Some(def_span) = def_span {
|
||||
if span.overlaps(def_span) {
|
||||
|
|
|
@ -136,12 +136,7 @@ impl<'a: 'ast, 'ast> LateResolutionVisitor<'a, '_, 'ast> {
|
|||
fn def_span(&self, def_id: DefId) -> Option<Span> {
|
||||
match def_id.krate {
|
||||
LOCAL_CRATE => self.r.opt_span(def_id),
|
||||
_ => Some(
|
||||
self.r
|
||||
.session
|
||||
.source_map()
|
||||
.guess_head_span(self.r.cstore().get_span_untracked(def_id, self.r.session)),
|
||||
),
|
||||
_ => Some(self.r.cstore().get_span_untracked(def_id, self.r.session)),
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1946,7 +1946,6 @@ impl<'a, 'tcx> InferCtxtExt<'tcx> for InferCtxt<'a, 'tcx> {
|
|||
));
|
||||
|
||||
let original_span = err.span.primary_span().unwrap();
|
||||
let original_span = self.tcx.sess.source_map().guess_head_span(original_span);
|
||||
let mut span = MultiSpan::from_span(original_span);
|
||||
|
||||
let message = outer_generator
|
||||
|
|
|
@ -293,6 +293,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
|||
pub(crate) fn if_cause(
|
||||
&self,
|
||||
span: Span,
|
||||
cond_span: Span,
|
||||
then_expr: &'tcx hir::Expr<'tcx>,
|
||||
else_expr: &'tcx hir::Expr<'tcx>,
|
||||
then_ty: Ty<'tcx>,
|
||||
|
@ -355,10 +356,13 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
|||
// 6 | | };
|
||||
// | |_____^ expected integer, found `()`
|
||||
// ```
|
||||
if block.expr.is_none() && block.stmts.is_empty()
|
||||
&& let Some(outer_span) = &mut outer_span
|
||||
{
|
||||
*outer_span = self.tcx.sess.source_map().guess_head_span(*outer_span);
|
||||
if block.expr.is_none() && block.stmts.is_empty() && outer_span.is_some() {
|
||||
let sp = if let Some(cs) = cond_span.find_ancestor_inside(span) {
|
||||
span.with_hi(cs.hi())
|
||||
} else {
|
||||
span
|
||||
};
|
||||
outer_span = Some(sp);
|
||||
}
|
||||
|
||||
(self.find_block_span(block), block.hir_id)
|
||||
|
|
|
@ -1003,8 +1003,15 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
|||
let else_diverges = self.diverges.get();
|
||||
|
||||
let opt_suggest_box_span = self.opt_suggest_box_span(else_ty, orig_expected);
|
||||
let if_cause =
|
||||
self.if_cause(sp, then_expr, else_expr, then_ty, else_ty, opt_suggest_box_span);
|
||||
let if_cause = self.if_cause(
|
||||
sp,
|
||||
cond_expr.span,
|
||||
then_expr,
|
||||
else_expr,
|
||||
then_ty,
|
||||
else_ty,
|
||||
opt_suggest_box_span,
|
||||
);
|
||||
|
||||
coerce.coerce(self, &if_cause, else_expr, else_ty);
|
||||
|
||||
|
|
|
@ -35,7 +35,7 @@ note: cycle used when checking item types in top-level module
|
|||
--> $DIR/no-const-async.rs:4:1
|
||||
|
|
||||
LL | pub const async fn x() {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
|
|
|
@ -2,18 +2,18 @@ error[E0391]: cycle detected when evaluating type-level constant
|
|||
--> $DIR/issue-44415.rs:6:17
|
||||
|
|
||||
LL | bytes: [u8; unsafe { intrinsics::size_of::<Foo>() }],
|
||||
| ^^^^^^
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
note: ...which requires const-evaluating + checking `Foo::bytes::{constant#0}`...
|
||||
--> $DIR/issue-44415.rs:6:17
|
||||
|
|
||||
LL | bytes: [u8; unsafe { intrinsics::size_of::<Foo>() }],
|
||||
| ^^^^^^
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
note: ...which requires const-evaluating + checking `Foo::bytes::{constant#0}`...
|
||||
--> $DIR/issue-44415.rs:6:17
|
||||
|
|
||||
LL | bytes: [u8; unsafe { intrinsics::size_of::<Foo>() }],
|
||||
| ^^^^^^
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
= note: ...which requires computing layout of `Foo`...
|
||||
= note: ...which requires computing layout of `[u8; _]`...
|
||||
= note: ...which requires normalizing `[u8; _]`...
|
||||
|
|
|
@ -8,8 +8,13 @@ LL | trait Foo<X = Box<dyn Foo>> {
|
|||
note: cycle used when collecting item types in top-level module
|
||||
--> $DIR/cycle-trait-default-type-trait.rs:4:1
|
||||
|
|
||||
LL | trait Foo<X = Box<dyn Foo>> {
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
LL | / trait Foo<X = Box<dyn Foo>> {
|
||||
LL | |
|
||||
LL | |
|
||||
LL | | }
|
||||
LL | |
|
||||
LL | | fn main() { }
|
||||
| |_____________^
|
||||
|
||||
error[E0391]: cycle detected when computing type of `Foo::X`
|
||||
--> $DIR/cycle-trait-default-type-trait.rs:4:23
|
||||
|
@ -21,8 +26,13 @@ LL | trait Foo<X = Box<dyn Foo>> {
|
|||
note: cycle used when collecting item types in top-level module
|
||||
--> $DIR/cycle-trait-default-type-trait.rs:4:1
|
||||
|
|
||||
LL | trait Foo<X = Box<dyn Foo>> {
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
LL | / trait Foo<X = Box<dyn Foo>> {
|
||||
LL | |
|
||||
LL | |
|
||||
LL | | }
|
||||
LL | |
|
||||
LL | | fn main() { }
|
||||
| |_____________^
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
|
|
|
@ -13,8 +13,10 @@ LL | trait Chromosome: Chromosome {
|
|||
note: cycle used when collecting item types in top-level module
|
||||
--> $DIR/cycle-trait-supertrait-direct.rs:3:1
|
||||
|
|
||||
LL | trait Chromosome: Chromosome {
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
LL | / trait Chromosome: Chromosome {
|
||||
LL | |
|
||||
LL | | }
|
||||
| |_^
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
|
|
|
@ -4,12 +4,10 @@ warning: function cannot return without recursing
|
|||
LL | / fn no_hrtb<'b, T>(mut t: T)
|
||||
LL | | where
|
||||
LL | | T: Bar<&'b isize>,
|
||||
LL | | {
|
||||
... |
|
||||
LL | | no_hrtb(&mut t);
|
||||
| | --------------- recursive call site
|
||||
LL | | }
|
||||
| |_^ cannot return without recursing
|
||||
| |______________________^ cannot return without recursing
|
||||
...
|
||||
LL | no_hrtb(&mut t);
|
||||
| --------------- recursive call site
|
||||
|
|
||||
= note: `#[warn(unconditional_recursion)]` on by default
|
||||
= help: a `loop` may express intention better if this is on purpose
|
||||
|
@ -20,12 +18,10 @@ warning: function cannot return without recursing
|
|||
LL | / fn bar_hrtb<T>(mut t: T)
|
||||
LL | | where
|
||||
LL | | T: for<'b> Bar<&'b isize>,
|
||||
LL | | {
|
||||
... |
|
||||
LL | | bar_hrtb(&mut t);
|
||||
| | ---------------- recursive call site
|
||||
LL | | }
|
||||
| |_^ cannot return without recursing
|
||||
| |______________________________^ cannot return without recursing
|
||||
...
|
||||
LL | bar_hrtb(&mut t);
|
||||
| ---------------- recursive call site
|
||||
|
|
||||
= help: a `loop` may express intention better if this is on purpose
|
||||
|
||||
|
@ -35,14 +31,10 @@ warning: function cannot return without recursing
|
|||
LL | / fn foo_hrtb_bar_not<'b, T>(mut t: T)
|
||||
LL | | where
|
||||
LL | | T: for<'a> Foo<&'a isize> + Bar<&'b isize>,
|
||||
LL | | {
|
||||
... |
|
||||
LL | | foo_hrtb_bar_not(&mut t);
|
||||
| | ------------------------ recursive call site
|
||||
LL | |
|
||||
LL | |
|
||||
LL | | }
|
||||
| |_^ cannot return without recursing
|
||||
| |_______________________________________________^ cannot return without recursing
|
||||
...
|
||||
LL | foo_hrtb_bar_not(&mut t);
|
||||
| ------------------------ recursive call site
|
||||
|
|
||||
= help: a `loop` may express intention better if this is on purpose
|
||||
|
||||
|
@ -70,12 +62,10 @@ warning: function cannot return without recursing
|
|||
LL | / fn foo_hrtb_bar_hrtb<T>(mut t: T)
|
||||
LL | | where
|
||||
LL | | T: for<'a> Foo<&'a isize> + for<'b> Bar<&'b isize>,
|
||||
LL | | {
|
||||
LL | | // OK -- now we have `T : for<'b> Bar<&'b isize>`.
|
||||
LL | | foo_hrtb_bar_hrtb(&mut t);
|
||||
| | ------------------------- recursive call site
|
||||
LL | | }
|
||||
| |_^ cannot return without recursing
|
||||
| |_______________________________________________________^ cannot return without recursing
|
||||
...
|
||||
LL | foo_hrtb_bar_hrtb(&mut t);
|
||||
| ------------------------- recursive call site
|
||||
|
|
||||
= help: a `loop` may express intention better if this is on purpose
|
||||
|
||||
|
|
|
@ -23,8 +23,10 @@ LL | trait T2 : T1 {
|
|||
note: cycle used when collecting item types in top-level module
|
||||
--> $DIR/issue-12511.rs:1:1
|
||||
|
|
||||
LL | trait T1 : T2 {
|
||||
| ^^^^^^^^^^^^^
|
||||
LL | / trait T1 : T2 {
|
||||
LL | |
|
||||
LL | | }
|
||||
| |_^
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
warning: unreachable `pub` item
|
||||
--> $DIR/unreachable_pub.rs:8:5
|
||||
--> $DIR/unreachable_pub.rs:8:13
|
||||
|
|
||||
LL | pub use std::fmt;
|
||||
| ---^^^^^^^^^^^^^^
|
||||
| --- ^^^^^^^^
|
||||
| |
|
||||
| help: consider restricting its visibility: `pub(crate)`
|
||||
|
|
||||
|
@ -93,7 +93,7 @@ warning: unreachable `pub` item
|
|||
--> $DIR/unreachable_pub.rs:33:5
|
||||
|
|
||||
LL | pub const CARBON: usize = 1;
|
||||
| ---^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
| ---^^^^^^^^^^^^^^^^^^^^
|
||||
| |
|
||||
| help: consider restricting its visibility: `pub(crate)`
|
||||
|
|
||||
|
@ -103,7 +103,7 @@ warning: unreachable `pub` item
|
|||
--> $DIR/unreachable_pub.rs:34:5
|
||||
|
|
||||
LL | pub static NITROGEN: usize = 2;
|
||||
| ---^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
| ---^^^^^^^^^^^^^^^^^^^^^^^
|
||||
| |
|
||||
| help: consider restricting its visibility: `pub(crate)`
|
||||
|
|
||||
|
@ -113,7 +113,7 @@ warning: unreachable `pub` item
|
|||
--> $DIR/unreachable_pub.rs:35:5
|
||||
|
|
||||
LL | pub type Oxygen = bool;
|
||||
| ---^^^^^^^^^^^^^^^^^^^^
|
||||
| ---^^^^^^^^^^^^
|
||||
| |
|
||||
| help: consider restricting its visibility: `pub(crate)`
|
||||
|
|
||||
|
@ -123,7 +123,7 @@ warning: unreachable `pub` item
|
|||
--> $DIR/unreachable_pub.rs:38:47
|
||||
|
|
||||
LL | ($visibility: vis, $name: ident) => { $visibility struct $name {} }
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
...
|
||||
LL | define_empty_struct_with_visibility!(pub, Fluorine);
|
||||
| ---------------------------------------------------
|
||||
|
@ -138,7 +138,7 @@ warning: unreachable `pub` item
|
|||
--> $DIR/unreachable_pub.rs:44:9
|
||||
|
|
||||
LL | pub fn catalyze() -> bool;
|
||||
| ---^^^^^^^^^^^^^^^^^^^^^^^
|
||||
| ---^^^^^^^^^^^^^^^^^^^^^^
|
||||
| |
|
||||
| help: consider restricting its visibility: `pub(crate)`
|
||||
|
|
||||
|
|
|
@ -8,8 +8,14 @@ LL | impl dyn ToNbt<Self> {}
|
|||
note: cycle used when collecting item types in top-level module
|
||||
--> $DIR/issue-23305.rs:1:1
|
||||
|
|
||||
LL | pub trait ToNbt<T> {
|
||||
| ^^^^^^^^^^^^^^^^^^
|
||||
LL | / pub trait ToNbt<T> {
|
||||
LL | | fn new(val: T) -> Self;
|
||||
LL | | }
|
||||
LL | |
|
||||
... |
|
||||
LL | |
|
||||
LL | | fn main() {}
|
||||
| |____________^
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
|
|
|
@ -4,11 +4,10 @@ warning: function cannot return without recursing
|
|||
LL | / fn recurse<T>(elements: T) -> Vec<char>
|
||||
LL | | where
|
||||
LL | | T: Iterator<Item = ()>,
|
||||
LL | | {
|
||||
LL | | recurse(IteratorOfWrapped(elements).map(|t| t.0))
|
||||
| | ------------------------------------------------- recursive call site
|
||||
LL | | }
|
||||
| |_^ cannot return without recursing
|
||||
| |___________________________^ cannot return without recursing
|
||||
LL | {
|
||||
LL | recurse(IteratorOfWrapped(elements).map(|t| t.0))
|
||||
| ------------------------------------------------- recursive call site
|
||||
|
|
||||
= note: `#[warn(unconditional_recursion)]` on by default
|
||||
= help: a `loop` may express intention better if this is on purpose
|
||||
|
|
|
@ -14,7 +14,7 @@ note: cycle used when collecting item types in top-level module
|
|||
--> $DIR/cyclic-trait-resolution.rs:1:1
|
||||
|
|
||||
LL | trait A: B + A {}
|
||||
| ^^^^^^^^^^^^^^
|
||||
| ^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
|
|
|
@ -2,18 +2,18 @@ error[E0391]: cycle detected when simplifying constant for the type system `Alph
|
|||
--> $DIR/self-in-enum-definition.rs:5:10
|
||||
|
|
||||
LL | V3 = Self::V1 {} as u8 + 2,
|
||||
| ^^^^^^^^
|
||||
| ^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
note: ...which requires simplifying constant for the type system `Alpha::V3::{constant#0}`...
|
||||
--> $DIR/self-in-enum-definition.rs:5:10
|
||||
|
|
||||
LL | V3 = Self::V1 {} as u8 + 2,
|
||||
| ^^^^^^^^
|
||||
| ^^^^^^^^^^^^^^^^^^^^^
|
||||
note: ...which requires const-evaluating + checking `Alpha::V3::{constant#0}`...
|
||||
--> $DIR/self-in-enum-definition.rs:5:10
|
||||
|
|
||||
LL | V3 = Self::V1 {} as u8 + 2,
|
||||
| ^^^^^^^^
|
||||
| ^^^^^^^^^^^^^^^^^^^^^
|
||||
= note: ...which requires computing layout of `Alpha`...
|
||||
= note: ...which again requires simplifying constant for the type system `Alpha::V3::{constant#0}`, completing the cycle
|
||||
note: cycle used when collecting item types in top-level module
|
||||
|
|
Loading…
Add table
Reference in a new issue