Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
5f0a64e
Use attribute parser for `#[non_exhaustive]` attribute check
obeis Aug 21, 2026
a551126
The fuchsia team maintains `riscv64gc-unknown-fuchsia`
erickt Sep 8, 2026
15d0810
split `macroless_generic_const_args` in two
BoxyUwU Sep 9, 2026
ad89677
Skip linting unused braces for FunctionArg and MethodArg context for …
chenyukang Mar 25, 2026
69afc99
Refactor `HygieneEncodeContext`
aerooneqq Sep 11, 2026
8e35cfe
Update platform support docs for `i686-pc-windows-msvc`
jieyouxu Sep 10, 2026
c5eb55c
Fix target spec metadata for `i686-pc-windows-msvc`
jieyouxu Sep 10, 2026
7125897
Update platform support page for `windows-msvc`
jieyouxu Sep 10, 2026
04547c1
Update VS 2022 => VS 2026
jieyouxu Sep 11, 2026
ff820f4
rename resolver folders and their access functions
jdonszelmann Aug 11, 2026
2499f6f
rename opportunistic_resolve to shallow_resolve
jdonszelmann Aug 11, 2026
b202d6f
better document various functions around resolve
jdonszelmann Sep 1, 2026
670f799
make `deeply_resolve` a method on InferCtxtLike
jdonszelmann Sep 1, 2026
532134e
rename fully_resolve to deeply_resolve_and_assert_fully_resolved
jdonszelmann Sep 1, 2026
4b29501
Rollup merge of #162126 - jdonszelmann:rename-resolving, r=lcnr,BoxyUwU
JonathanBrouwer Sep 11, 2026
f398dfc
Rollup merge of #162520 - aerooneqq:hygiene-perf, r=petrochenkov
JonathanBrouwer Sep 11, 2026
7a8219f
Rollup merge of #154373 - chenyukang:yukang-fix-154247-unused-braces-…
JonathanBrouwer Sep 11, 2026
9176131
Rollup merge of #161482 - obeis:check-non-exhaustive, r=JonathanBrouwer
JonathanBrouwer Sep 11, 2026
66d60f6
Rollup merge of #162541 - BoxyUwU:twos_a_crowd, r=khyperia
JonathanBrouwer Sep 11, 2026
cfe03fa
Rollup merge of #162549 - erickt:riscv64, r=JonathanBrouwer
JonathanBrouwer Sep 11, 2026
3fe9a35
Rollup merge of #162577 - jieyouxu:i686-msvc-no-host-tools, r=khyperia
JonathanBrouwer Sep 11, 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
2 changes: 1 addition & 1 deletion compiler/rustc_ast_lowering/src/expr.rs
Original file line number Diff line number Diff line change
Expand Up @@ -230,7 +230,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
let old_attrs =
self.curr_owner.attrs.get(&ex.hir_id.local_id).copied().unwrap_or(&[]);
let new_attrs = self
.lower_attrs_vec(&e.attrs, e.span, ex.hir_id, Target::from_expr(e))
.lower_attrs_vec(&e.attrs, e.span, ex.hir_id, Target::from_expr(e), None)
.into_iter()
.chain(old_attrs.iter().cloned());
let new_attrs = &*self.arena.alloc_from_iter(new_attrs);
Expand Down
1 change: 1 addition & 0 deletions compiler/rustc_ast_lowering/src/item.rs
Original file line number Diff line number Diff line change
Expand Up @@ -215,6 +215,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
&i.attrs,
i.span,
Target::from_ast_item(i),
Some(i),
&extra_hir_attributes,
);

Expand Down
9 changes: 6 additions & 3 deletions compiler/rustc_ast_lowering/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1182,7 +1182,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
target_span: Span,
target: Target,
) -> &'hir [hir::Attribute] {
self.lower_attrs_with_extra(id, attrs, target_span, target, &[])
self.lower_attrs_with_extra(id, attrs, target_span, target, None, &[])
}

