diff --git a/Makefile b/Makefile index f649218d..687a1e16 100644 --- a/Makefile +++ b/Makefile @@ -15,7 +15,7 @@ rustup-clear-toolchain: rustup override unset --nonexistent rustup toolchain uninstall "${TOOLCHAIN_NAME}" -TESTDIR=$(CURDIR)/tests/integration/programs +TESTDIR=tests/integration/programs .PHONY: integration-test integration-test: TESTS ?= $(shell find $(TESTDIR) -type f -name "*.rs") diff --git a/src/printer/ty_visitor.rs b/src/printer/ty_visitor.rs index 07ee6f46..3fe1a6c2 100644 --- a/src/printer/ty_visitor.rs +++ b/src/printer/ty_visitor.rs @@ -4,9 +4,9 @@ //! type trees, recording each relevant type along with its `TyKind` and //! `LayoutShape`. These collected types are later transformed into //! [`TypeMetadata`](super::schema::TypeMetadata) entries in the final output. -//! Note that some special kinds (closures, function definitions/pointers, and -//! coroutine witnesses) are traversed only to gather the types they reference -//! and are not themselves stored as entries in the type map. +//! Note that some special kinds (function definitions/pointers and coroutine +//! witnesses) are traversed only to gather the types they reference and are +//! not themselves stored as entries in the type map. extern crate rustc_middle; extern crate rustc_smir; @@ -63,7 +63,13 @@ impl Visitor for TyCollector<'_> { self.resolved.insert(*ty); let instance = Instance::resolve_closure(def, args, stable_mir::ty::ClosureKind::Fn).unwrap(); - self.visit_instance(instance) + let control = self.visit_instance(instance); + // Mirror other branches: record closure Ty only when traversal succeeds. + if matches!(control, ControlFlow::Continue(_)) { + let maybe_layout_shape = ty.layout().ok().map(|layout| layout.shape()); + self.types.insert(*ty, (ty.kind(), maybe_layout_shape)); + } + control } // Break on CoroutineWitnesses, because they aren't expected when getting the layout TyKind::RigidTy(RigidTy::CoroutineWitness(..)) => { diff --git a/tests/integration/programs/assert_eq.smir.json.expected b/tests/integration/programs/assert_eq.smir.json.expected index 6273e565..635d5a1d 100644 --- a/tests/integration/programs/assert_eq.smir.json.expected +++ b/tests/integration/programs/assert_eq.smir.json.expected @@ -5745,6 +5745,11 @@ "pointee_type": "elided" } } + ], + [ + { + "FunType": "{closure@std::rt::lang_start<()>::{closure#0}}" + } ] ] } diff --git a/tests/integration/programs/binop.smir.json.expected b/tests/integration/programs/binop.smir.json.expected index 1b65e3f5..0c56360d 100644 --- a/tests/integration/programs/binop.smir.json.expected +++ b/tests/integration/programs/binop.smir.json.expected @@ -10113,6 +10113,11 @@ "pointee_type": "elided" } } + ], + [ + { + "FunType": "{closure@std::rt::lang_start<()>::{closure#0}}" + } ] ] } diff --git a/tests/integration/programs/char-trivial.smir.json.expected b/tests/integration/programs/char-trivial.smir.json.expected index abac1526..813cd603 100644 --- a/tests/integration/programs/char-trivial.smir.json.expected +++ b/tests/integration/programs/char-trivial.smir.json.expected @@ -2174,6 +2174,11 @@ "pointee_type": "elided" } } + ], + [ + { + "FunType": "{closure@std::rt::lang_start<()>::{closure#0}}" + } ] ] } diff --git a/tests/integration/programs/closure-args.smir.json.expected b/tests/integration/programs/closure-args.smir.json.expected index 0a49992d..2eda0173 100644 --- a/tests/integration/programs/closure-args.smir.json.expected +++ b/tests/integration/programs/closure-args.smir.json.expected @@ -2612,6 +2612,16 @@ "pointee_type": "elided" } } + ], + [ + { + "FunType": "{closure@std::rt::lang_start<()>::{closure#0}}" + } + ], + [ + { + "FunType": "{closure@tests/integration/programs/closure-args.rs:2:15: 2:28}" + } ] ] } diff --git a/tests/integration/programs/closure-no-args.smir.json.expected b/tests/integration/programs/closure-no-args.smir.json.expected index c2de3444..dacc8052 100644 --- a/tests/integration/programs/closure-no-args.smir.json.expected +++ b/tests/integration/programs/closure-no-args.smir.json.expected @@ -2307,6 +2307,16 @@ "pointee_type": "elided" } } + ], + [ + { + "FunType": "{closure@std::rt::lang_start<()>::{closure#0}}" + } + ], + [ + { + "FunType": "{closure@tests/integration/programs/closure-no-args.rs:2:15: 2:24}" + } ] ] } diff --git a/tests/integration/programs/const-arithm-simple.smir.json.expected b/tests/integration/programs/const-arithm-simple.smir.json.expected index 095b8fdc..24dac3cf 100644 --- a/tests/integration/programs/const-arithm-simple.smir.json.expected +++ b/tests/integration/programs/const-arithm-simple.smir.json.expected @@ -2427,6 +2427,11 @@ "pointee_type": "elided" } } + ], + [ + { + "FunType": "{closure@std::rt::lang_start<()>::{closure#0}}" + } ] ] } diff --git a/tests/integration/programs/div.smir.json.expected b/tests/integration/programs/div.smir.json.expected index 70ce02aa..66769d75 100644 --- a/tests/integration/programs/div.smir.json.expected +++ b/tests/integration/programs/div.smir.json.expected @@ -2528,6 +2528,11 @@ "pointee_type": "elided" } } + ], + [ + { + "FunType": "{closure@std::rt::lang_start<()>::{closure#0}}" + } ] ] } diff --git a/tests/integration/programs/double-ref-deref.smir.json.expected b/tests/integration/programs/double-ref-deref.smir.json.expected index 8f034087..35a74128 100644 --- a/tests/integration/programs/double-ref-deref.smir.json.expected +++ b/tests/integration/programs/double-ref-deref.smir.json.expected @@ -2350,6 +2350,11 @@ "pointee_type": "elided" } } + ], + [ + { + "FunType": "{closure@std::rt::lang_start<()>::{closure#0}}" + } ] ] } diff --git a/tests/integration/programs/enum.smir.json.expected b/tests/integration/programs/enum.smir.json.expected index d9d52971..1a39027a 100644 --- a/tests/integration/programs/enum.smir.json.expected +++ b/tests/integration/programs/enum.smir.json.expected @@ -1959,6 +1959,11 @@ "pointee_type": "elided" } } + ], + [ + { + "FunType": "{closure@std::rt::lang_start<()>::{closure#0}}" + } ] ] } diff --git a/tests/integration/programs/fibonacci.smir.json.expected b/tests/integration/programs/fibonacci.smir.json.expected index f51f792e..38fd6dec 100644 --- a/tests/integration/programs/fibonacci.smir.json.expected +++ b/tests/integration/programs/fibonacci.smir.json.expected @@ -2891,6 +2891,11 @@ "pointee_type": "elided" } } + ], + [ + { + "FunType": "{closure@std::rt::lang_start<()>::{closure#0}}" + } ] ] } diff --git a/tests/integration/programs/float.smir.json.expected b/tests/integration/programs/float.smir.json.expected index 23db4423..69ce1ca2 100644 --- a/tests/integration/programs/float.smir.json.expected +++ b/tests/integration/programs/float.smir.json.expected @@ -2740,6 +2740,11 @@ "pointee_type": "elided" } } + ], + [ + { + "FunType": "{closure@std::rt::lang_start<()>::{closure#0}}" + } ] ] } diff --git a/tests/integration/programs/fn-ptr-in-arg.smir.json.expected b/tests/integration/programs/fn-ptr-in-arg.smir.json.expected index a848d963..bd81f974 100644 --- a/tests/integration/programs/fn-ptr-in-arg.smir.json.expected +++ b/tests/integration/programs/fn-ptr-in-arg.smir.json.expected @@ -7507,6 +7507,11 @@ "pointee_type": "elided" } } + ], + [ + { + "FunType": "{closure@std::rt::lang_start<()>::{closure#0}}" + } ] ] } diff --git a/tests/integration/programs/modulo.smir.json.expected b/tests/integration/programs/modulo.smir.json.expected index 033c8056..4f014287 100644 --- a/tests/integration/programs/modulo.smir.json.expected +++ b/tests/integration/programs/modulo.smir.json.expected @@ -2526,6 +2526,11 @@ "pointee_type": "elided" } } + ], + [ + { + "FunType": "{closure@std::rt::lang_start<()>::{closure#0}}" + } ] ] } diff --git a/tests/integration/programs/mutual_recursion.smir.json.expected b/tests/integration/programs/mutual_recursion.smir.json.expected index fbff6ee6..b28ac02e 100644 --- a/tests/integration/programs/mutual_recursion.smir.json.expected +++ b/tests/integration/programs/mutual_recursion.smir.json.expected @@ -2843,6 +2843,11 @@ "pointee_type": "elided" } } + ], + [ + { + "FunType": "{closure@std::rt::lang_start<()>::{closure#0}}" + } ] ] } diff --git a/tests/integration/programs/option-construction.smir.json.expected b/tests/integration/programs/option-construction.smir.json.expected index bdcf3f02..a351ccbd 100644 --- a/tests/integration/programs/option-construction.smir.json.expected +++ b/tests/integration/programs/option-construction.smir.json.expected @@ -2467,6 +2467,11 @@ "pointee_type": "elided" } } + ], + [ + { + "FunType": "{closure@std::rt::lang_start<()>::{closure#0}}" + } ] ] } diff --git a/tests/integration/programs/param_types.smir.json.expected b/tests/integration/programs/param_types.smir.json.expected index 949ebd68..b24a6788 100644 --- a/tests/integration/programs/param_types.smir.json.expected +++ b/tests/integration/programs/param_types.smir.json.expected @@ -5285,6 +5285,11 @@ "pointee_type": "elided" } } + ], + [ + { + "FunType": "{closure@std::rt::lang_start<()>::{closure#0}}" + } ] ] } diff --git a/tests/integration/programs/primitive-type-bounds.smir.json.expected b/tests/integration/programs/primitive-type-bounds.smir.json.expected index 3a88aefe..dfff4114 100644 --- a/tests/integration/programs/primitive-type-bounds.smir.json.expected +++ b/tests/integration/programs/primitive-type-bounds.smir.json.expected @@ -2459,6 +2459,11 @@ "pointee_type": "elided" } } + ], + [ + { + "FunType": "{closure@std::rt::lang_start<()>::{closure#0}}" + } ] ] } diff --git a/tests/integration/programs/recursion-simple-match.smir.json.expected b/tests/integration/programs/recursion-simple-match.smir.json.expected index 4b46e783..7e331550 100644 --- a/tests/integration/programs/recursion-simple-match.smir.json.expected +++ b/tests/integration/programs/recursion-simple-match.smir.json.expected @@ -2658,6 +2658,11 @@ "pointee_type": "elided" } } + ], + [ + { + "FunType": "{closure@std::rt::lang_start<()>::{closure#0}}" + } ] ] } diff --git a/tests/integration/programs/recursion-simple.smir.json.expected b/tests/integration/programs/recursion-simple.smir.json.expected index 3f2e2ea2..b39ff5a7 100644 --- a/tests/integration/programs/recursion-simple.smir.json.expected +++ b/tests/integration/programs/recursion-simple.smir.json.expected @@ -2658,6 +2658,11 @@ "pointee_type": "elided" } } + ], + [ + { + "FunType": "{closure@std::rt::lang_start<()>::{closure#0}}" + } ] ] } diff --git a/tests/integration/programs/ref-deref.smir.json.expected b/tests/integration/programs/ref-deref.smir.json.expected index aadfd758..19f6d2ff 100644 --- a/tests/integration/programs/ref-deref.smir.json.expected +++ b/tests/integration/programs/ref-deref.smir.json.expected @@ -2265,6 +2265,11 @@ "pointee_type": "elided" } } + ], + [ + { + "FunType": "{closure@std::rt::lang_start<()>::{closure#0}}" + } ] ] } diff --git a/tests/integration/programs/shl_min.smir.json.expected b/tests/integration/programs/shl_min.smir.json.expected index 17a19381..7690d038 100644 --- a/tests/integration/programs/shl_min.smir.json.expected +++ b/tests/integration/programs/shl_min.smir.json.expected @@ -3992,6 +3992,11 @@ "pointee_type": "elided" } } + ], + [ + { + "FunType": "{closure@std::rt::lang_start<()>::{closure#0}}" + } ] ] } diff --git a/tests/integration/programs/slice.smir.json.expected b/tests/integration/programs/slice.smir.json.expected index 08331532..ee6c4084 100644 --- a/tests/integration/programs/slice.smir.json.expected +++ b/tests/integration/programs/slice.smir.json.expected @@ -5869,6 +5869,11 @@ "pointee_type": "elided" } } + ], + [ + { + "FunType": "{closure@std::rt::lang_start<()>::{closure#0}}" + } ] ] } diff --git a/tests/integration/programs/strange-ref-deref.smir.json.expected b/tests/integration/programs/strange-ref-deref.smir.json.expected index cf883e4d..f5316c53 100644 --- a/tests/integration/programs/strange-ref-deref.smir.json.expected +++ b/tests/integration/programs/strange-ref-deref.smir.json.expected @@ -2353,6 +2353,11 @@ "pointee_type": "elided" } } + ], + [ + { + "FunType": "{closure@std::rt::lang_start<()>::{closure#0}}" + } ] ] } diff --git a/tests/integration/programs/struct.smir.json.expected b/tests/integration/programs/struct.smir.json.expected index 1e58399a..a62354e5 100644 --- a/tests/integration/programs/struct.smir.json.expected +++ b/tests/integration/programs/struct.smir.json.expected @@ -2558,6 +2558,11 @@ "pointee_type": "elided" } } + ], + [ + { + "FunType": "{closure@std::rt::lang_start<()>::{closure#0}}" + } ] ] } diff --git a/tests/integration/programs/sum-to-n.smir.json.expected b/tests/integration/programs/sum-to-n.smir.json.expected index 7f178b6a..343e5e31 100644 --- a/tests/integration/programs/sum-to-n.smir.json.expected +++ b/tests/integration/programs/sum-to-n.smir.json.expected @@ -3079,6 +3079,11 @@ "pointee_type": "elided" } } + ], + [ + { + "FunType": "{closure@std::rt::lang_start<()>::{closure#0}}" + } ] ] } diff --git a/tests/integration/programs/tuple-eq.smir.json.expected b/tests/integration/programs/tuple-eq.smir.json.expected index c50c8722..56bb496c 100644 --- a/tests/integration/programs/tuple-eq.smir.json.expected +++ b/tests/integration/programs/tuple-eq.smir.json.expected @@ -3097,6 +3097,11 @@ "pointee_type": "elided" } } + ], + [ + { + "FunType": "{closure@std::rt::lang_start<()>::{closure#0}}" + } ] ] } diff --git a/tests/integration/programs/tuples-simple.smir.json.expected b/tests/integration/programs/tuples-simple.smir.json.expected index 4419b919..cb5dba84 100644 --- a/tests/integration/programs/tuples-simple.smir.json.expected +++ b/tests/integration/programs/tuples-simple.smir.json.expected @@ -2345,6 +2345,11 @@ "pointee_type": "elided" } } + ], + [ + { + "FunType": "{closure@std::rt::lang_start<()>::{closure#0}}" + } ] ] } diff --git a/tests/integration/programs/weirdRefs.smir.json.expected b/tests/integration/programs/weirdRefs.smir.json.expected index ad1a63e7..fe11aec6 100644 --- a/tests/integration/programs/weirdRefs.smir.json.expected +++ b/tests/integration/programs/weirdRefs.smir.json.expected @@ -3863,6 +3863,11 @@ "pointee_type": "elided" } } + ], + [ + { + "FunType": "{closure@std::rt::lang_start<()>::{closure#0}}" + } ] ] }