@@ -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) ;
@@ -313,7 +327,9 @@ pub(crate) fn build_impls(
313
327
314
328
// for each implementation of an item represented by `did`, build the clean::Item for that impl
315
329
for & did in tcx. inherent_impls ( did) . into_iter ( ) . flatten ( ) {
316
- build_impl ( cx, did, attrs, ret) ;
330
+ cx. with_param_env ( did, |cx| {
331
+ build_impl ( cx, did, attrs, ret) ;
332
+ } ) ;
317
333
}
318
334
319
335
// This pretty much exists expressly for `dyn Error` traits that exist in the `alloc` crate.
@@ -326,7 +342,9 @@ pub(crate) fn build_impls(
326
342
let type_ =
327
343
if tcx. is_trait ( did) { SimplifiedType :: Trait ( did) } else { SimplifiedType :: Adt ( did) } ;
328
344
for & did in tcx. incoherent_impls ( type_) . into_iter ( ) . flatten ( ) {
329
- build_impl ( cx, did, attrs, ret) ;
345
+ cx. with_param_env ( did, |cx| {
346
+ build_impl ( cx, did, attrs, ret) ;
347
+ } ) ;
330
348
}
331
349
}
332
350
}
@@ -528,7 +546,9 @@ pub(crate) fn build_impl(
528
546
}
529
547
530
548
if let Some ( did) = trait_. as_ref ( ) . map ( |t| t. def_id ( ) ) {
531
- record_extern_trait ( cx, did) ;
549
+ cx. with_param_env ( did, |cx| {
550
+ record_extern_trait ( cx, did) ;
551
+ } ) ;
532
552
}
533
553
534
554
let ( merged_attrs, cfg) = merge_attrs ( cx, load_attrs ( cx, did) , attrs) ;
0 commit comments