fn lower_attrs_with_extra(
Expand All @@ -1191,13 +1191,14 @@ impl<'hir> LoweringContext<'_, 'hir> {
attrs: &[Attribute],
target_span: Span,
target: Target,
target_item: Option<&ast::Item>,
extra_hir_attributes: &[hir::Attribute],
) -> &'hir [hir::Attribute] {
if attrs.is_empty() && extra_hir_attributes.is_empty() {
&[]
} else {
let mut lowered_attrs =
self.lower_attrs_vec(attrs, self.lower_span(target_span), id, target);
self.lower_attrs_vec(attrs, self.lower_span(target_span), id, target, target_item);
lowered_attrs.extend(extra_hir_attributes.iter().cloned());

assert_eq!(id.owner, self.curr_owner.owner_id);
Expand All @@ -1224,12 +1225,14 @@ impl<'hir> LoweringContext<'_, 'hir> {
target_span: Span,
target_hir_id: HirId,
target: Target,
target_item: Option<&ast::Item>,
) -> Vec<hir::Attribute> {
let l = self.span_lowerer();
self.attribute_parser.parse_attribute_list(
attrs,
target_span,
target,
target_item,
|s| l.lower(s),
|lint_id, span, kind| {
self.curr_owner.delayed_lints.push(DelayedLint {
Expand Down Expand Up @@ -2685,7 +2688,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
match (body, kind) {
(body, ConstItemKind::Body) => {
let is_direct = |body| {
if self.tcx.features().macroless_generic_const_args() {
if self.tcx.features().macroless_const_item_generic_const_args() {
self.can_lower_expr_to_const_arg_direct(
body,
DirectConstArgContext::MacrolessMinGenericConstArgs,
Expand Down
28 changes: 22 additions & 6 deletions compiler/rustc_attr_parsing/src/attributes/non_exhaustive.rs
Original file line number Diff line number Diff line change
@@ -1,11 +1,8 @@
use rustc_attr_ir::AttributeKind;
use rustc_attr_ir::target::Target;
use rustc_ast::{ItemKind, VariantData};
use rustc_feature::AttributeStability;
use rustc_span::{Span, Symbol, sym};

use crate::attributes::{NoArgsAttributeParser, OnDuplicate};
use crate::target_checking::AllowedTargets;
use crate::target_checking::Policy::{Allow, Warn};
use super::prelude::*;
use crate::diagnostics::NonExhaustiveWithDefaultFieldValues;

pub(crate) struct NonExhaustiveParser;

Expand All @@ -23,4 +20,23 @@ impl NoArgsAttributeParser for NonExhaustiveParser {
]);
const STABILITY: AttributeStability = AttributeStability::Stable;
const CREATE: fn(Span) -> AttributeKind = AttributeKind::NonExhaustive;

fn finalize_check(cx: &FinalizeCheckContext<'_, '_>, attr_span: Span) {
if cx.target != Target::Struct {
return;
}

let item = cx.target_item.expect("missing AST target item for Target::Struct");
let ItemKind::Struct(_, _, data) = &item.kind else {
panic!("expected struct AST target item for Target::Struct");
};
if let VariantData::Struct { fields, .. } = data
&& fields.iter().any(|f| f.default_value().is_some())
{
cx.emit_err(NonExhaustiveWithDefaultFieldValues {
attr_span,
defn_span: cx.target_span,
});
}
}
}
4 changes: 4 additions & 0 deletions compiler/rustc_attr_parsing/src/context.rs
Original file line number Diff line number Diff line change
Expand Up @@ -833,6 +833,10 @@ pub(crate) struct FinalizeCheckContext<'p, 'sess> {
///
/// Unlike [`all_attrs`](Self::all_attrs), this contains the fully parsed attributes.
pub(crate) parsed_attrs: &'p [Attribute],

/// The AST item these attributes were applied to, when the target is an item.
/// Used by `finalize_check` to inspect item structure that is not encoded in [`Target`].
pub(crate) target_item: Option<&'p rustc_ast::ast::Item>,
}

impl<'p, 'sess: 'p> Deref for FinalizeCheckContext<'p, 'sess> {
Expand Down
9 changes: 9 additions & 0 deletions compiler/rustc_attr_parsing/src/diagnostics.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1169,6 +1169,15 @@ pub(crate) struct DeprecatedAnnotationHasNoEffect {
pub span: Span,
}

#[derive(Diagnostic)]
#[diag("`#[non_exhaustive]` can't be used to annotate items with default field values")]
pub(crate) struct NonExhaustiveWithDefaultFieldValues {
#[primary_span]
pub attr_span: Span,
#[label("this struct has default field values")]
pub defn_span: Span,
}

#[derive(Diagnostic)]
#[diag("expected single version literal")]
pub(crate) struct ExpectedSingleVersionLiteral {
Expand Down
3 changes: 3 additions & 0 deletions compiler/rustc_attr_parsing/src/interface.rs
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,7 @@ impl<'sess> AttributeParser<'sess> {
attrs,
target_span,
target,
None,
std::convert::identity,
|lint_id, span, kind| {
sess.psess.dyn_buffer_lint_sess(lint_id.lint, span, target_node_id, kind.0)
Expand Down Expand Up @@ -315,6 +316,7 @@ impl<'sess> AttributeParser<'sess> {
attrs: &[ast::Attribute],
target_span: Span,
target: Target,
target_item: Option<&ast::Item>,
lower_span: impl Copy + Fn(Span) -> Span,
mut emit_lint: impl FnMut(LintId, MultiSpan, EmitAttribute),
) -> Vec<Attribute> {
Expand Down Expand Up @@ -521,6 +523,7 @@ impl<'sess> AttributeParser<'sess> {
},
all_attrs: &attr_paths,
parsed_attrs: &attributes,
target_item,
},
attr_span,
);
Expand Down
2 changes: 1 addition & 1 deletion compiler/rustc_borrowck/src/diagnostics/region_errors.rs
Original file line number Diff line number Diff line change
Expand Up @@ -954,7 +954,7 @@ impl<'diag, 'tcx> MirBorrowckCtxt<'_, 'diag, 'tcx> {
tcx,
self.infcx.typing_env(self.infcx.param_env),
fn_did,
self.infcx.resolve_vars_if_possible(args.no_bound_vars().unwrap()),
self.infcx.deeply_resolve_ignoring_regions(args.no_bound_vars().unwrap()),
) else {
return;
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ pub(crate) fn clone_and_resolve_opaque_types<'tcx>(
let opaque_types = opaque_types
.into_iter()
.map(|entry| {
fold_regions(infcx.tcx, infcx.resolve_vars_if_possible(entry), |r, _| {
fold_regions(infcx.tcx, infcx.deeply_resolve_ignoring_regions(entry), |r, _| {
let vid = if let ty::RePlaceholder(placeholder) = r.kind() {
constraints.placeholder_region(infcx, placeholder).as_var()
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -157,7 +157,7 @@ impl<'a, 'tcx> ConstraintConversion<'a, 'tcx> {

GenericArgKind::Type(mut t1) => {
// Scraped constraints may have had inference vars.
t1 = self.infcx.resolve_vars_if_possible(t1);
t1 = self.infcx.deeply_resolve_ignoring_regions(t1);

let implicit_region_bound =
ty::Region::new_var(tcx, universal_regions.implicit_region_bound());
Expand Down
2 changes: 1 addition & 1 deletion compiler/rustc_borrowck/src/type_check/relate_tys.rs
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,7 @@ impl<'a, 'b, 'tcx> NllTypeRelating<'a, 'b, 'tcx> {
ty,
)?;
let new_var =
infcx.resolve_vars_if_possible(Ty::new_infer(infcx.tcx, ty::TyVar(ty_vid)));
infcx.deeply_resolve_ignoring_regions(Ty::new_infer(infcx.tcx, ty::TyVar(ty_vid)));

// Any regions in this new type must be live everywhere, so we mark them as such.
// (It may be that it only needs to be live where the opaque type itself is - which
Expand Down
4 changes: 4 additions & 0 deletions compiler/rustc_feature/src/unstable.rs
Original file line number Diff line number Diff line change
Expand Up @@ -605,6 +605,9 @@ declare_features! (
(unstable, macro_metavar_expr, "1.61.0", Some(83527)),
/// Provides a way to concatenate identifiers using metavariable expressions.
(unstable, macro_metavar_expr_concat, "1.81.0", Some(124225)),
/// Allows directly represented generic_const_args as the rhs of const items without the
/// `direct_const_arg!` macro.
(incomplete, macroless_const_item_generic_const_args, "CURRENT_RUSTC_VERSION", Some(162540)),
/// Allows directly represented generic_const_args without the `direct_const_arg!` macro.
(incomplete, macroless_generic_const_args, "1.99.0", Some(159006)),
/// Allows `#[marker]` on certain traits allowing overlapping implementations.
Expand Down Expand Up @@ -856,5 +859,6 @@ pub const INCOMPATIBLE_FEATURES: &[(Symbol, Symbol)] = &[
pub const DEPENDENT_FEATURES: &[(Symbol, &[Symbol])] = &[
(sym::generic_const_args, &[sym::min_generic_const_args]),
(sym::macroless_generic_const_args, &[sym::min_generic_const_args]),
(sym::macroless_const_item_generic_const_args, &[sym::min_generic_const_args]),
(sym::unsized_const_params, &[sym::adt_const_params]),
];
6 changes: 3 additions & 3 deletions compiler/rustc_hir_analysis/src/autoderef.rs
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ impl<'a, 'tcx> Iterator for Autoderef<'a, 'tcx> {
// and Deref, and this has benefits for const and the emitted MIR.
let (kind, new_ty) =
if let Some(ty) = self.state.cur_ty.builtin_deref(self.include_raw_pointers) {
debug_assert_eq!(ty, self.infcx.resolve_vars_if_possible(ty));
debug_assert_eq!(ty, self.infcx.deeply_resolve_ignoring_regions(ty));
(AutoderefKind::Builtin, ty)
} else if let Some(ty) = self.overloaded_deref_ty(self.state.cur_ty) {
// The overloaded deref check already normalizes the pointee type.
Expand Down Expand Up @@ -123,7 +123,7 @@ impl<'a, 'tcx> Autoderef<'a, 'tcx> {
param_env,
state: AutoderefSnapshot {
steps: vec![],
cur_ty: infcx.resolve_vars_if_possible(base_ty),
cur_ty: infcx.deeply_resolve_ignoring_regions(base_ty),
obligations: PredicateObligations::new(),
at_start: true,
reached_recursion_limit: false,
Expand Down Expand Up @@ -171,7 +171,7 @@ impl<'a, 'tcx> Autoderef<'a, 'tcx> {
debug!("overloaded_deref_ty({:?}) = ({:?}, {:?})", ty, normalized_ty, obligations);
self.state.obligations.extend(obligations);

Some(self.infcx.resolve_vars_if_possible(normalized_ty))
Some(self.infcx.deeply_resolve_ignoring_regions(normalized_ty))
}

#[instrument(level = "debug", skip(self), ret)]
Expand Down
8 changes: 4 additions & 4 deletions compiler/rustc_hir_analysis/src/check/check.rs
Original file line number Diff line number Diff line change
Expand Up @@ -427,8 +427,8 @@ fn check_opaque_meets_bounds<'tcx>(
} else {
// Check that any hidden types found during wf checking match the hidden types that `type_of` sees.
for (mut key, mut ty) in infcx.take_opaque_types() {
ty.ty = infcx.resolve_vars_if_possible(ty.ty);
key = infcx.resolve_vars_if_possible(key);
ty.ty = infcx.deeply_resolve_ignoring_regions(ty.ty);
key = infcx.deeply_resolve_ignoring_regions(key);
sanity_check_found_hidden_type(tcx, key, ty)?;
}
Ok(())
Expand Down Expand Up @@ -2314,8 +2314,8 @@ pub(super) fn check_coroutine_obligations(
// Check that any hidden types found when checking these stalled coroutine obligations
// are valid.
for (key, ty) in infcx.take_opaque_types() {
let hidden_type = infcx.resolve_vars_if_possible(ty);
let key = infcx.resolve_vars_if_possible(key);
let hidden_type = infcx.deeply_resolve_ignoring_regions(ty);
let key = infcx.deeply_resolve_ignoring_regions(key);
sanity_check_found_hidden_type(tcx, key, hidden_type)?;
}
} else {
Expand Down
10 changes: 5 additions & 5 deletions compiler/rustc_hir_analysis/src/check/compare_impl_item.rs
Original file line number Diff line number Diff line change
Expand Up @@ -584,9 +584,9 @@ pub(super) fn collect_return_position_impl_trait_in_trait_tys<'tcx>(
.iter()
.map(|(_, &(ty, _))| {
assert!(
infcx.resolve_vars_if_possible(ty) == ty && ty.is_ty_var(),
infcx.deeply_resolve_ignoring_regions(ty) == ty && ty.is_ty_var(),
"{ty:?} should not have been constrained via normalization",
ty = infcx.resolve_vars_if_possible(ty)
ty = infcx.deeply_resolve_ignoring_regions(ty)
);
idx += 1;
(
Expand Down Expand Up @@ -708,7 +708,7 @@ pub(super) fn collect_return_position_impl_trait_in_trait_tys<'tcx>(

let mut remapped_types = DefIdMap::default();
for (def_id, (ty, args)) in collected_types {
match infcx.fully_resolve(ty) {
match infcx.deeply_resolve_via_region_graph(ty) {
Ok(ty) => {
// `ty` contains free regions that we created earlier while liberating the
// trait fn signature. However, projection normalization expects `ty` to
Expand Down Expand Up @@ -1296,7 +1296,7 @@ fn check_region_late_boundedness<'tcx>(
.inner
.borrow_mut()
.unwrap_region_constraints()
.opportunistic_resolve_var(tcx, vid)
.shallow_resolve_region_var(tcx, vid)
&& let ty::ReLateParam(ty::LateParamRegion {
kind: ty::LateParamRegionKind::Named(trait_param_def_id),
..
Expand All @@ -1321,7 +1321,7 @@ fn check_region_late_boundedness<'tcx>(
.inner
.borrow_mut()
.unwrap_region_constraints()
.opportunistic_resolve_var(tcx, vid)
.shallow_resolve_region_var(tcx, vid)
&& let ty::ReLateParam(ty::LateParamRegion {
kind: ty::LateParamRegionKind::Named(impl_param_def_id),
..
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -189,7 +189,9 @@ pub(crate) fn check_refining_return_position_impl_trait_in_trait<'tcx>(
return;
}
// Resolve any lifetime variables that may have been introduced during normalization.
let Ok((trait_bounds, impl_bounds)) = infcx.fully_resolve((trait_bounds, impl_bounds)) else {
let Ok((trait_bounds, impl_bounds)) =
infcx.deeply_resolve_via_region_graph((trait_bounds, impl_bounds))
else {
// If resolution didn't fully complete, we cannot continue checking RPITIT refinement, and
// delay a bug as the original code contains load-bearing errors.
tcx.dcx().delayed_bug("encountered errors when checking RPITIT refinement (resolution)");
Expand Down
4 changes: 2 additions & 2 deletions compiler/rustc_hir_analysis/src/coherence/orphan.rs
Original file line number Diff line number Diff line change
Expand Up @@ -333,7 +333,7 @@ fn orphan_check<'tcx>(

let ocx = traits::ObligationCtxt::new(&infcx);
let ty = ocx.normalize(&cause, ty::ParamEnv::empty(), Unnormalized::new_wip(user_ty));
let ty = infcx.resolve_vars_if_possible(ty);
let ty = infcx.deeply_resolve_ignoring_regions(ty);
let errors = ocx.try_evaluate_obligations();
if !errors.no_errors() {
return Ok(user_ty);
Expand Down Expand Up @@ -377,7 +377,7 @@ fn orphan_check<'tcx>(
id_arg,
);
}
infcx.resolve_vars_if_possible(tys)
infcx.deeply_resolve_ignoring_regions(tys)
});
OrphanCheckErr::NonLocalInputType(tys)
}
Expand Down
4 changes: 2 additions & 2 deletions compiler/rustc_hir_analysis/src/collect.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1539,11 +1539,11 @@ pub fn suggest_impl_trait<'tcx>(
);
// FIXME(compiler-errors): We may benefit from resolving regions here.
if ocx.try_evaluate_obligations().no_errors()
&& let item_ty = infcx.resolve_vars_if_possible(item_ty)
&& let item_ty = infcx.deeply_resolve_ignoring_regions(item_ty)
&& let Some(item_ty) = item_ty.make_suggestable(infcx.tcx, false, None)
&& let Some(sugg) = formatter(
infcx.tcx,
infcx.resolve_vars_if_possible(args),
infcx.deeply_resolve_ignoring_regions(args),
trait_def_id,
assoc_item_def_id,
item_ty,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -191,7 +191,7 @@ fn get_impl_args(

let assumed_wf_types = ocx.assumed_wf_types_and_report_errors(param_env, impl1_def_id)?;
ocx.resolve_regions_and_report_errors(impl1_def_id, param_env, assumed_wf_types)?;
let Ok(impl2_args) = infcx.fully_resolve(impl2_args) else {
let Ok(impl2_args) = infcx.deeply_resolve_via_region_graph(impl2_args) else {
let span = tcx.def_span(impl1_def_id);
let guar = tcx.dcx().emit_err(GenericArgsOnOverriddenImpl { span });
return Err(guar);
Expand Down
11 changes: 6 additions & 5 deletions compiler/rustc_hir_typeck/src/callee.rs
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
_ => self.check_expr(callee_expr),
};

let expr_ty = self.resolve_vars_with_obligations(original_callee_ty);
let expr_ty = self.deeply_resolve_ignoring_regions_with_obligations(original_callee_ty);

let mut autoderef = self.autoderef(callee_expr.span, expr_ty);
let mut result = None;
Expand Down Expand Up @@ -237,7 +237,8 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
arg_exprs: &'tcx [hir::Expr<'tcx>],
autoderef: &Autoderef<'a, 'tcx>,
) -> Option<CallStep<'tcx>> {
let adjusted_ty = self.resolve_vars_with_obligations(autoderef.final_ty());
let adjusted_ty =
self.deeply_resolve_ignoring_regions_with_obligations(autoderef.final_ty());

// If the callee is a function pointer or a closure, then we're all set.
match *adjusted_ty.kind() {
Expand Down Expand Up @@ -736,7 +737,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
return do_check();
}

resolved_inputs = self.resolve_vars_if_possible(formal_input_tys.to_vec());
resolved_inputs = self.deeply_resolve_ignoring_regions(formal_input_tys.to_vec());
}

// Fool typechecker by placing an adjusted type of the first arg to avoid errors.
Expand Down Expand Up @@ -873,7 +874,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
(rest_span, format!(").{}({rest_snippet}", segment.ident)),
]
};
let self_ty = self.resolve_vars_if_possible(pick.callee.sig.inputs()[0]);
let self_ty = self.deeply_resolve_ignoring_regions(pick.callee.sig.inputs()[0]);
diag.multipart_suggestion(
format!(
"use the `.` operator to call the method `{}{}` on `{self_ty}`",
Expand Down Expand Up @@ -925,7 +926,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
Some((removal_span, descr, rustc_hir_pretty::qpath_to_string(self, qpath)));
}

let callee_ty = self.resolve_vars_if_possible(callee_ty);
let callee_ty = self.deeply_resolve_ignoring_regions(callee_ty);
let mut path = None;
let mut err = self.dcx().create_err(diagnostics::InvalidCallee {
span: callee_expr.span,
Expand Down
Loading
Loading