Rollup merge of #105201 - cjgillot:issue-105040, r=compiler-errors
Do not call fn_sig on non-functions. Fixes https://github.com/rust-lang/rust/issues/105040 Fixes https://github.com/rust-lang/rust/issues/89271
This commit is contained in:
commit
f91fa512d1
3 changed files with 40 additions and 0 deletions
|
@ -1918,6 +1918,14 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
||||||
receiver: Option<&'tcx hir::Expr<'tcx>>,
|
receiver: Option<&'tcx hir::Expr<'tcx>>,
|
||||||
args: &'tcx [hir::Expr<'tcx>],
|
args: &'tcx [hir::Expr<'tcx>],
|
||||||
) -> bool {
|
) -> bool {
|
||||||
|
// Do not call `fn_sig` on non-functions.
|
||||||
|
if !matches!(
|
||||||
|
self.tcx.def_kind(def_id),
|
||||||
|
DefKind::Fn | DefKind::AssocFn | DefKind::Variant | DefKind::Ctor(..)
|
||||||
|
) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
let sig = self.tcx.fn_sig(def_id).skip_binder();
|
let sig = self.tcx.fn_sig(def_id).skip_binder();
|
||||||
let args_referencing_param: Vec<_> = sig
|
let args_referencing_param: Vec<_> = sig
|
||||||
.inputs()
|
.inputs()
|
||||||
|
|
18
src/test/ui/suggestions/assoc-const-as-fn.rs
Normal file
18
src/test/ui/suggestions/assoc-const-as-fn.rs
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
unsafe fn pointer(v: usize, w: u32) {}
|
||||||
|
|
||||||
|
pub trait UniformScalar {}
|
||||||
|
impl UniformScalar for u32 {}
|
||||||
|
|
||||||
|
pub trait GlUniformScalar: UniformScalar {
|
||||||
|
const FACTORY: unsafe fn(usize, Self) -> ();
|
||||||
|
}
|
||||||
|
impl GlUniformScalar for u32 {
|
||||||
|
const FACTORY: unsafe fn(usize, Self) -> () = pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn foo<T: UniformScalar>(value: T) {
|
||||||
|
<T as GlUniformScalar>::FACTORY(1, value);
|
||||||
|
//~^ ERROR the trait bound `T: GlUniformScalar` is not satisfied
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {}
|
14
src/test/ui/suggestions/assoc-const-as-fn.stderr
Normal file
14
src/test/ui/suggestions/assoc-const-as-fn.stderr
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
error[E0277]: the trait bound `T: GlUniformScalar` is not satisfied
|
||||||
|
--> $DIR/assoc-const-as-fn.rs:14:5
|
||||||
|
|
|
||||||
|
LL | <T as GlUniformScalar>::FACTORY(1, value);
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `GlUniformScalar` is not implemented for `T`
|
||||||
|
|
|
||||||
|
help: consider further restricting this bound
|
||||||
|
|
|
||||||
|
LL | pub fn foo<T: UniformScalar + GlUniformScalar>(value: T) {
|
||||||
|
| +++++++++++++++++
|
||||||
|
|
||||||
|
error: aborting due to previous error
|
||||||
|
|
||||||
|
For more information about this error, try `rustc --explain E0277`.
|
Loading…
Add table
Add a link
Reference in a new issue