Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
58 commits
Select commit Hold shift + click to select a range
be93271
bump curl-sys and openssl-sys to support OpenSSL 4.0.x
heitbaum Apr 24, 2026
f0a751d
std_detect: support detecting more features on aarch64 Windows
lilith Apr 27, 2026
4de0d24
borrowck: avoid misleading return-type note for foreign `Fn` callees
qaijuang Apr 27, 2026
ef8e0c9
add `stat` and `lstat` shims for Linux and all other Unixes
enricobolzonello Apr 1, 2026
8f298e2
minor adjustments
RalfJung Apr 27, 2026
aebbc55
Merge pull request #4934 from enricobolzonello/lstat-stat-support
RalfJung Apr 27, 2026
89cfc22
Suggest const destruct bounds on `Drop` impls when they are missing
oli-obk Apr 25, 2026
61e876f
Suggest various missing trait bounds on `HostEffect` clauses not bein…
oli-obk Apr 27, 2026
8b3f6db
Update with new LLVM 22 target for `wasm32-wali-linux-target`
arjunr2 Apr 28, 2026
221687a
apply Cortex-A53 errata 843419 mitigation to the AArch64 Linux targets
japaric Apr 17, 2026
fdb1e26
Add _mm512_permutex2var_epi64 shim
elichai Apr 14, 2026
74109af
Merge pull request #4963 from elichai/elichai/_mm512_permutex2var_epi64
RalfJung Apr 28, 2026
e743a4d
bootstrap: remap OUT_DIR paths to fix build script path leakage in ar…
paradoxicalguy Apr 28, 2026
26ce8a9
Apply suggestion from @bjorn3
paradoxicalguy Apr 28, 2026
3022538
Impl GenericTypeVisitable for FnSigKind
ChayimFriedman2 Apr 20, 2026
ce559d2
shims/unix: improve Linux statx metadata handling
Mar 20, 2026
fffc4b5
Update `opt_ast_lowering_delayed_lints` query to allow "stealing" lin…
GuillaumeGomez Apr 28, 2026
44b9251
use the new `//@ needs-asm-mnemonic: ret` more
folkertdev Apr 27, 2026
23c7bf0
Fix passing paths with space into dlltool
ChrisDenton Apr 28, 2026
6d20c98
Test that raw-dylib works with whitespace paths
ChrisDenton Apr 28, 2026
a940270
Make `FlatMapInPlaceVec` an unsafe trait.
nnethercote Apr 29, 2026
89e272c
privacy: share effective visibility initialization
SynapLink Apr 29, 2026
e5493ea
ci(free-disk-space): remove more tools and fix warnings
marcoieni Apr 29, 2026
ade1a24
feat: allow setting `IPPROTO_TCP` as protocol in `socket` syscall
WhySoBad Apr 29, 2026
e0a3f69
Merge pull request #4913 from bourumir-wyngs/bw/statx
RalfJung Apr 29, 2026
a87cc71
Merge pull request #4986 from WhySoBad/network-socket-allow-tcp-proto
RalfJung Apr 29, 2026
ad7ddbc
simd_reduce_min/max: remove float support
RalfJung Apr 12, 2026
b784a1c
When archive format is wrong produce an error instead of ICE
cezarbbb Apr 29, 2026
66202c8
rustc_middle: Implement the `partial_cmp` operation for `DefId`s
petrochenkov Apr 21, 2026
8a513be
tree borrows: implicit writes
quiode Apr 29, 2026
e637e42
Merge pull request #4947 from quiode/tb-strong-mode
RalfJung Apr 29, 2026
c560774
c-variadic: more precise compatibility check in const-eval
folkertdev Apr 26, 2026
36138dc
Fix `doc_cfg` feature for extern items
GuillaumeGomez Apr 29, 2026
dff9d08
Avoid having traits in rustc_type_ir for `FnSigKind` and `Abi`
ChayimFriedman2 Apr 20, 2026
7724d13
Add `AcceptContext::expect_key_value`
scrabsha Apr 24, 2026
d28ea81
resolve: Extend `ambiguous_import_visibilities` deprecation lint to g…
petrochenkov Feb 17, 2026
ca00f33
Rollup merge of #154149 - petrochenkov:globvisglob, r=mu001999
JonathanBrouwer Apr 29, 2026
2bcacd6
Rollup merge of #155189 - RalfJung:reduce-minmax-float, r=petrochenkov
JonathanBrouwer Apr 29, 2026
1e65a37
Rollup merge of #155453 - ferrocene:a53-linux-fix-errata, r=wesleywiser
JonathanBrouwer Apr 29, 2026
4f0a766
Rollup merge of #155562 - ChayimFriedman2:no-traits, r=nikomatsakis
JonathanBrouwer Apr 29, 2026
5035d92
Rollup merge of #155608 - petrochenkov:optmodcmp, r=jdonszelmann
JonathanBrouwer Apr 29, 2026
33e46df
Rollup merge of #155721 - cezarbbb:fix-archive-ice-148217, r=bjorn3
JonathanBrouwer Apr 29, 2026
6654d9a
Rollup merge of #155794 - SynapLink:share-effective-vis-private-init,…
JonathanBrouwer Apr 29, 2026
08fcf19
Rollup merge of #155832 - folkertdev:c-variadic-ub-check, r=RalfJung
JonathanBrouwer Apr 29, 2026
ab00580
Rollup merge of #155856 - imazen:winarm-stable-features, r=Amanieu
JonathanBrouwer Apr 29, 2026
837ac25
Rollup merge of #155861 - oli-obk:effect-bound-suggestions, r=jdonsze…
JonathanBrouwer Apr 29, 2026
67c457b
Rollup merge of #155899 - ChrisDenton:dlltool, r=mati865
JonathanBrouwer Apr 29, 2026
88eb2bc
Rollup merge of #155916 - arjunr2:llvm-22-update, r=JohnTitor
JonathanBrouwer Apr 29, 2026
058fb39
Rollup merge of #155935 - paradoxicalguy:fix-out-dir-remap, r=Urgau,
JonathanBrouwer Apr 29, 2026
c955c2a
Rollup merge of #155950 - folkertdev:needs-ret-mnemonic, r=chenyukang
JonathanBrouwer Apr 29, 2026
5ecc229
Rollup merge of #155958 - marcoieni:ci-remove-edge-chrome-and-more, r…
JonathanBrouwer Apr 29, 2026
28510a2
Rollup merge of #155966 - RalfJung:miri, r=RalfJung
JonathanBrouwer Apr 29, 2026
a4c768d
Rollup merge of #155711 - heitbaum:openssl-4.0.x, r=mati865
JonathanBrouwer Apr 29, 2026
7c606e6
Rollup merge of #155831 - scrabsha:push-pqrumlqtlsyk, r=JonathanBrouwer
JonathanBrouwer Apr 29, 2026
3a8f516
Rollup merge of #155877 - qaijuang:fix-155727-fnmut-diagnostic, r=wes…
JonathanBrouwer Apr 29, 2026
cd2e2cd
Rollup merge of #155949 - GuillaumeGomez:steal-lints, r=JonathanBrouw…
JonathanBrouwer Apr 29, 2026
733828c
Rollup merge of #155951 - nnethercote:unsafe-FlatMapInPlaceVec, r=kiv…
JonathanBrouwer Apr 29, 2026
374b02e
Rollup merge of #155967 - GuillaumeGomez:doc-cfg-externs, r=Urgau
JonathanBrouwer Apr 29, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions Cargo.lock
Original file line number Diff line number Diff line change
Expand Up @@ -994,9 +994,9 @@ dependencies = [

[[package]]
name = "curl-sys"
version = "0.4.84+curl-8.17.0"
version = "0.4.87+curl-8.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "abc4294dc41b882eaff37973c2ec3ae203d0091341ee68fbadd1d06e0c18a73b"
checksum = "61a460380f0ef783703dcbe909107f39c162adeac050d73c850055118b5b6327"
dependencies = [
"cc",
"libc",
Expand Down Expand Up @@ -2728,9 +2728,9 @@ checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e"

[[package]]
name = "openssl-sys"
version = "0.9.111"
version = "0.9.114"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "82cab2d520aa75e3c58898289429321eb788c3106963d0dc886ec7a5f4adc321"
checksum = "13ce1245cd07fcc4cfdb438f7507b0c7e4f3849a69fd84d52374c66d83741bb6"
dependencies = [
"cc",
"libc",
Expand Down
2 changes: 1 addition & 1 deletion compiler/rustc_ast_lowering/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -765,7 +765,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
let mut bodies = std::mem::take(&mut self.bodies);
let define_opaque = std::mem::take(&mut self.define_opaque);
let trait_map = std::mem::take(&mut self.trait_map);
let delayed_lints = std::mem::take(&mut self.delayed_lints).into_boxed_slice();
let delayed_lints = Steal::new(std::mem::take(&mut self.delayed_lints).into_boxed_slice());

#[cfg(debug_assertions)]
for (id, attrs) in attrs.iter() {
Expand Down
19 changes: 6 additions & 13 deletions compiler/rustc_attr_parsing/src/attributes/cfg.rs
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ pub fn parse_cfg_entry(
else {
return Err(cx.adcx().expected_identifier(meta.path().span()));
};
parse_name_value(name, meta.path().span(), a.name_value(), meta.span(), cx)?
parse_name_value(name, meta.path().span(), a.as_name_value(), meta.span(), cx)?
}
},
MetaItemOrLitParser::Lit(lit) => match lit.kind {
Expand Down Expand Up @@ -175,23 +175,16 @@ fn parse_cfg_entry_target(
let mut result = ThinVec::new();
for sub_item in list.mixed() {
// First, validate that this is a NameValue item
let Some(sub_item) = sub_item.meta_item() else {
cx.adcx().expected_name_value(sub_item.span(), None);
continue;
};
let Some(nv) = sub_item.args().name_value() else {
cx.adcx().expected_name_value(sub_item.span(), None);
let Some((name, value)) = cx.expect_name_value(sub_item, sub_item.span(), None) else {
continue;
};

// Then, parse it as a name-value item
let Some(name) = sub_item.path().word_sym().filter(|s| !s.is_path_segment_keyword()) else {
return Err(cx.adcx().expected_identifier(sub_item.path().span()));
};
if name.is_path_segment_keyword() {
return Err(cx.adcx().expected_identifier(name.span));
}
let name = Symbol::intern(&format!("target_{name}"));
if let Ok(cfg) =
parse_name_value(name, sub_item.path().span(), Some(nv), sub_item.span(), cx)
{
if let Ok(cfg) = parse_name_value(name, sub_item.span(), Some(value), sub_item.span(), cx) {
result.push(cfg);
}
}
Expand Down
6 changes: 1 addition & 5 deletions compiler/rustc_attr_parsing/src/attributes/cfi_encoding.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,7 @@ impl SingleAttributeParser for CfiEncodingParser {
const TEMPLATE: AttributeTemplate = template!(NameValueStr: "encoding");

fn convert(cx: &mut AcceptContext<'_, '_>, args: &ArgParser) -> Option<AttributeKind> {
let Some(name_value) = args.name_value() else {
let attr_span = cx.attr_span;
cx.adcx().expected_name_value(attr_span, Some(sym::cfi_encoding));
return None;
};
let name_value = cx.expect_name_value(args, cx.attr_span, Some(sym::cfi_encoding))?;

let Some(value_str) = name_value.value_as_str() else {
cx.adcx().expected_string_literal(name_value.value_span, None);
Expand Down
98 changes: 31 additions & 67 deletions compiler/rustc_attr_parsing/src/attributes/codegen_attrs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -118,11 +118,7 @@ impl SingleAttributeParser for ExportNameParser {
const TEMPLATE: AttributeTemplate = template!(NameValueStr: "name");

fn convert(cx: &mut AcceptContext<'_, '_>, args: &ArgParser) -> Option<AttributeKind> {
let Some(nv) = args.name_value() else {
let attr_span = cx.attr_span;
cx.adcx().expected_name_value(attr_span, None);
return None;
};
let nv = cx.expect_name_value(args, cx.attr_span, None)?;
let Some(name) = nv.value_as_str() else {
cx.adcx().expected_string_literal(nv.value_span, Some(nv.value_as_lit()));
return None;
Expand All @@ -146,11 +142,7 @@ impl SingleAttributeParser for RustcObjcClassParser {
const TEMPLATE: AttributeTemplate = template!(NameValueStr: "ClassName");

fn convert(cx: &mut AcceptContext<'_, '_>, args: &ArgParser) -> Option<AttributeKind> {
let Some(nv) = args.name_value() else {
let attr_span = cx.attr_span;
cx.adcx().expected_name_value(attr_span, None);
return None;
};
let nv = cx.expect_name_value(args, cx.attr_span, None)?;
let Some(classname) = nv.value_as_str() else {
// `#[rustc_objc_class = ...]` is expected to be used as an implementation detail
// inside a standard library macro, but `cx.expected_string_literal` exposes too much.
Expand All @@ -177,11 +169,7 @@ impl SingleAttributeParser for RustcObjcSelectorParser {
const TEMPLATE: AttributeTemplate = template!(NameValueStr: "methodName");

fn convert(cx: &mut AcceptContext<'_, '_>, args: &ArgParser) -> Option<AttributeKind> {
let Some(nv) = args.name_value() else {
let attr_span = cx.attr_span;
cx.adcx().expected_name_value(attr_span, None);
return None;
};
let nv = cx.expect_name_value(args, cx.attr_span, None)?;
let Some(methname) = nv.value_as_str() else {
// `#[rustc_objc_selector = ...]` is expected to be used as an implementation detail
// inside a standard library macro, but `cx.expected_string_literal` exposes too much.
Expand Down Expand Up @@ -471,29 +459,20 @@ fn parse_tf_attribute(
return features;
}
for item in list.mixed() {
let Some(name_value) = item.meta_item() else {
cx.adcx().expected_name_value(item.span(), Some(sym::enable));
let Some((ident, value)) = cx.expect_name_value(item, item.span(), Some(sym::enable))
else {
return features;
};

// Validate name
let Some(name) = name_value.path().word_sym() else {
cx.adcx().expected_name_value(name_value.path().span(), Some(sym::enable));
return features;
};
if name != sym::enable {
cx.adcx().expected_name_value(name_value.path().span(), Some(sym::enable));
if ident.name != sym::enable {
cx.adcx().expected_specific_argument(ident.span, &[sym::enable]);
return features;
}

// Use value
let Some(name_value) = name_value.args().name_value() else {
cx.adcx().expected_name_value(item.span(), Some(sym::enable));
return features;
};
let Some(value_str) = name_value.value_as_str() else {
cx.adcx()
.expected_string_literal(name_value.value_span, Some(name_value.value_as_lit()));
let Some(value_str) = value.value_as_str() else {
cx.adcx().expected_string_literal(value.value_span, Some(value.value_as_lit()));
return features;
};
for feature in value_str.as_str().split(",") {
Expand Down Expand Up @@ -592,14 +571,7 @@ impl SingleAttributeParser for SanitizeParser {
let mut rtsan = None;

for item in list.mixed() {
let Some(item) = item.meta_item() else {
cx.adcx().expected_name_value(item.span(), None);
continue;
};

let path = item.path().word_sym();
let Some(value) = item.args().name_value() else {
cx.adcx().expected_name_value(item.span(), path);
let Some((ident, value)) = cx.expect_name_value(item, item.span(), None) else {
continue;
};

Expand Down Expand Up @@ -628,20 +600,20 @@ impl SingleAttributeParser for SanitizeParser {
}
};

match path {
Some(sym::address) | Some(sym::kernel_address) => {
match ident.name {
sym::address | sym::kernel_address => {
apply(SanitizerSet::ADDRESS | SanitizerSet::KERNELADDRESS)
}
Some(sym::cfi) => apply(SanitizerSet::CFI),
Some(sym::kcfi) => apply(SanitizerSet::KCFI),
Some(sym::memory) => apply(SanitizerSet::MEMORY),
Some(sym::memtag) => apply(SanitizerSet::MEMTAG),
Some(sym::shadow_call_stack) => apply(SanitizerSet::SHADOWCALLSTACK),
Some(sym::thread) => apply(SanitizerSet::THREAD),
Some(sym::hwaddress) | Some(sym::kernel_hwaddress) => {
sym::cfi => apply(SanitizerSet::CFI),
sym::kcfi => apply(SanitizerSet::KCFI),
sym::memory => apply(SanitizerSet::MEMORY),
sym::memtag => apply(SanitizerSet::MEMTAG),
sym::shadow_call_stack => apply(SanitizerSet::SHADOWCALLSTACK),
sym::thread => apply(SanitizerSet::THREAD),
sym::hwaddress | sym::kernel_hwaddress => {
apply(SanitizerSet::HWADDRESS | SanitizerSet::KERNELHWADDRESS)
}
Some(sym::realtime) => match value.value_as_str() {
sym::realtime => match value.value_as_str() {
Some(sym::nonblocking) => rtsan = Some(RtsanSetting::Nonblocking),
Some(sym::blocking) => rtsan = Some(RtsanSetting::Blocking),
Some(sym::caller) => rtsan = Some(RtsanSetting::Caller),
Expand All @@ -654,7 +626,7 @@ impl SingleAttributeParser for SanitizeParser {
},
_ => {
cx.adcx().expected_specific_argument_strings(
item.path().span(),
ident.span,
&[
sym::address,
sym::kernel_address,
Expand Down Expand Up @@ -725,57 +697,49 @@ impl SingleAttributeParser for PatchableFunctionEntryParser {
let mut errored = false;

for item in meta_item_list.mixed() {
let Some(meta_item) = item.meta_item() else {
errored = true;
cx.adcx().expected_name_value(item.span(), None);
continue;
};

let Some(name_value_lit) = meta_item.args().name_value() else {
errored = true;
cx.adcx().expected_name_value(item.span(), None);
let Some((ident, value)) = cx.expect_name_value(item, item.span(), None) else {
continue;
};

let attrib_to_write = match meta_item.ident().map(|ident| ident.name) {
Some(sym::prefix_nops) => {
let attrib_to_write = match ident.name {
sym::prefix_nops => {
// Duplicate prefixes are not allowed
if prefix.is_some() {
errored = true;
cx.adcx().duplicate_key(meta_item.path().span(), sym::prefix_nops);
cx.adcx().duplicate_key(ident.span, sym::prefix_nops);
continue;
}
&mut prefix
}
Some(sym::entry_nops) => {
sym::entry_nops => {
// Duplicate entries are not allowed
if entry.is_some() {
errored = true;
cx.adcx().duplicate_key(meta_item.path().span(), sym::entry_nops);
cx.adcx().duplicate_key(ident.span, sym::entry_nops);
continue;
}
&mut entry
}
_ => {
errored = true;
cx.adcx().expected_specific_argument(
meta_item.path().span(),
ident.span,
&[sym::prefix_nops, sym::entry_nops],
);
continue;
}
};

let rustc_ast::LitKind::Int(val, _) = name_value_lit.value_as_lit().kind else {
let rustc_ast::LitKind::Int(val, _) = value.value_as_lit().kind else {
errored = true;
cx.adcx().expected_integer_literal(name_value_lit.value_span);
cx.adcx().expected_integer_literal(value.value_span);
continue;
};

let Ok(val) = val.get().try_into() else {
errored = true;
cx.adcx().expected_integer_literal_in_range(
name_value_lit.value_span,
value.value_span,
u8::MIN as isize,
u8::MAX as isize,
);
Expand Down
45 changes: 7 additions & 38 deletions compiler/rustc_attr_parsing/src/attributes/crate_level.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,7 @@ impl SingleAttributeParser for CrateNameParser {
const ALLOWED_TARGETS: AllowedTargets = AllowedTargets::AllowList(&[Allow(Target::Crate)]);

fn convert(cx: &mut AcceptContext<'_, '_>, args: &ArgParser) -> Option<AttributeKind> {
let ArgParser::NameValue(n) = args else {
let attr_span = cx.attr_span;
cx.adcx().expected_name_value(attr_span, None);
return None;
};
let n = cx.expect_name_value(args, cx.attr_span, None)?;

let Some(name) = n.value_as_str() else {
cx.adcx().expected_string_literal(n.value_span, Some(n.value_as_lit()));
Expand All @@ -47,11 +43,7 @@ impl CombineAttributeParser for CrateTypeParser {
cx: &mut AcceptContext<'_, '_>,
args: &ArgParser,
) -> impl IntoIterator<Item = Self::Item> {
let ArgParser::NameValue(n) = args else {
let attr_span = cx.attr_span;
cx.adcx().expected_name_value(attr_span, None);
return None;
};
let n = cx.expect_name_value(args, cx.attr_span, None)?;

let Some(crate_type) = n.value_as_str() else {
cx.adcx().expected_string_literal(n.value_span, Some(n.value_as_lit()));
Expand Down Expand Up @@ -95,11 +87,7 @@ impl SingleAttributeParser for RecursionLimitParser {
const ALLOWED_TARGETS: AllowedTargets = AllowedTargets::AllowList(&[Allow(Target::Crate)]);

fn convert(cx: &mut AcceptContext<'_, '_>, args: &ArgParser) -> Option<AttributeKind> {
let ArgParser::NameValue(nv) = args else {
let attr_span = cx.attr_span;
cx.adcx().expected_name_value(attr_span, None);
return None;
};
let nv = cx.expect_name_value(args, cx.attr_span, None)?;

Some(AttributeKind::RecursionLimit {
limit: cx.parse_limit_int(nv)?,
Expand All @@ -117,11 +105,7 @@ impl SingleAttributeParser for MoveSizeLimitParser {
const ALLOWED_TARGETS: AllowedTargets = AllowedTargets::AllowList(&[Allow(Target::Crate)]);

fn convert(cx: &mut AcceptContext<'_, '_>, args: &ArgParser) -> Option<AttributeKind> {
let ArgParser::NameValue(nv) = args else {
let attr_span = cx.attr_span;
cx.adcx().expected_name_value(attr_span, None);
return None;
};
let nv = cx.expect_name_value(args, cx.attr_span, None)?;

Some(AttributeKind::MoveSizeLimit {
limit: cx.parse_limit_int(nv)?,
Expand All @@ -140,11 +124,7 @@ impl SingleAttributeParser for TypeLengthLimitParser {
const ALLOWED_TARGETS: AllowedTargets = AllowedTargets::AllowList(&[Allow(Target::Crate)]);

fn convert(cx: &mut AcceptContext<'_, '_>, args: &ArgParser) -> Option<AttributeKind> {
let ArgParser::NameValue(nv) = args else {
let attr_span = cx.attr_span;
cx.adcx().expected_name_value(attr_span, None);
return None;
};
let nv = cx.expect_name_value(args, cx.attr_span, None)?;

Some(AttributeKind::TypeLengthLimit {
limit: cx.parse_limit_int(nv)?,
Expand All @@ -162,11 +142,7 @@ impl SingleAttributeParser for PatternComplexityLimitParser {
const ALLOWED_TARGETS: AllowedTargets = AllowedTargets::AllowList(&[Allow(Target::Crate)]);

fn convert(cx: &mut AcceptContext<'_, '_>, args: &ArgParser) -> Option<AttributeKind> {
let ArgParser::NameValue(nv) = args else {
let attr_span = cx.attr_span;
cx.adcx().expected_name_value(attr_span, None);
return None;
};
let nv = cx.expect_name_value(args, cx.attr_span, None)?;

Some(AttributeKind::PatternComplexityLimit {
limit: cx.parse_limit_int(nv)?,
Expand Down Expand Up @@ -219,14 +195,7 @@ impl SingleAttributeParser for WindowsSubsystemParser {
const TEMPLATE: AttributeTemplate = template!(NameValueStr: ["windows", "console"], "https://doc.rust-lang.org/reference/runtime.html#the-windows_subsystem-attribute");

fn convert(cx: &mut AcceptContext<'_, '_>, args: &ArgParser) -> Option<AttributeKind> {
let Some(nv) = args.name_value() else {
let inner_span = cx.inner_span;
cx.adcx().expected_name_value(
args.span().unwrap_or(inner_span),
Some(sym::windows_subsystem),
);
return None;
};
let nv = cx.expect_name_value(args, cx.inner_span, Some(sym::windows_subsystem))?;

let kind = match nv.value_as_str() {
Some(sym::console) => WindowsSubsystemKind::Console,
Expand Down
Loading
Loading