Skip to content

Commit a48e7b0

Browse files
committed
Auto merge of rust-lang#135473 - matthiaskrgr:rollup-ksnst4l, r=matthiaskrgr
Rollup of 3 pull requests Successful merges: - rust-lang#135381 (Add an example for `Vec::splice` inserting elements without removing) - rust-lang#135451 (Remove code duplication when hashing query result and interning node) - rust-lang#135464 (fix ICE with references to infinite structs in consts) r? `@ghost` `@rustbot` modify labels: rollup
2 parents e491cae + 4cadb5d commit a48e7b0

File tree

8 files changed

+160
-52
lines changed

8 files changed

+160
-52
lines changed

Diff for: compiler/rustc_middle/src/query/plumbing.rs

-1
Original file line numberDiff line numberDiff line change
@@ -548,7 +548,6 @@ macro_rules! define_feedable {
548548
let dep_node_index = tcx.dep_graph.with_feed_task(
549549
dep_node,
550550
tcx,
551-
key,
552551
&value,
553552
hash_result!([$($modifiers)*]),
554553
);

Diff for: compiler/rustc_query_system/src/dep_graph/graph.rs

+36-42
Original file line numberDiff line numberDiff line change
@@ -376,25 +376,8 @@ impl<D: Deps> DepGraphData<D> {
376376
};
377377

378378
let dcx = cx.dep_context();
379-
let hashing_timer = dcx.profiler().incr_result_hashing();
380-
let current_fingerprint =
381-
hash_result.map(|f| dcx.with_stable_hashing_context(|mut hcx| f(&mut hcx, &result)));
382-
383-
// Intern the new `DepNode`.
384-
let (dep_node_index, prev_and_color) =
385-
self.current.intern_node(&self.previous, key, edges, current_fingerprint);
386-
387-
hashing_timer.finish_with_query_invocation_id(dep_node_index.into());
388-
389-
if let Some((prev_index, color)) = prev_and_color {
390-
debug_assert!(
391-
self.colors.get(prev_index).is_none(),
392-
"DepGraph::with_task() - Duplicate DepNodeColor \
393-
insertion for {key:?}"
394-
);
395-
396-
self.colors.insert(prev_index, color);
397-
}
379+
let dep_node_index =
380+
self.hash_result_and_intern_node(dcx, key, edges, &result, hash_result);
398381

399382
(result, dep_node_index)
400383
}
@@ -462,6 +445,38 @@ impl<D: Deps> DepGraphData<D> {
462445

463446
(result, dep_node_index)
464447
}
448+
449+
/// Intern the new `DepNode` with the dependencies up-to-now.
450+
fn hash_result_and_intern_node<Ctxt: DepContext<Deps = D>, R>(
451+
&self,
452+
cx: &Ctxt,
453+
node: DepNode,
454+
edges: EdgesVec,
455+
result: &R,
456+
hash_result: Option<fn(&mut StableHashingContext<'_>, &R) -> Fingerprint>,
457+
) -> DepNodeIndex {
458+
let hashing_timer = cx.profiler().incr_result_hashing();
459+
let current_fingerprint = hash_result.map(|hash_result| {
460+
cx.with_stable_hashing_context(|mut hcx| hash_result(&mut hcx, result))
461+
});
462+
463+
// Intern the new `DepNode` with the dependencies up-to-now.
464+
let (dep_node_index, prev_and_color) =
465+
self.current.intern_node(&self.previous, node, edges, current_fingerprint);
466+
467+
hashing_timer.finish_with_query_invocation_id(dep_node_index.into());
468+
469+
if let Some((prev_index, color)) = prev_and_color {
470+
debug_assert!(
471+
self.colors.get(prev_index).is_none(),
472+
"DepGraph::with_task() - Duplicate DepNodeColor insertion for {node:?}",
473+
);
474+
475+
self.colors.insert(prev_index, color);
476+
}
477+
478+
dep_node_index
479+
}
465480
}
466481

