@@ -207,6 +207,9 @@ impl<'tcx> CheckAttrVisitor<'tcx> {
207
207
Attribute :: Parsed ( AttributeKind :: ConstContinue ( attr_span) ) => {
208
208
self . check_const_continue ( hir_id, * attr_span, target)
209
209
}
210
+ Attribute :: Parsed ( AttributeKind :: AllowInternalUnsafe ( attr_span) ) => {
211
+ self . check_allow_internal_unsafe ( hir_id, * attr_span, span, target, attrs)
212
+ }
210
213
Attribute :: Parsed ( AttributeKind :: AllowInternalUnstable ( _, first_span) ) => {
211
214
self . check_allow_internal_unstable ( hir_id, * first_span, span, target, attrs)
212
215
}
@@ -413,7 +416,6 @@ impl<'tcx> CheckAttrVisitor<'tcx> {
413
416
// internal
414
417
| sym:: prelude_import
415
418
| sym:: panic_handler
416
- | sym:: allow_internal_unsafe
417
419
| sym:: lang
418
420
| sym:: needs_allocator
419
421
| sym:: default_lib_allocator
@@ -2211,14 +2213,49 @@ impl<'tcx> CheckAttrVisitor<'tcx> {
2211
2213
2212
2214
/// Outputs an error for `#[allow_internal_unstable]` which can only be applied to macros.
2213
2215
/// (Allows proc_macro functions)
2214
- // FIXME(jdonszelmann): if possible, move to attr parsing
2215
2216
fn check_allow_internal_unstable (
2216
2217
& self ,
2217
2218
hir_id : HirId ,
2218
2219
attr_span : Span ,
2219
2220
span : Span ,
2220
2221
target : Target ,
2221
2222
attrs : & [ Attribute ] ,
2223
+ ) {
2224
+ self . check_macro_only_attr (
2225
+ hir_id,
2226
+ attr_span,
2227
+ span,
2228
+ target,
2229
+ attrs,
2230
+ "allow_internal_unstable" ,
2231
+ )
2232
+ }
2233
+
2234
+ /// Outputs an error for `#[allow_internal_unsafe]` which can only be applied to macros.
2235
+ /// (Allows proc_macro functions)
2236
+ fn check_allow_internal_unsafe (
2237
+ & self ,
2238
+ hir_id : HirId ,
2239
+ attr_span : Span ,
2240
+ span : Span ,
2241
+ target : Target ,
2242
+ attrs : & [ Attribute ] ,
2243
+ ) {
2244
+ self . check_macro_only_attr ( hir_id, attr_span, span, target, attrs, "allow_internal_unsafe" )
2245
+ }
2246
+
2247
+ /// Outputs an error for attributes that can only be applied to macros, such as
2248
+ /// `#[allow_internal_unsafe]` and `#[allow_internal_unstable]`.
2249
+ /// (Allows proc_macro functions)
2250
+ // FIXME(jdonszelmann): if possible, move to attr parsing
2251
+ fn check_macro_only_attr (
2252
+ & self ,
2253
+ hir_id : HirId ,
2254
+ attr_span : Span ,
2255
+ span : Span ,
2256
+ target : Target ,
2257
+ attrs : & [ Attribute ] ,
2258
+ attr_name : & str ,
2222
2259
) {
2223
2260
match target {
2224
2261
Target :: Fn => {
@@ -2237,18 +2274,14 @@ impl<'tcx> CheckAttrVisitor<'tcx> {
2237
2274
// erroneously allowed it and some crates used it accidentally, to be compatible
2238
2275
// with crates depending on them, we can't throw an error here.
2239
2276
Target :: Field | Target :: Arm => {
2240
- self . inline_attr_str_error_without_macro_def (
2241
- hir_id,
2242
- attr_span,
2243
- "allow_internal_unstable" ,
2244
- ) ;
2277
+ self . inline_attr_str_error_without_macro_def ( hir_id, attr_span, attr_name) ;
2245
2278
return ;
2246
2279
}
2247
2280
// otherwise continue out of the match
2248
2281
_ => { }
2249
2282
}
2250
2283
2251
- self . tcx . dcx ( ) . emit_err ( errors:: AllowInternalUnstable { attr_span, span } ) ;
2284
+ self . tcx . dcx ( ) . emit_err ( errors:: MacroOnlyAttribute { attr_span, span } ) ;
2252
2285
}
2253
2286
2254
2287
/// Checks if the items on the `#[debugger_visualizer]` attribute are valid.
0 commit comments