Skip to content

Commit

Permalink
Revert some span_bugs to span_delayed_bug.
Browse files Browse the repository at this point in the history
Fixes #121410.
Fixes #121414.
Fixes #121418.
Fixes #121431.
  • Loading branch information
nnethercote committed Feb 22, 2024
1 parent d8b0069 commit 4f83e50
Show file tree
Hide file tree
Showing 12 changed files with 119 additions and 6 deletions.
4 changes: 3 additions & 1 deletion compiler/rustc_ast_lowering/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1636,7 +1636,9 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
if let Some(old_def_id) = self.orig_opt_local_def_id(param) {
old_def_id
} else {
self.dcx().span_bug(lifetime.ident.span, "no def-id for fresh lifetime");
self.dcx()
.span_delayed_bug(lifetime.ident.span, "no def-id for fresh lifetime");
continue;
}
}

Expand Down
2 changes: 1 addition & 1 deletion compiler/rustc_hir_analysis/src/collect/generics_of.rs
Original file line number Diff line number Diff line change
Expand Up @@ -315,7 +315,7 @@ pub(super) fn generics_of(tcx: TyCtxt<'_>, def_id: LocalDefId) -> ty::Generics {

if is_host_effect {
if let Some(idx) = host_effect_index {
tcx.dcx().span_bug(
tcx.dcx().span_delayed_bug(
param.span,
format!("parent also has host effect param? index: {idx}, def: {def_id:?}"),
);
Expand Down
3 changes: 2 additions & 1 deletion compiler/rustc_hir_typeck/src/mem_categorization.rs
Original file line number Diff line number Diff line change
Expand Up @@ -582,7 +582,8 @@ impl<'a, 'tcx> MemCategorizationContext<'a, 'tcx> {
match ty.kind() {
ty::Tuple(args) => Ok(args.len()),
_ => {
self.tcx().dcx().span_bug(span, "tuple pattern not applied to a tuple");
self.tcx().dcx().span_delayed_bug(span, "tuple pattern not applied to a tuple");
Err(())
}
}
}
Expand Down
4 changes: 1 addition & 3 deletions compiler/rustc_trait_selection/src/traits/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -172,9 +172,7 @@ fn do_normalize_predicates<'tcx>(
// the normalized predicates.
let errors = infcx.resolve_regions(&outlives_env);
if !errors.is_empty() {
// @lcnr: Let's still ICE here for now. I want a test case
// for that.
tcx.dcx().span_bug(
tcx.dcx().span_delayed_bug(
span,
format!("failed region resolution while normalizing {elaborated_env:?}: {errors:?}"),
);
Expand Down
4 changes: 4 additions & 0 deletions tests/ui/lowering/span-bug-issue-121431.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
fn bug<T>() -> impl CallbackMarker< Item = [(); { |_: &mut ()| 3; 4 }] > {}
//~^ ERROR cannot find trait `CallbackMarker` in this scope

fn main() {}
9 changes: 9 additions & 0 deletions tests/ui/lowering/span-bug-issue-121431.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
error[E0405]: cannot find trait `CallbackMarker` in this scope
--> $DIR/span-bug-issue-121431.rs:1:21
|
LL | fn bug<T>() -> impl CallbackMarker< Item = [(); { |_: &mut ()| 3; 4 }] > {}
| ^^^^^^^^^^^^^^ not found in this scope

error: aborting due to 1 previous error

For more information about this error, try `rustc --explain E0405`.
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
#![feature(const_trait_impl)]
#![feature(effects)]

struct S;
trait T {}

impl const dyn T {
//~^ ERROR inherent impls cannot be `const`
//~| ERROR the const parameter `host` is not constrained by the impl trait, self type, or
pub const fn new() -> std::sync::Mutex<dyn T> {}
}

fn main() {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
error: inherent impls cannot be `const`
--> $DIR/span-bug-issue-121418.rs:7:12
|
LL | impl const dyn T {
| ----- ^^^^^ inherent impl for this type
| |
| `const` because of this
|
= note: only trait implementations may be annotated with `const`

error[E0207]: the const parameter `host` is not constrained by the impl trait, self type, or predicates
--> $DIR/span-bug-issue-121418.rs:7:6
|
LL | impl const dyn T {
| ^^^^^ unconstrained const parameter
|
= note: expressions using a const parameter must map each value to a distinct output value
= note: proving the result of expressions other than the parameter are unique is not supported

error: aborting due to 2 previous errors

For more information about this error, try `rustc --explain E0207`.
15 changes: 15 additions & 0 deletions tests/ui/traits/span-bug-issue-121414.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
trait Bar {
type Type;
}
struct Foo<'a>(&'a ());
impl<'a> Bar for Foo<'f> { //~ ERROR undeclared lifetime
type Type = u32;
}

fn test() //~ ERROR implementation of `Bar` is not general enough
where
for<'a> <Foo<'a> as Bar>::Type: Sized,
{
}

fn main() {}
20 changes: 20 additions & 0 deletions tests/ui/traits/span-bug-issue-121414.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
error[E0261]: use of undeclared lifetime name `'f`
--> $DIR/span-bug-issue-121414.rs:5:22
|
LL | impl<'a> Bar for Foo<'f> {
| - ^^ undeclared lifetime
| |
| help: consider introducing lifetime `'f` here: `'f,`

error: implementation of `Bar` is not general enough
--> $DIR/span-bug-issue-121414.rs:9:4
|
LL | fn test()
| ^^^^ implementation of `Bar` is not general enough
|
= note: `Bar` would have to be implemented for the type `Foo<'0>`, for any lifetime `'0`...
= note: ...but `Bar` is actually implemented for the type `Foo<'1>`, for some specific lifetime `'1`

error: aborting due to 2 previous errors

For more information about this error, try `rustc --explain E0261`.
15 changes: 15 additions & 0 deletions tests/ui/typeck/span-bug-issue-121410.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
fn test_missing_unsafe_warning_on_repr_packed() {
struct Foo {
x: String,
}

let foo = Foo { x: String::new() };

let c = || {
let (_, t2) = foo.x; //~ ERROR mismatched types
};

c();
}

fn main() {}
14 changes: 14 additions & 0 deletions tests/ui/typeck/span-bug-issue-121410.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
error[E0308]: mismatched types
--> $DIR/span-bug-issue-121410.rs:9:13
|
LL | let (_, t2) = foo.x;
| ^^^^^^^ ----- this expression has type `String`
| |
| expected `String`, found `(_, _)`
|
= note: expected struct `String`
found tuple `(_, _)`

error: aborting due to 1 previous error

For more information about this error, try `rustc --explain E0308`.

0 comments on commit 4f83e50

Please sign in to comment.