467482
impl<D: Deps> DepGraph<D> {
@@ -536,11 +551,10 @@ impl<D: Deps> DepGraph<D> {
536551
/// FIXME: If the code is changed enough for this node to be marked before requiring the
537552
/// caller's node, we suppose that those changes will be enough to mark this node red and
538553
/// force a recomputation using the "normal" way.
539-
pub fn with_feed_task<Ctxt: DepContext<Deps = D>, A: Debug, R: Debug>(
554+
pub fn with_feed_task<Ctxt: DepContext<Deps = D>, R: Debug>(
540555
&self,
541556
node: DepNode,
542557
cx: Ctxt,
543-
key: A,
544558
result: &R,
545559
hash_result: Option<fn(&mut StableHashingContext<'_>, &R) -> Fingerprint>,
546560
) -> DepNodeIndex {
@@ -588,27 +602,7 @@ impl<D: Deps> DepGraph<D> {
588602
}
589603
});
590604

591-
let hashing_timer = cx.profiler().incr_result_hashing();
592-
let current_fingerprint = hash_result.map(|hash_result| {
593-
cx.with_stable_hashing_context(|mut hcx| hash_result(&mut hcx, result))
594-
});
595-
596-
// Intern the new `DepNode` with the dependencies up-to-now.
597-
let (dep_node_index, prev_and_color) =
598-
data.current.intern_node(&data.previous, node, edges, current_fingerprint);
599-
600-
hashing_timer.finish_with_query_invocation_id(dep_node_index.into());
601-
602-
if let Some((prev_index, color)) = prev_and_color {
603-
debug_assert!(
604-
data.colors.get(prev_index).is_none(),
605-
"DepGraph::with_task() - Duplicate DepNodeColor insertion for {key:?}",
606-
);
607-
608-
data.colors.insert(prev_index, color);
609-
}
610-
611-
dep_node_index
605+
data.hash_result_and_intern_node(&cx, node, edges, result, hash_result)
612606
} else {
613607
// Incremental compilation is turned off. We just execute the task
614608
// without tracking. We still provide a dep-node index that uniquely

Diff for: compiler/rustc_trait_selection/src/traits/project.rs

+4-3
Original file line numberDiff line numberDiff line change
@@ -1148,7 +1148,9 @@ fn assemble_candidates_from_impls<'cx, 'tcx>(
11481148
// If returned by `struct_tail` this is the empty tuple.
11491149
| ty::Tuple(..)
11501150
// Integers and floats are always Sized, and so have unit type metadata.
1151-
| ty::Infer(ty::InferTy::IntVar(_) | ty::InferTy::FloatVar(..)) => true,
1151+
| ty::Infer(ty::InferTy::IntVar(_) | ty::InferTy::FloatVar(..))
1152+
// This happens if we reach the recursion limit when finding the struct tail.
1153+
| ty::Error(..) => true,
11521154

11531155
// We normalize from `Wrapper<Tail>::Metadata` to `Tail::Metadata` if able.
11541156
// Otherwise, type parameters, opaques, and unnormalized projections have
@@ -1179,8 +1181,7 @@ fn assemble_candidates_from_impls<'cx, 'tcx>(
11791181
| ty::Alias(..)
11801182
| ty::Bound(..)
11811183
| ty::Placeholder(..)
1182-
| ty::Infer(..)
1183-
| ty::Error(_) => {
1184+
| ty::Infer(..) => {
11841185
if tail.has_infer_types() {
11851186
candidate_set.mark_ambiguous();
11861187
}

Diff for: library/alloc/src/vec/mod.rs

+13-3
Original file line numberDiff line numberDiff line change
@@ -3587,7 +3587,7 @@ impl<T, A: Allocator> Vec<T, A> {
35873587
/// with the given `replace_with` iterator and yields the removed items.
35883588
/// `replace_with` does not need to be the same length as `range`.
35893589
///
3590-
/// `range` is removed even if the iterator is not consumed until the end.
3590+
/// `range` is removed even if the `Splice` iterator is not consumed before it is dropped.
35913591
///
35923592
/// It is unspecified how many elements are removed from the vector
35933593
/// if the `Splice` value is leaked.
@@ -3613,8 +3613,18 @@ impl<T, A: Allocator> Vec<T, A> {
36133613
/// let mut v = vec![1, 2, 3, 4];
36143614
/// let new = [7, 8, 9];
36153615
/// let u: Vec<_> = v.splice(1..3, new).collect();
3616-
/// assert_eq!(v, &[1, 7, 8, 9, 4]);
3617-
/// assert_eq!(u, &[2, 3]);
3616+
/// assert_eq!(v, [1, 7, 8, 9, 4]);
3617+
/// assert_eq!(u, [2, 3]);
3618+
/// ```
3619+
///
3620+
/// Using `splice` to insert new items into a vector efficiently at a specific position
3621+
/// indicated by an empty range:
3622+
///
3623+
/// ```
3624+
/// let mut v = vec![1, 5];
3625+
/// let new = [2, 3, 4];
3626+
/// v.splice(1..1, new);
3627+
/// assert_eq!(v, [1, 2, 3, 4, 5]);
36183628
/// ```
36193629
#[cfg(not(no_global_oom_handling))]
36203630
#[inline]

Diff for: tests/crashes/114484.rs renamed to tests/ui/infinite/infinite-instantiation-struct-tail-ice-114484.rs

+9-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,12 @@
1-
//@ known-bug: #114484
1+
//@ build-fail
2+
3+
//@ error-pattern: reached the recursion limit while instantiating
4+
//@ error-pattern: reached the recursion limit finding the struct tail
5+
6+
// Regression test for #114484: This used to ICE during monomorphization, because we treated
7+
// `<VirtualWrapper<...> as Pointee>::Metadata` as a rigid projection after reaching the recursion
8+
// limit when finding the struct tail.
9+
210
use std::marker::PhantomData;
311

412
trait MyTrait {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
error: reached the recursion limit finding the struct tail for `[u8; 256]`
2+
|
3+
= help: consider increasing the recursion limit by adding a `#![recursion_limit = "256"]`
4+
5+
error: reached the recursion limit finding the struct tail for `[u8; 256]`
6+
|
7+
= help: consider increasing the recursion limit by adding a `#![recursion_limit = "256"]`
8+
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
9+
10+
error: reached the recursion limit finding the struct tail for `[u8; 256]`
11+
|
12+
= help: consider increasing the recursion limit by adding a `#![recursion_limit = "256"]`
13+
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
14+
15+
error: reached the recursion limit finding the struct tail for `[u8; 256]`
16+
|
17+
= help: consider increasing the recursion limit by adding a `#![recursion_limit = "256"]`
18+
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
19+
20+
note: the above error was encountered while instantiating `fn virtualize_my_trait::<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<SomeData<256>, 0>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>>`
21+
--> $DIR/infinite-instantiation-struct-tail-ice-114484.rs:26:18
22+
|
23+
LL | unsafe { virtualize_my_trait(L, self) }
24+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
25+
26+
error: reached the recursion limit finding the struct tail for `SomeData<256>`
27+
|
28+
= help: consider increasing the recursion limit by adding a `#![recursion_limit = "256"]`
29+
30+
error: reached the recursion limit finding the struct tail for `SomeData<256>`
31+
|
32+
= help: consider increasing the recursion limit by adding a `#![recursion_limit = "256"]`
33+
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
34+
35+
error: reached the recursion limit finding the struct tail for `SomeData<256>`
36+
|
37+
= help: consider increasing the recursion limit by adding a `#![recursion_limit = "256"]`
38+
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
39+
40+
error: reached the recursion limit finding the struct tail for `SomeData<256>`
41+
|
42+
= help: consider increasing the recursion limit by adding a `#![recursion_limit = "256"]`
43+
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
44+
45+
note: the above error was encountered while instantiating `fn virtualize_my_trait::<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<SomeData<256>, 0>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>>`
46+
--> $DIR/infinite-instantiation-struct-tail-ice-114484.rs:26:18
47+
|
48+
LL | unsafe { virtualize_my_trait(L, self) }
49+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
50+
51+
error: reached the recursion limit finding the struct tail for `VirtualWrapper<SomeData<256>, 0>`
52+
|
53+
= help: consider increasing the recursion limit by adding a `#![recursion_limit = "256"]`
54+
55+
error: reached the recursion limit finding the struct tail for `VirtualWrapper<SomeData<256>, 0>`
56+
|
57+
= help: consider increasing the recursion limit by adding a `#![recursion_limit = "256"]`
58+
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
59+
60+
error: reached the recursion limit finding the struct tail for `VirtualWrapper<SomeData<256>, 0>`
61+
|
62+
= help: consider increasing the recursion limit by adding a `#![recursion_limit = "256"]`
63+
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
64+
65+
error: reached the recursion limit finding the struct tail for `VirtualWrapper<SomeData<256>, 0>`
66+
|
67+
= help: consider increasing the recursion limit by adding a `#![recursion_limit = "256"]`
68+
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
69+
70+
note: the above error was encountered while instantiating `fn virtualize_my_trait::<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<SomeData<256>, 0>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>>`
71+
--> $DIR/infinite-instantiation-struct-tail-ice-114484.rs:26:18
72+
|
73+
LL | unsafe { virtualize_my_trait(L, self) }
74+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
75+
76+
error: reached the recursion limit while instantiating `<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<VirtualWrapper<..., 1>, 1>, 1>, 1>, 1> as MyTrait>::virtualize`
77+
|
78+
note: `<VirtualWrapper<T, L> as MyTrait>::virtualize` defined here
79+
--> $DIR/infinite-instantiation-struct-tail-ice-114484.rs:25:5
80+
|
81+
LL | fn virtualize(&self) -> &dyn MyTrait {
82+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
83+
= note: the full type name has been written to '$TEST_BUILD_DIR/infinite/infinite-instantiation-struct-tail-ice-114484/infinite-instantiation-struct-tail-ice-114484.long-type.txt'
84+
85+
error: aborting due to 13 previous errors
86+

Diff for: tests/ui/structs/ice-struct-tail-normalization-113272.rs

+1
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,6 @@ struct Other {
1313
fn main() {
1414
unsafe {
1515
std::mem::transmute::<Option<()>, Option<&Other>>(None);
16+
//~^ ERROR cannot transmute
1617
}
1718
}

0 commit comments

Comments
 (0)