From c0a079b89e328dfd7d9e8803b89ade5f4b3b7978 Mon Sep 17 00:00:00 2001 From: Vadim Petrochenkov Date: Sat, 3 Apr 2021 22:38:49 +0300 Subject: [PATCH] Stabilize `#[cfg_eval]` and `feature(macro_attributes_in_derive_output)` --- compiler/rustc_feature/src/accepted.rs | 2 + compiler/rustc_feature/src/active.rs | 3 - compiler/rustc_resolve/src/macros.rs | 30 ---------- library/core/src/macros/mod.rs | 6 +- library/core/src/prelude/v1.rs | 6 +- library/std/src/lib.rs | 1 - library/std/src/prelude/v1.rs | 6 +- .../attribute-after-derive-feature-gate.rs | 37 ------------ ...attribute-after-derive-feature-gate.stderr | 30 ---------- .../ui/proc-macro/attribute-after-derive.rs | 2 - .../proc-macro/attribute-after-derive.stdout | 58 +++++++++---------- src/test/ui/proc-macro/cfg-eval-fail.rs | 1 - src/test/ui/proc-macro/cfg-eval-fail.stderr | 6 +- src/test/ui/proc-macro/cfg-eval.rs | 1 - src/test/ui/proc-macro/cfg-eval.stdout | 52 ++++++++--------- 15 files changed, 63 insertions(+), 178 deletions(-) delete mode 100644 src/test/ui/proc-macro/attribute-after-derive-feature-gate.rs delete mode 100644 src/test/ui/proc-macro/attribute-after-derive-feature-gate.stderr diff --git a/compiler/rustc_feature/src/accepted.rs b/compiler/rustc_feature/src/accepted.rs index f006351647e40..51a46cfbe4b06 100644 --- a/compiler/rustc_feature/src/accepted.rs +++ b/compiler/rustc_feature/src/accepted.rs @@ -279,6 +279,8 @@ declare_features! ( (accepted, unsafe_block_in_unsafe_fn, "1.52.0", Some(71668), None), /// Allows the use of or-patterns (e.g., `0 | 1`). (accepted, or_patterns, "1.53.0", Some(54883), None), + /// Allows macro attributes to observe output of `#[derive]`. + (accepted, macro_attributes_in_derive_output, "1.53.0", Some(81119), None), // ------------------------------------------------------------------------- // feature-group-end: accepted features diff --git a/compiler/rustc_feature/src/active.rs b/compiler/rustc_feature/src/active.rs index 040260f5cf5a4..f7895a73c59b9 100644 --- a/compiler/rustc_feature/src/active.rs +++ b/compiler/rustc_feature/src/active.rs @@ -630,9 +630,6 @@ declare_features! ( /// Lessens the requirements for structs to implement `Unsize`. (active, relaxed_struct_unsize, "1.51.0", Some(81793), None), - /// Allows macro attributes to observe output of `#[derive]`. - (active, macro_attributes_in_derive_output, "1.51.0", Some(81119), None), - /// Allows `pub` on `macro_rules` items. (active, pub_macro_rules, "1.52.0", Some(78855), None), diff --git a/compiler/rustc_resolve/src/macros.rs b/compiler/rustc_resolve/src/macros.rs index d238f65c941af..6c053966a66a9 100644 --- a/compiler/rustc_resolve/src/macros.rs +++ b/compiler/rustc_resolve/src/macros.rs @@ -303,36 +303,6 @@ impl<'a> ResolverExpand for Resolver<'a> { if let Res::Def(_, _) = res { let normal_module_def_id = self.macro_def_scope(invoc_id).nearest_parent_mod; self.definitions.add_parent_module_of_macro_def(invoc_id, normal_module_def_id); - - // Gate macro attributes in `#[derive]` output. - if !self.session.features_untracked().macro_attributes_in_derive_output - && kind == MacroKind::Attr - && ext.builtin_name != Some(sym::derive) - { - let mut expn_id = parent_scope.expansion; - loop { - // Helper attr table is a quick way to determine whether the attr is `derive`. - if self.helper_attrs.contains_key(&expn_id) { - feature_err( - &self.session.parse_sess, - sym::macro_attributes_in_derive_output, - path.span, - "macro attributes in `#[derive]` output are unstable", - ) - .emit(); - break; - } else { - let expn_data = expn_id.expn_data(); - match expn_data.kind { - ExpnKind::Root - | ExpnKind::Macro(MacroKind::Bang | MacroKind::Derive, _) => { - break; - } - _ => expn_id = expn_data.parent, - } - } - } - } } Ok(ext) diff --git a/library/core/src/macros/mod.rs b/library/core/src/macros/mod.rs index 99894b5605e6d..54b930d847f60 100644 --- a/library/core/src/macros/mod.rs +++ b/library/core/src/macros/mod.rs @@ -1454,11 +1454,7 @@ pub(crate) mod builtin { /// Expands all `#[cfg]` and `#[cfg_attr]` attributes in the code fragment it's applied to. #[cfg(not(bootstrap))] - #[unstable( - feature = "cfg_eval", - issue = "82679", - reason = "`cfg_eval` is a recently implemented feature" - )] + #[stable(feature = "cfg_eval", since = "1.53.0")] #[rustc_builtin_macro] pub macro cfg_eval($($tt:tt)*) { /* compiler built-in */ diff --git a/library/core/src/prelude/v1.rs b/library/core/src/prelude/v1.rs index 7d33ca8bb698e..3e58f39c33c54 100644 --- a/library/core/src/prelude/v1.rs +++ b/library/core/src/prelude/v1.rs @@ -81,10 +81,6 @@ pub use crate::macros::builtin::derive; pub use crate::macros::builtin::cfg_accessible; #[cfg(not(bootstrap))] -#[unstable( - feature = "cfg_eval", - issue = "82679", - reason = "`cfg_eval` is a recently implemented feature" -)] +#[stable(feature = "cfg_eval", since = "1.53.0")] #[doc(no_inline)] pub use crate::macros::builtin::cfg_eval; diff --git a/library/std/src/lib.rs b/library/std/src/lib.rs index d5ba2d36346b5..ddd21aef7cefd 100644 --- a/library/std/src/lib.rs +++ b/library/std/src/lib.rs @@ -234,7 +234,6 @@ #![feature(box_syntax)] #![feature(c_variadic)] #![feature(cfg_accessible)] -#![cfg_attr(not(bootstrap), feature(cfg_eval))] #![feature(cfg_target_has_atomic)] #![feature(cfg_target_thread_local)] #![feature(char_error_internals)] diff --git a/library/std/src/prelude/v1.rs b/library/std/src/prelude/v1.rs index c5b871edbf25f..0502cfd9677dd 100644 --- a/library/std/src/prelude/v1.rs +++ b/library/std/src/prelude/v1.rs @@ -68,11 +68,7 @@ pub use core::prelude::v1::derive; pub use core::prelude::v1::cfg_accessible; #[cfg(not(bootstrap))] -#[unstable( - feature = "cfg_eval", - issue = "82679", - reason = "`cfg_eval` is a recently implemented feature" -)] +#[stable(feature = "cfg_eval", since = "1.53.0")] #[doc(hidden)] pub use core::prelude::v1::cfg_eval; diff --git a/src/test/ui/proc-macro/attribute-after-derive-feature-gate.rs b/src/test/ui/proc-macro/attribute-after-derive-feature-gate.rs deleted file mode 100644 index f0fec6782423e..0000000000000 --- a/src/test/ui/proc-macro/attribute-after-derive-feature-gate.rs +++ /dev/null @@ -1,37 +0,0 @@ -// gate-test-macro_attributes_in_derive_output -// aux-build: test-macros.rs - -#![feature(proc_macro_hygiene)] -#![feature(stmt_expr_attributes)] - -#[macro_use] -extern crate test_macros; - -#[derive(Empty)] -#[empty_attr] //~ ERROR macro attributes in `#[derive]` output are unstable -struct S1 { - field: [u8; 10], -} - -#[derive(Empty)] -#[empty_helper] -#[empty_attr] //~ ERROR macro attributes in `#[derive]` output are unstable -struct S2 { - field: [u8; 10], -} - -#[derive(Empty)] -struct S3 { - field: [u8; #[identity_attr] 10], //~ ERROR macro attributes in `#[derive]` output are unstable -} - -#[derive(Empty)] -struct S4 { - field: [u8; { - #[derive(Empty)] // OK, not gated - struct Inner; - 10 - }] -} - -fn main() {} diff --git a/src/test/ui/proc-macro/attribute-after-derive-feature-gate.stderr b/src/test/ui/proc-macro/attribute-after-derive-feature-gate.stderr deleted file mode 100644 index 74cace628b94c..0000000000000 --- a/src/test/ui/proc-macro/attribute-after-derive-feature-gate.stderr +++ /dev/null @@ -1,30 +0,0 @@ -error[E0658]: macro attributes in `#[derive]` output are unstable - --> $DIR/attribute-after-derive-feature-gate.rs:11:3 - | -LL | #[empty_attr] - | ^^^^^^^^^^ - | - = note: see issue #81119 for more information - = help: add `#![feature(macro_attributes_in_derive_output)]` to the crate attributes to enable - -error[E0658]: macro attributes in `#[derive]` output are unstable - --> $DIR/attribute-after-derive-feature-gate.rs:18:3 - | -LL | #[empty_attr] - | ^^^^^^^^^^ - | - = note: see issue #81119 for more information - = help: add `#![feature(macro_attributes_in_derive_output)]` to the crate attributes to enable - -error[E0658]: macro attributes in `#[derive]` output are unstable - --> $DIR/attribute-after-derive-feature-gate.rs:25:19 - | -LL | field: [u8; #[identity_attr] 10], - | ^^^^^^^^^^^^^ - | - = note: see issue #81119 for more information - = help: add `#![feature(macro_attributes_in_derive_output)]` to the crate attributes to enable - -error: aborting due to 3 previous errors - -For more information about this error, try `rustc --explain E0658`. diff --git a/src/test/ui/proc-macro/attribute-after-derive.rs b/src/test/ui/proc-macro/attribute-after-derive.rs index ac3f28b6ef3ea..0f0f27bff97be 100644 --- a/src/test/ui/proc-macro/attribute-after-derive.rs +++ b/src/test/ui/proc-macro/attribute-after-derive.rs @@ -5,8 +5,6 @@ // compile-flags: -Z span-debug // aux-build: test-macros.rs -#![feature(macro_attributes_in_derive_output)] - #![no_std] // Don't load unnecessary hygiene information from std extern crate std; diff --git a/src/test/ui/proc-macro/attribute-after-derive.stdout b/src/test/ui/proc-macro/attribute-after-derive.stdout index 11f492353271a..78c58c0a32fcf 100644 --- a/src/test/ui/proc-macro/attribute-after-derive.stdout +++ b/src/test/ui/proc-macro/attribute-after-derive.stdout @@ -3,35 +3,35 @@ PRINT-ATTR INPUT (DEBUG): TokenStream [ Punct { ch: '#', spacing: Alone, - span: $DIR/attribute-after-derive.rs:17:1: 17:2 (#0), + span: $DIR/attribute-after-derive.rs:15:1: 15:2 (#0), }, Group { delimiter: Bracket, stream: TokenStream [ Ident { ident: "derive", - span: $DIR/attribute-after-derive.rs:17:3: 17:9 (#0), + span: $DIR/attribute-after-derive.rs:15:3: 15:9 (#0), }, Group { delimiter: Parenthesis, stream: TokenStream [ Ident { ident: "Print", - span: $DIR/attribute-after-derive.rs:17:10: 17:15 (#0), + span: $DIR/attribute-after-derive.rs:15:10: 15:15 (#0), }, ], - span: $DIR/attribute-after-derive.rs:17:9: 17:16 (#0), + span: $DIR/attribute-after-derive.rs:15:9: 15:16 (#0), }, ], - span: $DIR/attribute-after-derive.rs:17:2: 17:17 (#0), + span: $DIR/attribute-after-derive.rs:15:2: 15:17 (#0), }, Ident { ident: "struct", - span: $DIR/attribute-after-derive.rs:18:1: 18:7 (#0), + span: $DIR/attribute-after-derive.rs:16:1: 16:7 (#0), }, Ident { ident: "AttributeDerive", - span: $DIR/attribute-after-derive.rs:18:8: 18:23 (#0), + span: $DIR/attribute-after-derive.rs:16:8: 16:23 (#0), }, Group { delimiter: Brace, @@ -39,80 +39,80 @@ PRINT-ATTR INPUT (DEBUG): TokenStream [ Punct { ch: '#', spacing: Alone, - span: $DIR/attribute-after-derive.rs:19:5: 19:6 (#0), + span: $DIR/attribute-after-derive.rs:17:5: 17:6 (#0), }, Group { delimiter: Bracket, stream: TokenStream [ Ident { ident: "cfg", - span: $DIR/attribute-after-derive.rs:19:7: 19:10 (#0), + span: $DIR/attribute-after-derive.rs:17:7: 17:10 (#0), }, Group { delimiter: Parenthesis, stream: TokenStream [ Ident { ident: "FALSE", - span: $DIR/attribute-after-derive.rs:19:11: 19:16 (#0), + span: $DIR/attribute-after-derive.rs:17:11: 17:16 (#0), }, ], - span: $DIR/attribute-after-derive.rs:19:10: 19:17 (#0), + span: $DIR/attribute-after-derive.rs:17:10: 17:17 (#0), }, ], - span: $DIR/attribute-after-derive.rs:19:6: 19:18 (#0), + span: $DIR/attribute-after-derive.rs:17:6: 17:18 (#0), }, Ident { ident: "field", - span: $DIR/attribute-after-derive.rs:20:5: 20:10 (#0), + span: $DIR/attribute-after-derive.rs:18:5: 18:10 (#0), }, Punct { ch: ':', spacing: Alone, - span: $DIR/attribute-after-derive.rs:20:10: 20:11 (#0), + span: $DIR/attribute-after-derive.rs:18:10: 18:11 (#0), }, Ident { ident: "u8", - span: $DIR/attribute-after-derive.rs:20:12: 20:14 (#0), + span: $DIR/attribute-after-derive.rs:18:12: 18:14 (#0), }, Punct { ch: ',', spacing: Alone, - span: $DIR/attribute-after-derive.rs:20:14: 20:15 (#0), + span: $DIR/attribute-after-derive.rs:18:14: 18:15 (#0), }, ], - span: $DIR/attribute-after-derive.rs:18:24: 21:2 (#0), + span: $DIR/attribute-after-derive.rs:16:24: 19:2 (#0), }, ] PRINT-DERIVE INPUT (DISPLAY): struct AttributeDerive { } PRINT-DERIVE INPUT (DEBUG): TokenStream [ Ident { ident: "struct", - span: $DIR/attribute-after-derive.rs:18:1: 21:2 (#0), + span: $DIR/attribute-after-derive.rs:16:1: 19:2 (#0), }, Ident { ident: "AttributeDerive", - span: $DIR/attribute-after-derive.rs:18:1: 21:2 (#0), + span: $DIR/attribute-after-derive.rs:16:1: 19:2 (#0), }, Group { delimiter: Brace, stream: TokenStream [], - span: $DIR/attribute-after-derive.rs:18:1: 21:2 (#0), + span: $DIR/attribute-after-derive.rs:16:1: 19:2 (#0), }, ] PRINT-ATTR INPUT (DISPLAY): struct DeriveAttribute { } PRINT-ATTR INPUT (DEBUG): TokenStream [ Ident { ident: "struct", - span: $DIR/attribute-after-derive.rs:25:1: 28:2 (#0), + span: $DIR/attribute-after-derive.rs:23:1: 26:2 (#0), }, Ident { ident: "DeriveAttribute", - span: $DIR/attribute-after-derive.rs:25:1: 28:2 (#0), + span: $DIR/attribute-after-derive.rs:23:1: 26:2 (#0), }, Group { delimiter: Brace, stream: TokenStream [], - span: $DIR/attribute-after-derive.rs:25:1: 28:2 (#0), + span: $DIR/attribute-after-derive.rs:23:1: 26:2 (#0), }, ] PRINT-DERIVE INPUT (DISPLAY): #[print_attr] struct DeriveAttribute { } @@ -120,29 +120,29 @@ PRINT-DERIVE INPUT (DEBUG): TokenStream [ Punct { ch: '#', spacing: Alone, - span: $DIR/attribute-after-derive.rs:25:1: 28:2 (#0), + span: $DIR/attribute-after-derive.rs:23:1: 26:2 (#0), }, Group { delimiter: Bracket, stream: TokenStream [ Ident { ident: "print_attr", - span: $DIR/attribute-after-derive.rs:25:1: 28:2 (#0), + span: $DIR/attribute-after-derive.rs:23:1: 26:2 (#0), }, ], - span: $DIR/attribute-after-derive.rs:25:1: 28:2 (#0), + span: $DIR/attribute-after-derive.rs:23:1: 26:2 (#0), }, Ident { ident: "struct", - span: $DIR/attribute-after-derive.rs:25:1: 28:2 (#0), + span: $DIR/attribute-after-derive.rs:23:1: 26:2 (#0), }, Ident { ident: "DeriveAttribute", - span: $DIR/attribute-after-derive.rs:25:1: 28:2 (#0), + span: $DIR/attribute-after-derive.rs:23:1: 26:2 (#0), }, Group { delimiter: Brace, stream: TokenStream [], - span: $DIR/attribute-after-derive.rs:25:1: 28:2 (#0), + span: $DIR/attribute-after-derive.rs:23:1: 26:2 (#0), }, ] diff --git a/src/test/ui/proc-macro/cfg-eval-fail.rs b/src/test/ui/proc-macro/cfg-eval-fail.rs index 379491f3126b0..9c496d7a813da 100644 --- a/src/test/ui/proc-macro/cfg-eval-fail.rs +++ b/src/test/ui/proc-macro/cfg-eval-fail.rs @@ -1,4 +1,3 @@ -#![feature(cfg_eval)] #![feature(stmt_expr_attributes)] fn main() { diff --git a/src/test/ui/proc-macro/cfg-eval-fail.stderr b/src/test/ui/proc-macro/cfg-eval-fail.stderr index 010ac006b0bee..155e431edc240 100644 --- a/src/test/ui/proc-macro/cfg-eval-fail.stderr +++ b/src/test/ui/proc-macro/cfg-eval-fail.stderr @@ -1,17 +1,17 @@ error: removing an expression is not supported in this position - --> $DIR/cfg-eval-fail.rs:5:25 + --> $DIR/cfg-eval-fail.rs:4:25 | LL | let _ = #[cfg_eval] #[cfg(FALSE)] 0; | ^^^^^^^^^^^^^ error: removing an expression is not supported in this position - --> $DIR/cfg-eval-fail.rs:5:25 + --> $DIR/cfg-eval-fail.rs:4:25 | LL | let _ = #[cfg_eval] #[cfg(FALSE)] 0; | ^^^^^^^^^^^^^ error: removing an expression is not supported in this position - --> $DIR/cfg-eval-fail.rs:5:25 + --> $DIR/cfg-eval-fail.rs:4:25 | LL | let _ = #[cfg_eval] #[cfg(FALSE)] 0; | ^^^^^^^^^^^^^ diff --git a/src/test/ui/proc-macro/cfg-eval.rs b/src/test/ui/proc-macro/cfg-eval.rs index ea397df545265..6d9f8dcc88fed 100644 --- a/src/test/ui/proc-macro/cfg-eval.rs +++ b/src/test/ui/proc-macro/cfg-eval.rs @@ -2,7 +2,6 @@ // compile-flags: -Z span-debug // aux-build:test-macros.rs -#![feature(cfg_eval)] #![feature(proc_macro_hygiene)] #![feature(stmt_expr_attributes)] diff --git a/src/test/ui/proc-macro/cfg-eval.stdout b/src/test/ui/proc-macro/cfg-eval.stdout index b98e8961bfea7..280229f3e2972 100644 --- a/src/test/ui/proc-macro/cfg-eval.stdout +++ b/src/test/ui/proc-macro/cfg-eval.stdout @@ -2,11 +2,11 @@ PRINT-ATTR INPUT (DISPLAY): struct S1 { #[cfg(all())] #[allow()] field_true : u8 PRINT-ATTR INPUT (DEBUG): TokenStream [ Ident { ident: "struct", - span: $DIR/cfg-eval.rs:17:1: 24:2 (#0), + span: $DIR/cfg-eval.rs:16:1: 23:2 (#0), }, Ident { ident: "S1", - span: $DIR/cfg-eval.rs:17:1: 24:2 (#0), + span: $DIR/cfg-eval.rs:16:1: 23:2 (#0), }, Group { delimiter: Brace, @@ -14,73 +14,73 @@ PRINT-ATTR INPUT (DEBUG): TokenStream [ Punct { ch: '#', spacing: Alone, - span: $DIR/cfg-eval.rs:17:1: 24:2 (#0), + span: $DIR/cfg-eval.rs:16:1: 23:2 (#0), }, Group { delimiter: Bracket, stream: TokenStream [ Ident { ident: "cfg", - span: $DIR/cfg-eval.rs:17:1: 24:2 (#0), + span: $DIR/cfg-eval.rs:16:1: 23:2 (#0), }, Group { delimiter: Parenthesis, stream: TokenStream [ Ident { ident: "all", - span: $DIR/cfg-eval.rs:17:1: 24:2 (#0), + span: $DIR/cfg-eval.rs:16:1: 23:2 (#0), }, Group { delimiter: Parenthesis, stream: TokenStream [], - span: $DIR/cfg-eval.rs:17:1: 24:2 (#0), + span: $DIR/cfg-eval.rs:16:1: 23:2 (#0), }, ], - span: $DIR/cfg-eval.rs:17:1: 24:2 (#0), + span: $DIR/cfg-eval.rs:16:1: 23:2 (#0), }, ], - span: $DIR/cfg-eval.rs:17:1: 24:2 (#0), + span: $DIR/cfg-eval.rs:16:1: 23:2 (#0), }, Punct { ch: '#', spacing: Alone, - span: $DIR/cfg-eval.rs:17:1: 24:2 (#0), + span: $DIR/cfg-eval.rs:16:1: 23:2 (#0), }, Group { delimiter: Bracket, stream: TokenStream [ Ident { ident: "allow", - span: $DIR/cfg-eval.rs:17:1: 24:2 (#0), + span: $DIR/cfg-eval.rs:16:1: 23:2 (#0), }, Group { delimiter: Parenthesis, stream: TokenStream [], - span: $DIR/cfg-eval.rs:17:1: 24:2 (#0), + span: $DIR/cfg-eval.rs:16:1: 23:2 (#0), }, ], - span: $DIR/cfg-eval.rs:17:1: 24:2 (#0), + span: $DIR/cfg-eval.rs:16:1: 23:2 (#0), }, Ident { ident: "field_true", - span: $DIR/cfg-eval.rs:17:1: 24:2 (#0), + span: $DIR/cfg-eval.rs:16:1: 23:2 (#0), }, Punct { ch: ':', spacing: Alone, - span: $DIR/cfg-eval.rs:17:1: 24:2 (#0), + span: $DIR/cfg-eval.rs:16:1: 23:2 (#0), }, Ident { ident: "u8", - span: $DIR/cfg-eval.rs:17:1: 24:2 (#0), + span: $DIR/cfg-eval.rs:16:1: 23:2 (#0), }, Punct { ch: ',', spacing: Alone, - span: $DIR/cfg-eval.rs:17:1: 24:2 (#0), + span: $DIR/cfg-eval.rs:16:1: 23:2 (#0), }, ], - span: $DIR/cfg-eval.rs:17:1: 24:2 (#0), + span: $DIR/cfg-eval.rs:16:1: 23:2 (#0), }, ] PRINT-ATTR INPUT (DISPLAY): (#[cfg(all())] 1,) @@ -91,45 +91,45 @@ PRINT-ATTR INPUT (DEBUG): TokenStream [ Punct { ch: '#', spacing: Alone, - span: $DIR/cfg-eval.rs:31:38: 31:80 (#0), + span: $DIR/cfg-eval.rs:30:38: 30:80 (#0), }, Group { delimiter: Bracket, stream: TokenStream [ Ident { ident: "cfg", - span: $DIR/cfg-eval.rs:31:38: 31:80 (#0), + span: $DIR/cfg-eval.rs:30:38: 30:80 (#0), }, Group { delimiter: Parenthesis, stream: TokenStream [ Ident { ident: "all", - span: $DIR/cfg-eval.rs:31:38: 31:80 (#0), + span: $DIR/cfg-eval.rs:30:38: 30:80 (#0), }, Group { delimiter: Parenthesis, stream: TokenStream [], - span: $DIR/cfg-eval.rs:31:38: 31:80 (#0), + span: $DIR/cfg-eval.rs:30:38: 30:80 (#0), }, ], - span: $DIR/cfg-eval.rs:31:38: 31:80 (#0), + span: $DIR/cfg-eval.rs:30:38: 30:80 (#0), }, ], - span: $DIR/cfg-eval.rs:31:38: 31:80 (#0), + span: $DIR/cfg-eval.rs:30:38: 30:80 (#0), }, Literal { kind: Integer, symbol: "1", suffix: None, - span: $DIR/cfg-eval.rs:31:38: 31:80 (#0), + span: $DIR/cfg-eval.rs:30:38: 30:80 (#0), }, Punct { ch: ',', spacing: Alone, - span: $DIR/cfg-eval.rs:31:38: 31:80 (#0), + span: $DIR/cfg-eval.rs:30:38: 30:80 (#0), }, ], - span: $DIR/cfg-eval.rs:31:38: 31:80 (#0), + span: $DIR/cfg-eval.rs:30:38: 30:80 (#0), }, ]