@@ -371,6 +371,7 @@ where
371
371
let mut feature = None ;
372
372
let mut reason = None ;
373
373
let mut issue = None ;
374
+ let mut issue_num = None ;
374
375
let mut is_soft = false ;
375
376
for meta in metas {
376
377
if let Some ( mi) = meta. meta_item ( ) {
@@ -389,6 +390,37 @@ where
389
390
if !get ( mi, & mut issue) {
390
391
continue ' outer;
391
392
}
393
+
394
+ // These unwraps are safe because `get` ensures the meta item
395
+ // is a name/value pair string literal.
396
+ issue_num = match & * issue. unwrap ( ) . as_str ( ) {
397
+ "none" => None ,
398
+ issue => {
399
+ match issue. parse ( ) {
400
+ Ok ( num) => {
401
+ // FIXME(rossmacarthur): disallow 0
402
+ // Disallowing this requires updates to
403
+ // some submodules
404
+ NonZeroU32 :: new ( num)
405
+ }
406
+ Err ( err) => {
407
+ struct_span_err ! (
408
+ diagnostic,
409
+ mi. span,
410
+ E0545 ,
411
+ "`issue` must be a numeric string \
412
+ or \" none\" ",
413
+ )
414
+ . span_label (
415
+ mi. name_value_literal ( ) . unwrap ( ) . span ,
416
+ & err. to_string ( ) ,
417
+ )
418
+ . emit ( ) ;
419
+ continue ' outer;
420
+ }
421
+ }
422
+ }
423
+ } ;
392
424
}
393
425
sym:: soft => {
394
426
if !mi. is_word ( ) {
@@ -420,27 +452,8 @@ where
420
452
}
421
453
422
454
match ( feature, reason, issue) {
423
- ( Some ( feature) , reason, Some ( issue) ) => {
424
- let issue = match & * issue. as_str ( ) {
425
- "none" => None ,
426
- issue => {
427
- if let Ok ( num) = issue. parse ( ) {
428
- // FIXME(rossmacarthur): disallow 0
429
- // Disallowing this requires updates to some submodules
430
- NonZeroU32 :: new ( num)
431
- } else {
432
- struct_span_err ! (
433
- diagnostic,
434
- attr. span,
435
- E0545 ,
436
- "incorrect 'issue'"
437
- )
438
- . emit ( ) ;
439
- continue ;
440
- }
441
- }
442
- } ;
443
- let level = Unstable { reason, issue, is_soft } ;
455
+ ( Some ( feature) , reason, Some ( _) ) => {
456
+ let level = Unstable { reason, issue : issue_num, is_soft } ;
444
457
if sym:: unstable == meta_name {
445
458
stab = Some ( Stability { level, feature, rustc_depr : None } ) ;
446
459
} else {
0 commit comments