Skip to content

Commit 0b0d299

Browse files
authored
Merge pull request #21396 from Veykril/push-vowxzulyqvuu
perf: Only compute lang items for `#![feature(lang_items)]` crates
2 parents 036c71a + 8facf73 commit 0b0d299

13 files changed

Lines changed: 51 additions & 58 deletions

File tree

crates/hir-def/src/lang_item.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,10 @@ pub fn crate_lang_items(db: &dyn DefDatabase, krate: Crate) -> Option<Box<LangIt
4040

4141
let crate_def_map = crate_def_map(db, krate);
4242

43+
if !crate_def_map.is_unstable_feature_enabled(&sym::lang_items) {
44+
return None;
45+
}
46+
4347
for (_, module_data) in crate_def_map.modules() {
4448
for impl_def in module_data.scope.inherent_impls() {
4549
lang_items.collect_lang_item(db, impl_def);

crates/hir-ty/src/consteval/tests.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2209,6 +2209,7 @@ fn boxes() {
22092209
check_number(
22102210
r#"
22112211
//- minicore: coerce_unsized, deref_mut, slice
2212+
#![feature(lang_items)]
22122213
use core::ops::{Deref, DerefMut};
22132214
use core::{marker::Unsize, ops::CoerceUnsized};
22142215
@@ -2346,6 +2347,7 @@ fn c_string() {
23462347
check_number(
23472348
r#"
23482349
//- minicore: index, slice
2350+
#![feature(lang_items)]
23492351
#[lang = "CStr"]
23502352
pub struct CStr {
23512353
inner: [u8]
@@ -2360,6 +2362,7 @@ const GOAL: u8 = {
23602362
check_number(
23612363
r#"
23622364
//- minicore: index, slice
2365+
#![feature(lang_items)]
23632366
#[lang = "CStr"]
23642367
pub struct CStr {
23652368
inner: [u8]

crates/hir-ty/src/tests/incremental.rs

Lines changed: 5 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -132,14 +132,13 @@ fn baz() -> i32 {
132132
"trait_environment_query",
133133
"lang_items",
134134
"crate_lang_items",
135-
"AttrFlags::query_",
136-
"AttrFlags::query_",
137135
"GenericPredicates::query_with_diagnostics_",
138136
"ImplTraits::return_type_impl_traits_",
139137
"expr_scopes_shim",
140138
"InferenceResult::for_body_",
141139
"function_signature_shim",
142140
"function_signature_with_source_map_shim",
141+
"AttrFlags::query_",
143142
"body_shim",
144143
"body_with_source_map_shim",
145144
"trait_environment_query",
@@ -149,6 +148,7 @@ fn baz() -> i32 {
149148
"InferenceResult::for_body_",
150149
"function_signature_shim",
151150
"function_signature_with_source_map_shim",
151+
"AttrFlags::query_",
152152
"body_shim",
153153
"body_with_source_map_shim",
154154
"trait_environment_query",
@@ -197,13 +197,13 @@ fn baz() -> i32 {
197197
"body_with_source_map_shim",
198198
"body_shim",
199199
"AttrFlags::query_",
200-
"AttrFlags::query_",
201200
"function_signature_with_source_map_shim",
202201
"function_signature_shim",
203202
"body_with_source_map_shim",
204203
"body_shim",
205204
"InferenceResult::for_body_",
206205
"expr_scopes_shim",
206+
"AttrFlags::query_",
207207
"function_signature_with_source_map_shim",
208208
"function_signature_shim",
209209
"body_with_source_map_shim",
@@ -245,8 +245,6 @@ $0",
245245
"TraitImpls::for_crate_",
246246
"lang_items",
247247
"crate_lang_items",
248-
"AttrFlags::query_",
249-
"AttrFlags::query_",
250248
]
251249
"#]],
252250
);
@@ -284,9 +282,6 @@ pub struct NewStruct {
284282
"crate_local_def_map",
285283
"TraitImpls::for_crate_",
286284
"crate_lang_items",
287-
"AttrFlags::query_",
288-
"AttrFlags::query_",
289-
"AttrFlags::query_",
290285
]
291286
"#]],
292287
);
@@ -324,8 +319,6 @@ $0",
324319
"TraitImpls::for_crate_",
325320
"lang_items",
326321
"crate_lang_items",
327-
"AttrFlags::query_",
328-
"AttrFlags::query_",
329322
]
330323
"#]],
331324
);
@@ -364,12 +357,6 @@ pub enum SomeEnum {
364357
"crate_local_def_map",
365358
"TraitImpls::for_crate_",
366359
"crate_lang_items",
367-
"AttrFlags::query_",
368-
"AttrFlags::query_",
369-
"AttrFlags::query_",
370-
"EnumVariants::of_",
371-
"AttrFlags::query_",
372-
"AttrFlags::query_",
373360
]
374361
"#]],
375362
);
@@ -407,8 +394,6 @@ $0",
407394
"TraitImpls::for_crate_",
408395
"lang_items",
409396
"crate_lang_items",
410-
"AttrFlags::query_",
411-
"AttrFlags::query_",
412397
]
413398
"#]],
414399
);
@@ -444,8 +429,6 @@ fn bar() -> f32 {
444429
"crate_local_def_map",
445430
"TraitImpls::for_crate_",
446431
"crate_lang_items",
447-
"AttrFlags::query_",
448-
"AttrFlags::query_",
449432
]
450433
"#]],
451434
);
@@ -487,9 +470,6 @@ $0",
487470
"TraitImpls::for_crate_",
488471
"lang_items",
489472
"crate_lang_items",
490-
"AttrFlags::query_",
491-
"AttrFlags::query_",
492-
"AttrFlags::query_",
493473
]
494474
"#]],
495475
);
@@ -533,12 +513,6 @@ impl SomeStruct {
533513
"crate_local_def_map",
534514
"TraitImpls::for_crate_",
535515
"crate_lang_items",
536-
"AttrFlags::query_",
537-
"ImplItems::of_",
538-
"AttrFlags::query_",
539-
"AttrFlags::query_",
540-
"AttrFlags::query_",
541-
"AttrFlags::query_",
542516
]
543517
"#]],
544518
);
@@ -610,7 +584,6 @@ fn main() {
610584
"trait_environment_query",
611585
"lang_items",
612586
"crate_lang_items",
613-
"AttrFlags::query_",
614587
"GenericPredicates::query_with_diagnostics_",
615588
"GenericPredicates::query_with_diagnostics_",
616589
"ImplTraits::return_type_impl_traits_",
@@ -623,6 +596,7 @@ fn main() {
623596
"expr_scopes_shim",
624597
"struct_signature_shim",
625598
"struct_signature_with_source_map_shim",
599+
"AttrFlags::query_",
626600
"GenericPredicates::query_with_diagnostics_",
627601
"value_ty_query",
628602
"InherentImpls::for_crate_",
@@ -702,8 +676,6 @@ fn main() {
702676
"body_with_source_map_shim",
703677
"body_shim",
704678
"crate_lang_items",
705-
"AttrFlags::query_",
706-
"AttrFlags::query_",
707679
"GenericPredicates::query_with_diagnostics_",
708680
"GenericPredicates::query_with_diagnostics_",
709681
"ImplTraits::return_type_impl_traits_",
@@ -713,6 +685,7 @@ fn main() {
713685
"ImplTraits::return_type_impl_traits_",
714686
"expr_scopes_shim",
715687
"struct_signature_with_source_map_shim",
688+
"AttrFlags::query_",
716689
"GenericPredicates::query_with_diagnostics_",
717690
"InherentImpls::for_crate_",
718691
"callable_item_signature_query",

crates/hir-ty/src/tests/patterns.rs

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -794,6 +794,8 @@ fn slice_tail_pattern() {
794794
fn box_pattern() {
795795
check_infer(
796796
r#"
797+
#![feature(lang_items)]
798+
797799
pub struct Global;
798800
#[lang = "owned_box"]
799801
pub struct Box<T, A = Global>(T);
@@ -805,13 +807,13 @@ fn box_pattern() {
805807
}
806808
"#,
807809
expect![[r#"
808-
83..89 'params': Box<i32, Global>
809-
101..155 '{ ... } }': ()
810-
107..153 'match ... }': ()
811-
113..119 'params': Box<i32, Global>
812-
130..141 'box integer': Box<i32, Global>
813-
134..141 'integer': i32
814-
145..147 '{}': ()
810+
108..114 'params': Box<i32, Global>
811+
126..180 '{ ... } }': ()
812+
132..178 'match ... }': ()
813+
138..144 'params': Box<i32, Global>
814+
155..166 'box integer': Box<i32, Global>
815+
159..166 'integer': i32
816+
170..172 '{}': ()
815817
"#]],
816818
);
817819
check_infer(
@@ -831,7 +833,6 @@ fn box_pattern() {
831833
76..122 'match ... }': ()
832834
82..88 'params': Box<i32>
833835
99..110 'box integer': Box<i32>
834-
103..110 'integer': i32
835836
114..116 '{}': ()
836837
"#]],
837838
);
@@ -1142,6 +1143,7 @@ fn my_fn(#[cfg(feature = "feature")] u8: u8, u32: u32) {}
11421143
fn var_args() {
11431144
check_types(
11441145
r#"
1146+
#![feature(lang_items)]
11451147
#[lang = "va_list"]
11461148
pub struct VaListImpl<'f>;
11471149
fn my_fn(foo: ...) {}
@@ -1156,6 +1158,7 @@ fn my_fn2(bar: u32, foo: ...) {}
11561158
fn var_args_cond() {
11571159
check_types(
11581160
r#"
1161+
#![feature(lang_items)]
11591162
#[lang = "va_list"]
11601163
pub struct VaListImpl<'f>;
11611164
fn my_fn(bar: u32, #[cfg(FALSE)] foo: ..., #[cfg(not(FALSE))] foo: u32) {

crates/hir-ty/src/tests/regression.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2374,6 +2374,7 @@ fn rust_destruct_option_clone() {
23742374
check_types(
23752375
r#"
23762376
//- minicore: option, drop
2377+
#![feature(lang_items)]
23772378
fn test(o: &Option<i32>) {
23782379
o.my_clone();
23792380
//^^^^^^^^^^^^ Option<i32>

crates/hir-ty/src/tests/regression/new_solver.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,7 @@ fn main() {
234234
// toolchains <= 1.88.0, before sized-hierarchy.
235235
check_no_mismatches(
236236
r#"
237+
#![feature(lang_items)]
237238
#[lang = "sized"]
238239
pub trait Sized {}
239240

crates/hir-ty/src/tests/simple.rs

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2702,6 +2702,8 @@ fn box_into_vec() {
27022702
check_infer(
27032703
r#"
27042704
//- /core.rs crate:core
2705+
#![feature(lang_items)]
2706+
27052707
#[lang = "sized"]
27062708
pub trait Sized {}
27072709
@@ -2745,22 +2747,22 @@ struct Astruct;
27452747
impl B for Astruct {}
27462748
"#,
27472749
expect![[r#"
2748-
614..618 'self': Box<[T], A>
2749-
647..679 '{ ... }': Vec<T, A>
2750-
693..863 '{ ...])); }': ()
2751-
703..706 'vec': Vec<i32, Global>
2752-
709..724 '<[_]>::into_vec': fn into_vec<i32, Global>(Box<[i32], Global>) -> Vec<i32, Global>
2753-
709..755 '<[_]>:...i32]))': Vec<i32, Global>
2754-
725..754 '#[rust...1i32])': Box<[i32; 1], Global>
2755-
747..753 '[1i32]': [i32; 1]
2756-
748..752 '1i32': i32
2757-
765..766 'v': Vec<Box<dyn B + 'static, Global>, Global>
2758-
786..803 '<[_]> ...to_vec': fn into_vec<Box<dyn B + '?, Global>, Global>(Box<[Box<dyn B + '?, Global>], Global>) -> Vec<Box<dyn B + '?, Global>, Global>
2759-
786..860 '<[_]> ...ct)]))': Vec<Box<dyn B + '?, Global>, Global>
2760-
804..859 '#[rust...uct)])': Box<[Box<dyn B + '?, Global>; 1], Global>
2761-
826..858 '[#[rus...ruct)]': [Box<dyn B + '?, Global>; 1]
2762-
827..857 '#[rust...truct)': Box<Astruct, Global>
2763-
849..856 'Astruct': Astruct
2750+
639..643 'self': Box<[T], A>
2751+
672..704 '{ ... }': Vec<T, A>
2752+
718..888 '{ ...])); }': ()
2753+
728..731 'vec': Vec<i32, Global>
2754+
734..749 '<[_]>::into_vec': fn into_vec<i32, Global>(Box<[i32], Global>) -> Vec<i32, Global>
2755+
734..780 '<[_]>:...i32]))': Vec<i32, Global>
2756+
750..779 '#[rust...1i32])': Box<[i32; 1], Global>
2757+
772..778 '[1i32]': [i32; 1]
2758+
773..777 '1i32': i32
2759+
790..791 'v': Vec<Box<dyn B + 'static, Global>, Global>
2760+
811..828 '<[_]> ...to_vec': fn into_vec<Box<dyn B + '?, Global>, Global>(Box<[Box<dyn B + '?, Global>], Global>) -> Vec<Box<dyn B + '?, Global>, Global>
2761+
811..885 '<[_]> ...ct)]))': Vec<Box<dyn B + '?, Global>, Global>
2762+
829..884 '#[rust...uct)])': Box<[Box<dyn B + '?, Global>; 1], Global>
2763+
851..883 '[#[rus...ruct)]': [Box<dyn B + '?, Global>; 1]
2764+
852..882 '#[rust...truct)': Box<Astruct, Global>
2765+
874..881 'Astruct': Astruct
27642766
"#]],
27652767
)
27662768
}
@@ -3647,6 +3649,8 @@ fn main() {
36473649
fn cstring_literals() {
36483650
check_types(
36493651
r#"
3652+
#![feature(lang_items)]
3653+
36503654
#[lang = "CStr"]
36513655
pub struct CStr;
36523656

crates/ide-completion/src/tests/flyimport.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -781,9 +781,9 @@ fn main() {
781781
}
782782
"#,
783783
expect![[r#"
784-
me random_method(…) (use dep::test_mod::TestTrait) fn(&self) DEPRECATED
785784
ct SPECIAL_CONST (use dep::test_mod::TestTrait) u8 DEPRECATED
786785
fn weird_function() (use dep::test_mod::TestTrait) fn() DEPRECATED
786+
me random_method(…) (use dep::test_mod::TestTrait) fn(&self) DEPRECATED
787787
"#]],
788788
);
789789
}

crates/ide-diagnostics/src/handlers/trait_impl_incorrect_safety.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ unsafe trait Unsafe {}
6464
fn drop_may_dangle() {
6565
check_diagnostics(
6666
r#"
67+
#![feature(lang_items)]
6768
#[lang = "drop"]
6869
trait Drop {}
6970
struct S<T>;

crates/ide/src/hover/tests.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4089,6 +4089,7 @@ fn foo() {
40894089
let fo$0o = async { S };
40904090
}
40914091
//- /core.rs crate:core
4092+
#![feature(lang_items)]
40924093
pub mod future {
40934094
#[lang = "future_trait"]
40944095
pub trait Future {}

0 commit comments

Comments
 (0)