Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
63 commits
Select commit Hold shift + click to select a range
1bd4fa0
Add tuple never coercion collection regression test
chenyukang Jul 24, 2026
bae7e21
Check unsafe impls on safe EIIs
AsakuraMizu Jul 23, 2026
4bd52e9
Remove redundant `#[rustc_paren_sugar]` feature gate
mejrs Jul 24, 2026
75529d4
rustc_parse: Stop returning `Option` from statement parsing
petrochenkov Jul 24, 2026
a32fa44
Updated expect messages for CString struct and method documentation
asder8215 Jul 24, 2026
36ef11a
Update expect messages in library/alloc/boxed.rs and library/alloc/st…
Colepng Jul 25, 2026
05bb184
sembr src/variance.md
tshepang Jul 25, 2026
5d19c92
Prepare for merging from rust-lang/rust
invalid-email-address Jul 25, 2026
bb4b62b
Merge ref 'da86f4d0726b' from rust-lang/rust
invalid-email-address Jul 25, 2026
acb9407
Split multiline derives into std/rustc macros
mejrs Jul 25, 2026
d57ee22
improve variance.md
tshepang Jul 25, 2026
4196283
Add warning for breakage hazard for introducing new builtin attrs
jieyouxu Jul 25, 2026
d44d12d
Merge pull request #2944 from jieyouxu/builtin_attr
jieyouxu Jul 25, 2026
f36f2b9
sembr src/rustdoc-internals/rustdoc-gui-test-suite.md
tshepang Jul 25, 2026
0d9c6a4
overlong
tshepang Jul 25, 2026
c565998
punctuation
tshepang Jul 25, 2026
54c2643
sembr src/rustdoc-internals/search.md
tshepang Jul 25, 2026
3aecf93
Fix `find_attr` hygiene issues
mejrs Jul 25, 2026
71f1401
typo
tshepang Jul 25, 2026
19ec811
sembr src/stability-guarantees.md
tshepang Jul 25, 2026
2500a68
sembr src/pat-exhaustive-checking.md
tshepang Jul 25, 2026
beddeb0
remove `extern crate self as rustc_hir;` statement
mejrs Jul 25, 2026
72da0f5
improve pat-exhaustive-checking.md
tshepang Jul 25, 2026
a477499
sembr src/ast-validation.md
tshepang Jul 25, 2026
8da4c50
sembr src/notification-groups/gpu-target.md
tshepang Jul 25, 2026
a88b4f0
improve notification-groups/gpu-target.md
tshepang Jul 25, 2026
be78fc8
sembr src/notification-groups/wasm.md
tshepang Jul 25, 2026
01f3867
select the right text to link
tshepang Jul 25, 2026
5c30492
sembr src/const-eval.md
tshepang Jul 25, 2026
721d2b3
Merge pull request #2945 from rust-lang/tshepang/misc
tshepang Jul 25, 2026
ac7ecbd
Merge pull request #2943 from rust-lang/rustc-pull
tshepang Jul 25, 2026
6ce8067
sembr src/attributes.md
tshepang Jul 25, 2026
0dc322b
reflow
tshepang Jul 25, 2026
67e048e
sembr src/tests/autodiff-ci-job.md
tshepang Jul 25, 2026
b5803d3
sembr src/profiling/with-perf.md
tshepang Jul 25, 2026
b7f7f0d
improve profiling/with-perf.md
tshepang Jul 25, 2026
c39587c
Merge pull request #2946 from rust-lang/tshepang/misc
tshepang Jul 25, 2026
4d31be2
Flatten `nested_filter` module, and rename `None`.
mejrs Jul 25, 2026
b41588f
Replace `unreachable!` with `!`
mejrs Jul 25, 2026
c49a172
Note that the expected runtime signature is for the current target only
Urgau Jul 25, 2026
147c13a
Move extern static mut linkage check to check_attr
mejrs Jul 20, 2026
e75e08d
update linkage test
mejrs Jul 20, 2026
8b3a75c
reject linkage attr on const fn
mejrs Jul 20, 2026
641d79e
Add fixme
mejrs Jul 20, 2026
029a240
fix: error in diagnostic on_unmatched_args
amirHdev Jul 25, 2026
7ffc037
disallow linkage on trait methods without body
mejrs Jul 20, 2026
ecc8402
rename abort_unwind → abort_on_unwind
RalfJung Jul 25, 2026
aae9c69
Adjust linkage error wording
mejrs Jul 25, 2026
2360529
Various cleanups around rustc_attr_parsing
qaijuang Jul 25, 2026
73f7a34
Rollup merge of #159617 - mejrs:weak_linkage, r=JonathanBrouwer
JonathanBrouwer Jul 25, 2026
d5eaf28
Rollup merge of #159783 - AsakuraMizu:safe-eii-unsafe-impl, r=mejrs,J…
JonathanBrouwer Jul 25, 2026
01fd60f
Rollup merge of #159810 - chenyukang:yukang-fix-100727-tuple-never-co…
JonathanBrouwer Jul 25, 2026
82dcecb
Rollup merge of #159826 - mejrs:sugar_parens, r=JonathanBrouwer
JonathanBrouwer Jul 25, 2026
bf52158
Rollup merge of #159849 - petrochenkov:estmt, r=JonathanBrouwer
JonathanBrouwer Jul 25, 2026
77dab54
Rollup merge of #159853 - asder8215:cstr_expect, r=fee1-dead
JonathanBrouwer Jul 25, 2026
5076e83
Rollup merge of #159875 - qaijuang:159508-follow-up, r=mejrs
JonathanBrouwer Jul 25, 2026
9ca0bf2
Rollup merge of #159882 - Colepng:main, r=Darksonn
JonathanBrouwer Jul 25, 2026
4a69431
Rollup merge of #159891 - mejrs:split_derives, r=JonathanBrouwer
JonathanBrouwer Jul 25, 2026
dc52685
Rollup merge of #159893 - mejrs:find_attr_hygiene, r=JonathanBrouwer
JonathanBrouwer Jul 25, 2026
2791e88
Rollup merge of #159895 - tshepang:rdg-sync, r=tshepang
JonathanBrouwer Jul 25, 2026
ef3fb8f
Rollup merge of #159902 - Urgau:runtime-symbols-for-current-target, r…
JonathanBrouwer Jul 25, 2026
4712014
Rollup merge of #159914 - amirHdev:fix-on-unmatched-args, r=mejrs
JonathanBrouwer Jul 25, 2026
7418f22
Rollup merge of #159918 - RalfJung:abort_unwind, r=hanna-kruppe
JonathanBrouwer Jul 25, 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
5 changes: 4 additions & 1 deletion compiler/rustc_ast_lowering/src/item.rs
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,10 @@ impl<'hir> LoweringContext<'_, 'hir> {
hir::attrs::EiiImpl {
span: self.lower_span(*span),
inner_span: self.lower_span(*inner_span),
impl_marked_unsafe: self.lower_safety(*impl_safety, hir::Safety::Safe).is_unsafe(),
impl_unsafe_span: match *impl_safety {
Safety::Unsafe(span) => Some(self.lower_span(span)),
Safety::Safe(_) | Safety::Default => None,
},
is_default: *is_default,
resolution,
}
Expand Down
27 changes: 8 additions & 19 deletions compiler/rustc_attr_parsing/src/attributes/codegen_attrs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -305,7 +305,7 @@ impl AttributeParser for NakedParser {
if other_attr.word_is(sym::target_feature) {
if !cx.features().naked_functions_target_feature() {
feature_err(
&cx.sess(),
cx.sess(),
sym::naked_functions_target_feature,
other_attr.span(),
"`#[target_feature(/* ... */)]` is currently unstable on `#[naked]` functions",
Expand Down Expand Up @@ -396,7 +396,7 @@ impl AttributeParser for UsedParser {
Some(sym::compiler) => {
if !cx.features().used_with_arg() {
feature_err(
&cx.sess(),
cx.sess(),
sym::used_with_arg,
cx.attr_span,
"`#[used(compiler)]` is currently unstable",
Expand All @@ -408,7 +408,7 @@ impl AttributeParser for UsedParser {
Some(sym::linker) => {
if !cx.features().used_with_arg() {
feature_err(
&cx.sess(),
cx.sess(),
sym::used_with_arg,
cx.attr_span,
"`#[used(linker)]` is currently unstable",
Expand Down Expand Up @@ -503,7 +503,7 @@ fn parse_tf_attribute(
let Some(value_str) = cx.expect_string_literal(value) else {
return features;
};
for feature in value_str.as_str().split(",") {
for feature in value_str.as_str().split(',') {
features.push((Symbol::intern(feature), item.span()));
}
}
Expand Down Expand Up @@ -602,7 +602,7 @@ impl SingleAttributeParser for InstrumentFnParser {
const STABILITY: AttributeStability = unstable!(instrument_fn);

fn convert(cx: &mut AcceptContext<'_, '_>, args: &ArgParser) -> Option<AttributeKind> {
let instrument = match args {
match args {
ArgParser::NameValue(nv) => match nv.value_as_str() {
Some(sym::on) => Some(AttributeKind::InstrumentFn(InstrumentFnAttr::On)),
Some(sym::off) => Some(AttributeKind::InstrumentFn(InstrumentFnAttr::Off)),
Expand All @@ -621,8 +621,7 @@ impl SingleAttributeParser for InstrumentFnParser {
cx.adcx().expected_specific_argument_strings(span, &[sym::on, sym::off]);
None
}
};
instrument
}
}
}

Expand Down Expand Up @@ -673,14 +672,7 @@ impl SingleAttributeParser for SanitizeParser {
let is_on = match value.value_as_str() {
Some(sym::on) => true,
Some(sym::off) => false,
Some(_) => {
cx.adcx().expected_specific_argument_strings(
value.value_span,
&[sym::on, sym::off],
);
return;
}
None => {
_ => {
cx.adcx().expected_specific_argument_strings(
value.value_span,
&[sym::on, sym::off],
Expand Down Expand Up @@ -737,7 +729,6 @@ impl SingleAttributeParser for SanitizeParser {
sym::realtime,
],
);
continue;
}
}
}
Expand Down Expand Up @@ -809,9 +800,7 @@ impl SingleAttributeParser for PatchableFunctionEntryParser {
}

for item in meta_item_list.mixed() {
let Some((ident, value)) = cx.expect_name_value(item, item.span(), None) else {
return None;
};
let (ident, value) = cx.expect_name_value(item, item.span(), None)?;

let attrib_to_write = match ident.name {
sym::prefix_nops => {
Expand Down
2 changes: 1 addition & 1 deletion compiler/rustc_attr_parsing/src/attributes/deprecation.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ fn get(
if let Some(value_str) = v.value_as_ident() {
Some(value_str)
} else {
cx.adcx().expected_string_literal(v.value_span, Some(&v.value_as_lit()));
cx.adcx().expected_string_literal(v.value_span, Some(v.value_as_lit()));
None
}
}
Expand Down
39 changes: 19 additions & 20 deletions compiler/rustc_attr_parsing/src/attributes/diagnostic/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ pub(crate) enum Mode {
}

impl Mode {
fn as_str(&self) -> &'static str {
fn as_str(self) -> &'static str {
match self {
Self::RustcOnUnimplemented => "rustc_on_unimplemented",
Self::DiagnosticOnUnimplemented => "diagnostic::on_unimplemented",
Expand All @@ -61,7 +61,7 @@ impl Mode {
}
}

fn expected_options(&self) -> &'static str {
fn expected_options(self) -> &'static str {
const DEFAULT: &str =
"at least one of the `message`, `note` and `label` options are expected";
const DIAGNOSTIC_ON_TYPE_ERROR_EXPECTED_OPTIONS: &str =
Expand All @@ -70,33 +70,33 @@ impl Mode {
Self::RustcOnUnimplemented => {
"see <https://rustc-dev-guide.rust-lang.org/diagnostics.html#rustc_on_unimplemented>"
}
Self::DiagnosticOnUnimplemented => DEFAULT,
Self::DiagnosticOnConst => DEFAULT,
Self::DiagnosticOnMove => DEFAULT,
Self::DiagnosticOnUnknown => DEFAULT,
Self::DiagnosticOnUnmatchedArgs => DEFAULT,
Self::DiagnosticOnUnimplemented
| Self::DiagnosticOnConst
| Self::DiagnosticOnMove
| Self::DiagnosticOnUnknown
| Self::DiagnosticOnUnmatchedArgs => DEFAULT,
Self::DiagnosticOnTypeError => DIAGNOSTIC_ON_TYPE_ERROR_EXPECTED_OPTIONS,
}
}

fn allowed_options(&self) -> &'static str {
fn allowed_options(self) -> &'static str {
const DEFAULT: &str = "only `message`, `note` and `label` are allowed as options";
const DIAGNOSTIC_ON_TYPE_ERROR_ALLOWED_OPTIONS: &str =
"only `note` is allowed as option for `diagnostic::on_type_error`";
match self {
Self::RustcOnUnimplemented => {
"see <https://rustc-dev-guide.rust-lang.org/diagnostics.html#rustc_on_unimplemented>"
}
Self::DiagnosticOnUnimplemented => DEFAULT,
Self::DiagnosticOnConst => DEFAULT,
Self::DiagnosticOnMove => DEFAULT,
Self::DiagnosticOnUnknown => DEFAULT,
Self::DiagnosticOnUnmatchedArgs => DEFAULT,
Self::DiagnosticOnUnimplemented
| Self::DiagnosticOnConst
| Self::DiagnosticOnMove
| Self::DiagnosticOnUnknown
| Self::DiagnosticOnUnmatchedArgs => DEFAULT,
Self::DiagnosticOnTypeError => DIAGNOSTIC_ON_TYPE_ERROR_ALLOWED_OPTIONS,
}
}

fn allowed_format_arguments(&self) -> &'static str {
fn allowed_format_arguments(self) -> &'static str {
match self {
Self::RustcOnUnimplemented => {
"see <https://rustc-dev-guide.rust-lang.org/diagnostics.html#rustc_on_unimplemented> for allowed format arguments"
Expand Down Expand Up @@ -356,12 +356,11 @@ fn parse_directive_items<'p>(
if is_root {
let items = or_malformed!(item.args().as_list()?);
let mut iter = items.mixed();
let filter: &MetaItemOrLitParser = match iter.next() {
Some(c) => c,
None => {
cx.emit_err(InvalidOnClause::Empty { span });
continue;
}
let filter = if let Some(c) = iter.next() {
c
} else {
cx.emit_err(InvalidOnClause::Empty { span });
continue;
};

let filter = parse_filter(filter);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ impl AttributeParser for OnUnmatchedArgsParser {
AttributeStability::Stable, // Unstable, stability checked manually in the parser
|this, cx, args| {
if !cx.features().diagnostic_on_unmatched_args() {
// `UnknownDiagnosticAttribute` is emitted in rustc_resolve/macros.rs
args.ignore_args();
return;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ impl AttributeParser for OpaqueParser {
AllowedTargets::AllowListWarnRest(&[Allow(Target::MacroDef)]);

fn finalize(self, _cx: &FinalizeContext<'_, '_>) -> Option<AttributeKind> {
if let Some(_) = self.attr_span { Some(AttributeKind::Opaque) } else { None }
if self.attr_span.is_some() { Some(AttributeKind::Opaque) } else { None }
}
}

Expand Down
4 changes: 2 additions & 2 deletions compiler/rustc_attr_parsing/src/attributes/inline.rs
Original file line number Diff line number Diff line change
Expand Up @@ -50,13 +50,13 @@ impl SingleAttributeParser for InlineParser {
}
_ => {
cx.adcx().expected_specific_argument(l.span(), &[sym::always, sym::never]);
return None;
None
}
}
}
ArgParser::NameValue(_) => {
cx.adcx().warn_ill_formed_attribute_input(ILL_FORMED_ATTRIBUTE_INPUT);
return None;
None
}
}
}
Expand Down
30 changes: 16 additions & 14 deletions compiler/rustc_attr_parsing/src/attributes/link_attrs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -144,13 +144,13 @@ impl CombineAttributeParser for LinkParser {
let mut verbatim = None;
if let Some((modifiers, span)) = modifiers {
for modifier in modifiers.as_str().split(',') {
let (modifier, value): (Symbol, bool) = match modifier.strip_prefix(&['+', '-']) {
Some(m) => (Symbol::intern(m), modifier.starts_with('+')),
None => {
let (modifier, value): (Symbol, bool) =
if let Some(m) = modifier.strip_prefix(['+', '-']) {
(Symbol::intern(m), modifier.starts_with('+'))
} else {
cx.emit_err(InvalidLinkModifier { span });
continue;
}
};
};

macro report_unstable_modifier($feature: ident) {
if !features.$feature() {
Expand Down Expand Up @@ -196,9 +196,14 @@ impl CombineAttributeParser for LinkParser {
cx.emit_err(WholeArchiveNeedsStatic { span });
}

(sym::as_dash_needed, Some(NativeLibKind::Dylib { as_needed }))
| (sym::as_dash_needed, Some(NativeLibKind::Framework { as_needed }))
| (sym::as_dash_needed, Some(NativeLibKind::RawDylib { as_needed })) => {
(
sym::as_dash_needed,
Some(
NativeLibKind::Dylib { as_needed }
| NativeLibKind::Framework { as_needed }
| NativeLibKind::RawDylib { as_needed },
),
) => {
report_unstable_modifier!(native_link_modifiers_as_needed);
assign_modifier(as_needed)
}
Expand Down Expand Up @@ -642,14 +647,13 @@ pub(crate) struct LinkageParser;
impl SingleAttributeParser for LinkageParser {
const PATH: &[Symbol] = &[sym::linkage];
const ALLOWED_TARGETS: AllowedTargets<'_> = AllowedTargets::AllowList(&[
Allow(Target::Fn),
Allow(Target::Fn), // const fn denied in check_attr
Allow(Target::Method(MethodKind::Inherent)),
Allow(Target::Method(MethodKind::Trait { body: true })),
Allow(Target::Method(MethodKind::TraitImpl)),
Allow(Target::Static),
Allow(Target::ForeignStatic),
Allow(Target::ForeignStatic), // extern static mut denied in check_attr
Allow(Target::ForeignFn),
Warn(Target::Method(MethodKind::Trait { body: false })), // Not inherited
]);
const TEMPLATE: AttributeTemplate = template!(NameValueStr: [
"available_externally",
Expand All @@ -667,9 +671,7 @@ impl SingleAttributeParser for LinkageParser {
fn convert(cx: &mut AcceptContext<'_, '_>, args: &ArgParser) -> Option<AttributeKind> {
let name_value = cx.expect_name_value(args, cx.attr_span, Some(sym::linkage))?;

let Some(value) = cx.expect_string_literal(name_value) else {
return None;
};
let value = cx.expect_string_literal(name_value)?;

// Use the names from src/llvm/docs/LangRef.rst here. Most types are only
// applicable to variable declarations and may not really make sense for
Expand Down
12 changes: 6 additions & 6 deletions compiler/rustc_attr_parsing/src/attributes/macro_attrs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -149,12 +149,12 @@ impl SingleAttributeParser for MacroExportParser {
cx.adcx().warn_ill_formed_attribute_input(INVALID_MACRO_EXPORT_ARGUMENTS);
return None;
};
match l.meta_item_no_args().and_then(|i| i.path().word_sym()) {
Some(sym::local_inner_macros) => true,
_ => {
cx.adcx().warn_ill_formed_attribute_input(INVALID_MACRO_EXPORT_ARGUMENTS);
return None;
}
if l.meta_item_no_args().is_some_and(|m| m.path().word_is(sym::local_inner_macros))
{
true
} else {
cx.adcx().warn_ill_formed_attribute_input(INVALID_MACRO_EXPORT_ARGUMENTS);
return None;
}
}
ArgParser::NameValue(nv) => {
Expand Down
2 changes: 1 addition & 1 deletion compiler/rustc_attr_parsing/src/attributes/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -247,7 +247,7 @@ impl OnDuplicate {
this: unused,
other: used,
name: Symbol::intern(
&P::PATH.into_iter().map(|i| i.to_string()).collect::<Vec<_>>().join(".."),
&P::PATH.iter().map(|i| i.to_string()).collect::<Vec<_>>().join(".."),
),
});
}
Expand Down
4 changes: 2 additions & 2 deletions compiler/rustc_attr_parsing/src/attributes/repr.rs
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ impl CombineAttributeParser for ReprParser {
cx.adcx().expected_identifier(param.span());
continue;
};
reprs.extend(parse_repr(cx, &item).map(|r| (r, param.span())));
reprs.extend(parse_repr(cx, item).map(|r| (r, param.span())));
}
reprs
}
Expand Down Expand Up @@ -144,7 +144,7 @@ fn parse_repr(cx: &mut AcceptContext<'_, '_>, param: &MetaItemParser) -> Option<
Some(sym::simd) => {
if cx.features.is_some_and(|feats| !feats.repr_simd()) {
feature_err(
&cx.sess(),
cx.sess(),
sym::repr_simd,
param.span(),
"SIMD types are experimental and possibly buggy",
Expand Down
22 changes: 11 additions & 11 deletions compiler/rustc_attr_parsing/src/attributes/stability.rs
Original file line number Diff line number Diff line change
Expand Up @@ -309,10 +309,10 @@ pub(crate) fn parse_stability(
let word = param.path().word();
match word.map(|i| i.name) {
Some(sym::feature) => {
insert_value_into_option_or_error(cx, &param, &mut feature, word.unwrap())?
insert_value_into_option_or_error(cx, param, &mut feature, word.unwrap())?
}
Some(sym::since) => {
insert_value_into_option_or_error(cx, &param, &mut since, word.unwrap())?
insert_value_into_option_or_error(cx, param, &mut since, word.unwrap())?
}
_ => {
cx.adcx().expected_specific_argument(param_span, &[sym::feature, sym::since]);
Expand Down Expand Up @@ -376,13 +376,13 @@ pub(crate) fn parse_unstability(
let word = param.path().word();
match word.map(|i| i.name) {
Some(sym::feature) => {
insert_value_into_option_or_error(cx, &param, &mut feature, word.unwrap())?
insert_value_into_option_or_error(cx, param, &mut feature, word.unwrap())?
}
Some(sym::reason) => {
insert_value_into_option_or_error(cx, &param, &mut reason, word.unwrap())?
insert_value_into_option_or_error(cx, param, &mut reason, word.unwrap())?
}
Some(sym::issue) => {
insert_value_into_option_or_error(cx, &param, &mut issue, word.unwrap())?;
insert_value_into_option_or_error(cx, param, &mut issue, word.unwrap())?;

// These unwraps are safe because `insert_value_into_option_or_error` ensures the meta item
// is a name/value pair string literal.
Expand All @@ -406,10 +406,10 @@ pub(crate) fn parse_unstability(
};
}
Some(sym::implied_by) => {
insert_value_into_option_or_error(cx, &param, &mut implied_by, word.unwrap())?
insert_value_into_option_or_error(cx, param, &mut implied_by, word.unwrap())?
}
Some(sym::old_name) => {
insert_value_into_option_or_error(cx, &param, &mut old_name, word.unwrap())?
insert_value_into_option_or_error(cx, param, &mut old_name, word.unwrap())?
}
_ => {
cx.adcx().expected_specific_argument(
Expand Down Expand Up @@ -493,10 +493,10 @@ impl CombineAttributeParser for UnstableRemovedParser {
return None;
};
match word.name {
sym::feature => insert_value_into_option_or_error(cx, &param, &mut feature, word)?,
sym::since => insert_value_into_option_or_error(cx, &param, &mut since, word)?,
sym::reason => insert_value_into_option_or_error(cx, &param, &mut reason, word)?,
sym::link => insert_value_into_option_or_error(cx, &param, &mut link, word)?,
sym::feature => insert_value_into_option_or_error(cx, param, &mut feature, word)?,
sym::since => insert_value_into_option_or_error(cx, param, &mut since, word)?,
sym::reason => insert_value_into_option_or_error(cx, param, &mut reason, word)?,
sym::link => insert_value_into_option_or_error(cx, param, &mut link, word)?,
_ => {
cx.adcx().expected_specific_argument(
param.span(),
Expand Down
Loading
Loading