@@ -65,37 +65,49 @@ pub(crate) fn try_inline(
65
65
let kind = match res {
66
66
Res :: Def ( DefKind :: Trait , did) => {
67
67
record_extern_fqn ( cx, did, ItemType :: Trait ) ;
68
- build_impls ( cx, did, attrs_without_docs, & mut ret) ;
69
- clean:: TraitItem ( Box :: new ( build_external_trait ( cx, did) ) )
68
+ cx. with_param_env ( did, |cx| {
69
+ build_impls ( cx, did, attrs_without_docs, & mut ret) ;
70
+ clean:: TraitItem ( Box :: new ( build_external_trait ( cx, did) ) )
71
+ } )
70
72
}
71
73
Res :: Def ( DefKind :: Fn , did) => {
72
74
record_extern_fqn ( cx, did, ItemType :: Function ) ;
73
- clean:: FunctionItem ( build_external_function ( cx, did) )
75
+ cx . with_param_env ( did , |cx| clean:: FunctionItem ( build_external_function ( cx, did) ) )
74
76
}
75
77
Res :: Def ( DefKind :: Struct , did) => {
76
78
record_extern_fqn ( cx, did, ItemType :: Struct ) ;
77
- build_impls ( cx, did, attrs_without_docs, & mut ret) ;
78
- clean:: StructItem ( build_struct ( cx, did) )
79
+ cx. with_param_env ( did, |cx| {
80
+ build_impls ( cx, did, attrs_without_docs, & mut ret) ;
81
+ clean:: StructItem ( build_struct ( cx, did) )
82
+ } )
79
83
}
80
84
Res :: Def ( DefKind :: Union , did) => {
81
85
record_extern_fqn ( cx, did, ItemType :: Union ) ;
82
- build_impls ( cx, did, attrs_without_docs, & mut ret) ;
83
- clean:: UnionItem ( build_union ( cx, did) )
86
+ cx. with_param_env ( did, |cx| {
87
+ build_impls ( cx, did, attrs_without_docs, & mut ret) ;
88
+ clean:: UnionItem ( build_union ( cx, did) )
89
+ } )
84
90
}
85
91
Res :: Def ( DefKind :: TyAlias , did) => {
86
92
record_extern_fqn ( cx, did, ItemType :: TypeAlias ) ;
87
- build_impls ( cx, did, attrs_without_docs, & mut ret) ;
88
- clean:: TypeAliasItem ( build_type_alias ( cx, did, & mut ret) )
93
+ cx. with_param_env ( did, |cx| {
94
+ build_impls ( cx, did, attrs_without_docs, & mut ret) ;
95
+ clean:: TypeAliasItem ( build_type_alias ( cx, did, & mut ret) )
96
+ } )
89
97
}
90
98
Res :: Def ( DefKind :: Enum , did) => {
91
99
record_extern_fqn ( cx, did, ItemType :: Enum ) ;
92
- build_impls ( cx, did, attrs_without_docs, & mut ret) ;
93
- clean:: EnumItem ( build_enum ( cx, did) )
100
+ cx. with_param_env ( did, |cx| {
101
+ build_impls ( cx, did, attrs_without_docs, & mut ret) ;
102
+ clean:: EnumItem ( build_enum ( cx, did) )
103
+ } )
94
104
}
95
105
Res :: Def ( DefKind :: ForeignTy , did) => {
96
106
record_extern_fqn ( cx, did, ItemType :: ForeignType ) ;
97
- build_impls ( cx, did, attrs_without_docs, & mut ret) ;
98
- clean:: ForeignTypeItem
107
+ cx. with_param_env ( did, |cx| {
108
+ build_impls ( cx, did, attrs_without_docs, & mut ret) ;
109
+ clean:: ForeignTypeItem
110
+ } )
99
111
}
100
112
// Never inline enum variants but leave them shown as re-exports.
101
113
Res :: Def ( DefKind :: Variant , _) => return None ,
@@ -108,11 +120,13 @@ pub(crate) fn try_inline(
108
120
}
109
121
Res :: Def ( DefKind :: Static ( _) , did) => {
110
122
record_extern_fqn ( cx, did, ItemType :: Static ) ;
111
- clean:: StaticItem ( build_static ( cx, did, cx. tcx . is_mutable_static ( did) ) )
123
+ cx. with_param_env ( did, |cx| {
124
+ clean:: StaticItem ( build_static ( cx, did, cx. tcx . is_mutable_static ( did) ) )
125
+ } )
112
126
}
113
127
Res :: Def ( DefKind :: Const , did) => {
114
128
record_extern_fqn ( cx, did, ItemType :: Constant ) ;
115
- clean:: ConstantItem ( build_const ( cx, did) )
129
+ cx . with_param_env ( did , |cx| clean:: ConstantItem ( build_const ( cx, did) ) )
116
130
}
117
131
Res :: Def ( DefKind :: Macro ( kind) , did) => {
118
132
let mac = build_macro ( cx, did, name, import_def_id, kind) ;
@@ -334,7 +348,9 @@ pub(crate) fn build_impls(
334
348
335
349
// for each implementation of an item represented by `did`, build the clean::Item for that impl
336
350
for & did in tcx. inherent_impls ( did) . into_iter ( ) . flatten ( ) {
337
- build_impl ( cx, did, attrs, ret) ;
351
+ cx. with_param_env ( did, |cx| {
352
+ build_impl ( cx, did, attrs, ret) ;
353
+ } ) ;
338
354
}
339
355
340
356
// This pretty much exists expressly for `dyn Error` traits that exist in the `alloc` crate.
@@ -347,7 +363,9 @@ pub(crate) fn build_impls(
347
363
let type_ =
348
364
if tcx. is_trait ( did) { SimplifiedType :: Trait ( did) } else { SimplifiedType :: Adt ( did) } ;
349
365
for & did in tcx. incoherent_impls ( type_) . into_iter ( ) . flatten ( ) {
350
- build_impl ( cx, did, attrs, ret) ;
366
+ cx. with_param_env ( did, |cx| {
367
+ build_impl ( cx, did, attrs, ret) ;
368
+ } ) ;
351
369
}
352
370
}
353
371
}
@@ -549,7 +567,9 @@ pub(crate) fn build_impl(
549
567
}
550
568
551
569
if let Some ( did) = trait_. as_ref ( ) . map ( |t| t. def_id ( ) ) {
552
- record_extern_trait ( cx, did) ;
570
+ cx. with_param_env ( did, |cx| {
571
+ record_extern_trait ( cx, did) ;
572
+ } ) ;
553
573
}
554
574
555
575
let ( merged_attrs, cfg) = merge_attrs ( cx, load_attrs ( cx, did) , attrs) ;
0 commit comments