Rollup merge of #110465 - WaffleLapkin:assure_everyone_that_has_type_flags_is_fast, r=oli-obk

Assure everyone that `has_type_flags` is fast

`number_of_people_who_tripped_on_this += 1`

r? ``@oli-obk``
This commit is contained in:
Matthias Krüger 2023-04-18 06:44:48 +02:00 committed by GitHub
commit 5606653f01
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -33,6 +33,14 @@ fn has_escaping_bound_vars(&self) -> bool {
}
fn has_type_flags(&self, flags: TypeFlags) -> bool {
// N.B. Even though this uses a visitor, the visitor does not actually
// recurse through the whole `TypeVisitable` implementor type.
//
// Instead it stops on the first "level", visiting types, regions,
// consts and predicates just fetches their type flags.
//
// Thus this is a lot faster than it might seem and should be
// optimized to a simple field access.
let res =
self.visit_with(&mut HasTypeFlagsVisitor { flags }).break_value() == Some(FoundFlags);
trace!(?self, ?flags, ?res, "has_type_flags");