Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 5364784

Browse files
committedMay 5, 2023
Improve check-cfg diagnostics (part 2)
1 parent a5f8dba commit 5364784

File tree

12 files changed

+192
-47
lines changed

12 files changed

+192
-47
lines changed
 

‎compiler/rustc_attr/src/builtin.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -589,7 +589,7 @@ pub fn cfg_matches(
589589
cfg.span,
590590
lint_node_id,
591591
"unexpected `cfg` condition value",
592-
BuiltinLintDiagnostics::UnexpectedCfg(
592+
BuiltinLintDiagnostics::UnexpectedCfgValue(
593593
(cfg.name, cfg.name_span),
594594
cfg.value.map(|v| (v, cfg.value_span.unwrap())),
595595
),
@@ -601,7 +601,10 @@ pub fn cfg_matches(
601601
cfg.span,
602602
lint_node_id,
603603
"unexpected `cfg` condition name",
604-
BuiltinLintDiagnostics::UnexpectedCfg((cfg.name, cfg.name_span), None),
604+
BuiltinLintDiagnostics::UnexpectedCfgName(
605+
(cfg.name, cfg.name_span),
606+
cfg.value.map(|v| (v, cfg.value_span.unwrap())),
607+
),
605608
);
606609
}
607610
_ => { /* not unexpected */ }

‎compiler/rustc_lint/src/context.rs

Lines changed: 45 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ use rustc_middle::middle::stability;
3636
use rustc_middle::ty::layout::{LayoutError, LayoutOfHelpers, TyAndLayout};
3737
use rustc_middle::ty::print::with_no_trimmed_paths;
3838
use rustc_middle::ty::{self, print::Printer, subst::GenericArg, RegisteredTools, Ty, TyCtxt};
39+
use rustc_session::config::ExpectedValues;
3940
use rustc_session::lint::{BuiltinLintDiagnostics, LintExpectationId};
4041
use rustc_session::lint::{FutureIncompatibleInfo, Level, Lint, LintBuffer, LintId};
4142
use rustc_session::Session;
@@ -768,23 +769,51 @@ pub trait LintContext: Sized {
768769
db.help(help);
769770
db.note("see the asm section of Rust By Example <https://doc.rust-lang.org/nightly/rust-by-example/unsafe/asm.html#labels> for more information");
770771
},
771-
BuiltinLintDiagnostics::UnexpectedCfg((name, name_span), None) => {
772+
BuiltinLintDiagnostics::UnexpectedCfgName((name, name_span), value) => {
772773
let possibilities: Vec<Symbol> = sess.parse_sess.check_config.expecteds.keys().map(|s| *s).collect();
773774

774775
// Suggest the most probable if we found one
775776
if let Some(best_match) = find_best_match_for_name(&possibilities, name, None) {
776-
db.span_suggestion(name_span, "there is an config with a similar name", best_match, Applicability::MaybeIncorrect);
777+
if let Some(ExpectedValues::Some(best_match_values)) =
778+
sess.parse_sess.check_config.expecteds.get(&best_match) {
779+
let mut possibilities = best_match_values.iter()
780+
.flatten()
781+
.map(Symbol::as_str)
782+
.collect::<Vec<_>>();
783+
possibilities.sort();
784+
785+
if let Some((value, value_span)) = value {
786+
if best_match_values.contains(&Some(value)) {
787+
db.span_suggestion(name_span, "there is a config with a similar name and value", best_match, Applicability::MaybeIncorrect);
788+
} else if best_match_values.contains(&None) {
789+
db.span_suggestion(name_span.to(value_span), "there is a config with a similar name and no value", best_match, Applicability::MaybeIncorrect);
790+
} else if let Some(first_value) = possibilities.first() {
791+
db.span_suggestion(name_span.to(value_span), "there is a config with a similar name and different values", format!("{best_match} = \"{first_value}\""), Applicability::MaybeIncorrect);
792+
} else {
793+
db.span_suggestion(name_span.to(value_span), "there is a config with a similar name and different values", best_match, Applicability::MaybeIncorrect);
794+
};
795+
} else {
796+
db.span_suggestion(name_span, "there is a config with a similar name", best_match, Applicability::MaybeIncorrect);
797+
}
798+
799+
if !possibilities.is_empty() {
800+
let possibilities = possibilities.join("`, `");
801+
db.help(format!("expected values for `{best_match}` are: `{possibilities}`"));
802+
}
803+
} else {
804+
db.span_suggestion(name_span, "there is a config with a similar name", best_match, Applicability::MaybeIncorrect);
805+
}
777806
}
778807
},
779-
BuiltinLintDiagnostics::UnexpectedCfg((name, name_span), Some((value, value_span))) => {
780-
let Some(rustc_session::config::ExpectedValues::Some(values)) = &sess.parse_sess.check_config.expecteds.get(&name) else {
808+
BuiltinLintDiagnostics::UnexpectedCfgValue((name, name_span), value) => {
809+
let Some(ExpectedValues::Some(values)) = &sess.parse_sess.check_config.expecteds.get(&name) else {
781810
bug!("it shouldn't be possible to have a diagnostic on a value whose name is not in values");
782811
};
783812
let mut have_none_possibility = false;
784813
let possibilities: Vec<Symbol> = values.iter()
785814
.inspect(|a| have_none_possibility |= a.is_none())
786815
.copied()
787-
.filter_map(std::convert::identity)
816+
.flatten()
788817
.collect();
789818

790819
// Show the full list if all possible values for a given name, but don't do it
@@ -800,13 +829,20 @@ pub trait LintContext: Sized {
800829
db.note(format!("expected values for `{name}` are: {none}`{possibilities}`"));
801830
}
802831

803-
// Suggest the most probable if we found one
804-
if let Some(best_match) = find_best_match_for_name(&possibilities, value, None) {
805-
db.span_suggestion(value_span, "there is an expected value with a similar name", format!("\"{best_match}\""), Applicability::MaybeIncorrect);
832+
if let Some((value, value_span)) = value {
833+
// Suggest the most probable if we found one
834+
if let Some(best_match) = find_best_match_for_name(&possibilities, value, None) {
835+
db.span_suggestion(value_span, "there is a expected value with a similar name", format!("\"{best_match}\""), Applicability::MaybeIncorrect);
836+
837+
}
838+
} else if let &[first_possibility] = &possibilities[..] {
839+
db.span_suggestion(name_span.shrink_to_hi(), "specify a config value", format!(" = \"{first_possibility}\""), Applicability::MaybeIncorrect);
806840
}
807841
} else if have_none_possibility {
808842
db.note(format!("no expected value for `{name}`"));
809-
db.span_suggestion(name_span.shrink_to_hi().to(value_span), "remove the value", "", Applicability::MaybeIncorrect);
843+
if let Some((_value, value_span)) = value {
844+
db.span_suggestion(name_span.shrink_to_hi().to(value_span), "remove the value", "", Applicability::MaybeIncorrect);
845+
}
810846
}
811847
},
812848
BuiltinLintDiagnostics::DeprecatedWhereclauseLocation(new_span, suggestion) => {

‎compiler/rustc_lint_defs/src/lib.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -496,7 +496,8 @@ pub enum BuiltinLintDiagnostics {
496496
BreakWithLabelAndLoop(Span),
497497
NamedAsmLabel(String),
498498
UnicodeTextFlow(Span, String),
499-
UnexpectedCfg((Symbol, Span), Option<(Symbol, Span)>),
499+
UnexpectedCfgName((Symbol, Span), Option<(Symbol, Span)>),
500+
UnexpectedCfgValue((Symbol, Span), Option<(Symbol, Span)>),
500501
DeprecatedWhereclauseLocation(Span, String),
501502
SingleUseLifetime {
502503
/// Span of the parameter which declares this lifetime.

‎tests/ui/check-cfg/diagnotics.rs

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
// check-pass
2+
// compile-flags: --check-cfg=names() --check-cfg=values(feature,"foo") --check-cfg=values(no_values) -Z unstable-options
3+
4+
#[cfg(featur)]
5+
//~^ WARNING unexpected `cfg` condition name
6+
fn feature() {}
7+
8+
#[cfg(featur = "foo")]
9+
//~^ WARNING unexpected `cfg` condition name
10+
fn feature() {}
11+
12+
#[cfg(featur = "fo")]
13+
//~^ WARNING unexpected `cfg` condition name
14+
fn feature() {}
15+
16+
#[cfg(feature = "foo")]
17+
fn feature() {}
18+
19+
#[cfg(no_value)]
20+
//~^ WARNING unexpected `cfg` condition name
21+
fn no_values() {}
22+
23+
#[cfg(no_value = "foo")]
24+
//~^ WARNING unexpected `cfg` condition name
25+
fn no_values() {}
26+
27+
#[cfg(no_values = "bar")]
28+
//~^ WARNING unexpected `cfg` condition value
29+
fn no_values() {}
30+
31+
fn main() {}

‎tests/ui/check-cfg/diagnotics.stderr

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
warning: unexpected `cfg` condition name
2+
--> $DIR/diagnotics.rs:4:7
3+
|
4+
LL | #[cfg(featur)]
5+
| ^^^^^^ help: there is a config with a similar name: `feature`
6+
|
7+
= help: expected values for `feature` are: `foo`
8+
= note: `#[warn(unexpected_cfgs)]` on by default
9+
10+
warning: unexpected `cfg` condition name
11+
--> $DIR/diagnotics.rs:8:7
12+
|
13+
LL | #[cfg(featur = "foo")]
14+
| ^^^^^^^^^^^^^^
15+
|
16+
= help: expected values for `feature` are: `foo`
17+
help: there is a config with a similar name and value
18+
|
19+
LL | #[cfg(feature = "foo")]
20+
| ~~~~~~~
21+
22+
warning: unexpected `cfg` condition name
23+
--> $DIR/diagnotics.rs:12:7
24+
|
25+
LL | #[cfg(featur = "fo")]
26+
| ^^^^^^^^^^^^^
27+
|
28+
= help: expected values for `feature` are: `foo`
29+
help: there is a config with a similar name and different values
30+
|
31+
LL | #[cfg(feature = "foo")]
32+
| ~~~~~~~~~~~~~~~
33+
34+
warning: unexpected `cfg` condition name
35+
--> $DIR/diagnotics.rs:19:7
36+
|
37+
LL | #[cfg(no_value)]
38+
| ^^^^^^^^ help: there is a config with a similar name: `no_values`
39+
40+
warning: unexpected `cfg` condition name
41+
--> $DIR/diagnotics.rs:23:7
42+
|
43+
LL | #[cfg(no_value = "foo")]
44+
| ^^^^^^^^^^^^^^^^
45+
|
46+
help: there is a config with a similar name and no value
47+
|
48+
LL | #[cfg(no_values)]
49+
| ~~~~~~~~~
50+
51+
warning: unexpected `cfg` condition value
52+
--> $DIR/diagnotics.rs:27:7
53+
|
54+
LL | #[cfg(no_values = "bar")]
55+
| ^^^^^^^^^--------
56+
| |
57+
| help: remove the value
58+
|
59+
= note: no expected value for `no_values`
60+
61+
warning: 6 warnings emitted
62+

‎tests/ui/check-cfg/invalid-cfg-name.stderr

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ warning: unexpected `cfg` condition name
22
--> $DIR/invalid-cfg-name.rs:7:7
33
|
44
LL | #[cfg(widnows)]
5-
| ^^^^^^^ help: there is an config with a similar name: `windows`
5+
| ^^^^^^^ help: there is a config with a similar name: `windows`
66
|
77
= note: `#[warn(unexpected_cfgs)]` on by default
88

‎tests/ui/check-cfg/invalid-cfg-value.stderr

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ warning: unexpected `cfg` condition value
44
LL | #[cfg(feature = "sedre")]
55
| ^^^^^^^^^^-------
66
| |
7-
| help: there is an expected value with a similar name: `"serde"`
7+
| help: there is a expected value with a similar name: `"serde"`
88
|
99
= note: expected values for `feature` are: `full`, `serde`
1010
= note: `#[warn(unexpected_cfgs)]` on by default

‎tests/ui/check-cfg/mix.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@ fn do_windows_stuff() {}
1212
//~^ WARNING unexpected `cfg` condition name
1313
fn do_windows_stuff() {}
1414

15+
#[cfg(feature)]
16+
//~^ WARNING unexpected `cfg` condition value
17+
fn no_feature() {}
18+
1519
#[cfg(feature = "foo")]
1620
fn use_foo() {}
1721

‎tests/ui/check-cfg/mix.stderr

Lines changed: 35 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -2,28 +2,36 @@ warning: unexpected `cfg` condition name
22
--> $DIR/mix.rs:11:7
33
|
44
LL | #[cfg(widnows)]
5-
| ^^^^^^^ help: there is an config with a similar name: `windows`
5+
| ^^^^^^^ help: there is a config with a similar name: `windows`
66
|
77
= note: `#[warn(unexpected_cfgs)]` on by default
88

99
warning: unexpected `cfg` condition value
10-
--> $DIR/mix.rs:18:7
10+
--> $DIR/mix.rs:15:7
11+
|
12+
LL | #[cfg(feature)]
13+
| ^^^^^^^- help: specify a config value: `= "foo"`
14+
|
15+
= note: expected values for `feature` are: `foo`
16+
17+
warning: unexpected `cfg` condition value
18+
--> $DIR/mix.rs:22:7
1119
|
1220
LL | #[cfg(feature = "bar")]
1321
| ^^^^^^^^^^^^^^^
1422
|
1523
= note: expected values for `feature` are: `foo`
1624

1725
warning: unexpected `cfg` condition value
18-
--> $DIR/mix.rs:22:7
26+
--> $DIR/mix.rs:26:7
1927
|
2028
LL | #[cfg(feature = "zebra")]
2129
| ^^^^^^^^^^^^^^^^^
2230
|
2331
= note: expected values for `feature` are: `foo`
2432

2533
warning: unexpected `cfg` condition name
26-
--> $DIR/mix.rs:26:12
34+
--> $DIR/mix.rs:30:12
2735
|
2836
LL | #[cfg_attr(uu, test)]
2937
| ^^
@@ -37,146 +45,146 @@ warning: unexpected `unknown_name` as condition name
3745
= help: was set with `--cfg` but isn't in the `--check-cfg` expected names
3846

3947
warning: unexpected `cfg` condition name
40-
--> $DIR/mix.rs:35:10
48+
--> $DIR/mix.rs:39:10
4149
|
4250
LL | cfg!(widnows);
43-
| ^^^^^^^ help: there is an config with a similar name: `windows`
51+
| ^^^^^^^ help: there is a config with a similar name: `windows`
4452

4553
warning: unexpected `cfg` condition value
46-
--> $DIR/mix.rs:38:10
54+
--> $DIR/mix.rs:42:10
4755
|
4856
LL | cfg!(feature = "bar");
4957
| ^^^^^^^^^^^^^^^
5058
|
5159
= note: expected values for `feature` are: `foo`
5260

5361
warning: unexpected `cfg` condition value
54-
--> $DIR/mix.rs:40:10
62+
--> $DIR/mix.rs:44:10
5563
|
5664
LL | cfg!(feature = "zebra");
5765
| ^^^^^^^^^^^^^^^^^
5866
|
5967
= note: expected values for `feature` are: `foo`
6068

6169
warning: unexpected `cfg` condition name
62-
--> $DIR/mix.rs:42:10
70+
--> $DIR/mix.rs:46:10
6371
|
6472
LL | cfg!(xxx = "foo");
6573
| ^^^^^^^^^^^
6674

6775
warning: unexpected `cfg` condition name
68-
--> $DIR/mix.rs:44:10
76+
--> $DIR/mix.rs:48:10
6977
|
7078
LL | cfg!(xxx);
7179
| ^^^
7280

7381
warning: unexpected `cfg` condition name
74-
--> $DIR/mix.rs:46:14
82+
--> $DIR/mix.rs:50:14
7583
|
7684
LL | cfg!(any(xxx, windows));
7785
| ^^^
7886

7987
warning: unexpected `cfg` condition value
80-
--> $DIR/mix.rs:48:14
88+
--> $DIR/mix.rs:52:14
8189
|
8290
LL | cfg!(any(feature = "bad", windows));
8391
| ^^^^^^^^^^^^^^^
8492
|
8593
= note: expected values for `feature` are: `foo`
8694

8795
warning: unexpected `cfg` condition name
88-
--> $DIR/mix.rs:50:23
96+
--> $DIR/mix.rs:54:23
8997
|
9098
LL | cfg!(any(windows, xxx));
9199
| ^^^
92100

93101
warning: unexpected `cfg` condition name
94-
--> $DIR/mix.rs:52:20
102+
--> $DIR/mix.rs:56:20
95103
|
96104
LL | cfg!(all(unix, xxx));
97105
| ^^^
98106

99107
warning: unexpected `cfg` condition name
100-
--> $DIR/mix.rs:54:14
108+
--> $DIR/mix.rs:58:14
101109
|
102110
LL | cfg!(all(aa, bb));
103111
| ^^
104112

105113
warning: unexpected `cfg` condition name
106-
--> $DIR/mix.rs:54:18
114+
--> $DIR/mix.rs:58:18
107115
|
108116
LL | cfg!(all(aa, bb));
109117
| ^^
110118

111119
warning: unexpected `cfg` condition name
112-
--> $DIR/mix.rs:57:14
120+
--> $DIR/mix.rs:61:14
113121
|
114122
LL | cfg!(any(aa, bb));
115123
| ^^
116124

117125
warning: unexpected `cfg` condition name
118-
--> $DIR/mix.rs:57:18
126+
--> $DIR/mix.rs:61:18
119127
|
120128
LL | cfg!(any(aa, bb));
121129
| ^^
122130

123131
warning: unexpected `cfg` condition value
124-
--> $DIR/mix.rs:60:20
132+
--> $DIR/mix.rs:64:20
125133
|
126134
LL | cfg!(any(unix, feature = "zebra"));
127135
| ^^^^^^^^^^^^^^^^^
128136
|
129137
= note: expected values for `feature` are: `foo`
130138

131139
warning: unexpected `cfg` condition name
132-
--> $DIR/mix.rs:62:14
140+
--> $DIR/mix.rs:66:14
133141
|
134142
LL | cfg!(any(xxx, feature = "zebra"));
135143
| ^^^
136144

137145
warning: unexpected `cfg` condition value
138-
--> $DIR/mix.rs:62:19
146+
--> $DIR/mix.rs:66:19
139147
|
140148
LL | cfg!(any(xxx, feature = "zebra"));
141149
| ^^^^^^^^^^^^^^^^^
142150
|
143151
= note: expected values for `feature` are: `foo`
144152

145153
warning: unexpected `cfg` condition name
146-
--> $DIR/mix.rs:65:14
154+
--> $DIR/mix.rs:69:14
147155
|
148156
LL | cfg!(any(xxx, unix, xxx));
149157
| ^^^
150158

151159
warning: unexpected `cfg` condition name
152-
--> $DIR/mix.rs:65:25
160+
--> $DIR/mix.rs:69:25
153161
|
154162
LL | cfg!(any(xxx, unix, xxx));
155163
| ^^^
156164

157165
warning: unexpected `cfg` condition value
158-
--> $DIR/mix.rs:68:14
166+
--> $DIR/mix.rs:72:14
159167
|
160168
LL | cfg!(all(feature = "zebra", feature = "zebra", feature = "zebra"));
161169
| ^^^^^^^^^^^^^^^^^
162170
|
163171
= note: expected values for `feature` are: `foo`
164172

165173
warning: unexpected `cfg` condition value
166-
--> $DIR/mix.rs:68:33
174+
--> $DIR/mix.rs:72:33
167175
|
168176
LL | cfg!(all(feature = "zebra", feature = "zebra", feature = "zebra"));
169177
| ^^^^^^^^^^^^^^^^^
170178
|
171179
= note: expected values for `feature` are: `foo`
172180

173181
warning: unexpected `cfg` condition value
174-
--> $DIR/mix.rs:68:52
182+
--> $DIR/mix.rs:72:52
175183
|
176184
LL | cfg!(all(feature = "zebra", feature = "zebra", feature = "zebra"));
177185
| ^^^^^^^^^^^^^^^^^
178186
|
179187
= note: expected values for `feature` are: `foo`
180188

181-
warning: 27 warnings emitted
189+
warning: 28 warnings emitted
182190

‎tests/ui/check-cfg/values-target-json.stderr

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ warning: unexpected `cfg` condition value
44
LL | #[cfg(target_os = "linuz")]
55
| ^^^^^^^^^^^^-------
66
| |
7-
| help: there is an expected value with a similar name: `"linux"`
7+
| help: there is a expected value with a similar name: `"linux"`
88
|
99
= note: expected values for `target_os` are: `aix`, `android`, `cuda`, `dragonfly`, `emscripten`, `ericos`, `espidf`, `freebsd`, `fuchsia`, `haiku`, `hermit`, `horizon`, `illumos`, `ios`, `l4re`, `linux`, `macos`, `netbsd`, `none`, `nto`, `openbsd`, `psp`, `redox`, `solaris`, `solid_asp3`, `tvos`, `uefi`, `unknown`, `vita`, `vxworks`, `wasi`, `watchos`, `windows`, `xous`
1010
= note: `#[warn(unexpected_cfgs)]` on by default

‎tests/ui/check-cfg/well-known-names.stderr

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ warning: unexpected `cfg` condition name
44
LL | #[cfg(target_oz = "linux")]
55
| ---------^^^^^^^^^^
66
| |
7-
| help: there is an config with a similar name: `target_os`
7+
| help: there is a config with a similar name: `target_os`
88
|
99
= note: `#[warn(unexpected_cfgs)]` on by default
1010

@@ -14,13 +14,13 @@ warning: unexpected `cfg` condition name
1414
LL | #[cfg(features = "foo")]
1515
| --------^^^^^^^^
1616
| |
17-
| help: there is an config with a similar name: `feature`
17+
| help: there is a config with a similar name: `feature`
1818

1919
warning: unexpected `cfg` condition name
2020
--> $DIR/well-known-names.rs:20:7
2121
|
2222
LL | #[cfg(uniw)]
23-
| ^^^^ help: there is an config with a similar name: `unix`
23+
| ^^^^ help: there is a config with a similar name: `unix`
2424

2525
warning: 3 warnings emitted
2626

‎tests/ui/check-cfg/well-known-values.stderr

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ warning: unexpected `cfg` condition value
44
LL | #[cfg(target_os = "linuz")]
55
| ^^^^^^^^^^^^-------
66
| |
7-
| help: there is an expected value with a similar name: `"linux"`
7+
| help: there is a expected value with a similar name: `"linux"`
88
|
99
= note: expected values for `target_os` are: `aix`, `android`, `cuda`, `dragonfly`, `emscripten`, `espidf`, `freebsd`, `fuchsia`, `haiku`, `hermit`, `horizon`, `illumos`, `ios`, `l4re`, `linux`, `macos`, `netbsd`, `none`, `nto`, `openbsd`, `psp`, `redox`, `solaris`, `solid_asp3`, `tvos`, `uefi`, `unknown`, `vita`, `vxworks`, `wasi`, `watchos`, `windows`, `xous`
1010
= note: `#[warn(unexpected_cfgs)]` on by default
@@ -15,7 +15,7 @@ warning: unexpected `cfg` condition value
1515
LL | #[cfg(target_has_atomic = "0")]
1616
| ^^^^^^^^^^^^^^^^^^^^---
1717
| |
18-
| help: there is an expected value with a similar name: `"8"`
18+
| help: there is a expected value with a similar name: `"8"`
1919
|
2020
= note: expected values for `target_has_atomic` are: (none), `128`, `16`, `32`, `64`, `8`, `ptr`
2121

0 commit comments

Comments
 (0)
Please sign in to comment.