Avoid going through the happy path in case of non-fn builtin calls
This commit is contained in:
parent
f1ef038ae4
commit
1c5b53be1c
1 changed files with 5 additions and 17 deletions
|
@ -4,7 +4,7 @@ use super::{Expectation, FnCtxt, TupleArgumentsFlag};
|
||||||
|
|
||||||
use crate::type_error_struct;
|
use crate::type_error_struct;
|
||||||
use rustc_ast::util::parser::PREC_POSTFIX;
|
use rustc_ast::util::parser::PREC_POSTFIX;
|
||||||
use rustc_errors::{struct_span_err, Applicability, Diagnostic, StashKey};
|
use rustc_errors::{struct_span_err, Applicability, Diagnostic, ErrorGuaranteed, StashKey};
|
||||||
use rustc_hir as hir;
|
use rustc_hir as hir;
|
||||||
use rustc_hir::def::{self, CtorKind, Namespace, Res};
|
use rustc_hir::def::{self, CtorKind, Namespace, Res};
|
||||||
use rustc_hir::def_id::DefId;
|
use rustc_hir::def_id::DefId;
|
||||||
|
@ -424,21 +424,9 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
self.report_invalid_callee(call_expr, callee_expr, callee_ty, arg_exprs);
|
let err = self.report_invalid_callee(call_expr, callee_expr, callee_ty, arg_exprs);
|
||||||
|
|
||||||
// This is the "default" function signature, used in case of error.
|
return self.tcx.ty_error_with_guaranteed(err);
|
||||||
// In that case, we check each argument against "error" in order to
|
|
||||||
// set up all the node type bindings.
|
|
||||||
(
|
|
||||||
ty::Binder::dummy(self.tcx.mk_fn_sig(
|
|
||||||
self.err_args(arg_exprs.len()).into_iter(),
|
|
||||||
self.tcx.ty_error(),
|
|
||||||
false,
|
|
||||||
hir::Unsafety::Normal,
|
|
||||||
abi::Abi::Rust,
|
|
||||||
)),
|
|
||||||
None,
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -591,7 +579,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
||||||
callee_expr: &'tcx hir::Expr<'tcx>,
|
callee_expr: &'tcx hir::Expr<'tcx>,
|
||||||
callee_ty: Ty<'tcx>,
|
callee_ty: Ty<'tcx>,
|
||||||
arg_exprs: &'tcx [hir::Expr<'tcx>],
|
arg_exprs: &'tcx [hir::Expr<'tcx>],
|
||||||
) {
|
) -> ErrorGuaranteed {
|
||||||
let mut unit_variant = None;
|
let mut unit_variant = None;
|
||||||
if let hir::ExprKind::Path(qpath) = &callee_expr.kind
|
if let hir::ExprKind::Path(qpath) = &callee_expr.kind
|
||||||
&& let Res::Def(def::DefKind::Ctor(kind, CtorKind::Const), _)
|
&& let Res::Def(def::DefKind::Ctor(kind, CtorKind::Const), _)
|
||||||
|
@ -720,7 +708,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
||||||
err.span_label(span, label);
|
err.span_label(span, label);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
err.emit();
|
err.emit()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn confirm_deferred_closure_call(
|
fn confirm_deferred_closure_call(
|
||||||
|
|
Loading…
Add table
Reference in a new issue