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