(s, None, ty.prefix_string(), None, None)
}
GenericArgKind::Const(ct) => {
- if let ty::ConstKind::Infer(InferConst::Var(vid)) = ct.val {
+ let span = if let ty::ConstKind::Infer(InferConst::Var(vid)) = ct.val {
let origin =
self.inner.borrow_mut().const_unification_table().probe_value(vid).origin;
if let ConstVariableOriginKind::ConstParameterDefinition(name, def_id) =
parent_descr,
);
}
- }
+
+ Some(origin.span).filter(|s| !s.is_dummy())
+ } else {
+ bug!("unexpect const: {:?}", ct);
+ };
let mut s = String::new();
- let mut printer = ty::print::FmtPrinter::new(self.tcx, &mut s, Namespace::TypeNS);
+ let mut printer = ty::print::FmtPrinter::new(self.tcx, &mut s, Namespace::ValueNS);
if let Some(highlight) = highlight {
printer.region_highlight_mode = highlight;
}
let _ = ct.print(printer);
- (s, None, "value".into(), None, None)
+ (s, span, "the constant".into(), None, None)
}
GenericArgKind::Lifetime(_) => bug!("unexpected lifetime"),
}
"".to_string()
};
- let preposition = if "value" == kind_str { "of" } else { "for" };
+ let preposition = if "the value" == kind_str { "of" } else { "for" };
// For example: "cannot infer type for type parameter `T`"
format!(
"cannot infer {} {} {} `{}`{}",
--> $DIR/cannot-infer-const-args.rs:12:5
|
LL | foo();
- | ^^^ cannot infer the value for const parameter `X` declared on the function `foo`
+ | ^^^ cannot infer the value of const parameter `X` declared on the function `foo`
error: aborting due to previous error
--> $DIR/cannot-infer-const-args.rs:12:5
|
LL | foo();
- | ^^^ cannot infer the value for const parameter `X` declared on the function `foo`
+ | ^^^ cannot infer the value of const parameter `X` declared on the function `foo`
error: aborting due to previous error
--- /dev/null
+#![feature(min_const_generics)]
+
+use std::convert::TryInto;
+
+fn take_array_from_mut<T, const N: usize>(data: &mut [T], start: usize) -> &mut [T; N] {
+ (&mut data[start .. start + N]).try_into().unwrap()
+}
+
+fn main() {
+ let mut arr = [0, 1, 2, 3, 4, 5, 6, 7, 8];
+
+ for i in 1 .. 4 {
+ println!("{:?}", take_array_from_mut(&mut arr, i));
+ //~^ ERROR type annotations needed
+ }
+}
--- /dev/null
+error[E0282]: type annotations needed
+ --> $DIR/issue-77092.rs:13:26
+ |
+LL | println!("{:?}", take_array_from_mut(&mut arr, i));
+ | ^^^^^^^^^^^^^^^^^^^ cannot infer the value of the constant `{_: usize}`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0282`.
--> $DIR/method-chain.rs:21:33
|
LL | Foo.bar().bar().bar().bar().baz();
- | ^^^ cannot infer the value for const parameter `N` declared on the associated function `baz`
+ | ^^^ cannot infer the value of const parameter `N` declared on the associated function `baz`
error: aborting due to previous error
--> $DIR/method-chain.rs:21:33
|
LL | Foo.bar().bar().bar().bar().baz();
- | ^^^ cannot infer the value for const parameter `N` declared on the associated function `baz`
+ | ^^^ cannot infer the value of const parameter `N` declared on the associated function `baz`
error: aborting due to previous error
--> $DIR/uninferred-consts.rs:14:9
|
LL | Foo.foo();
- | ^^^ cannot infer the value for const parameter `N` declared on the associated function `foo`
+ | ^^^ cannot infer the value of const parameter `N` declared on the associated function `foo`
error: aborting due to previous error
--> $DIR/uninferred-consts.rs:14:9
|
LL | Foo.foo();
- | ^^^ cannot infer the value for const parameter `N` declared on the associated function `foo`
+ | ^^^ cannot infer the value of const parameter `N` declared on the associated function `foo`
error: aborting due to previous error