TyTy::TyWithLocation (concrete),
function.get_locus ());
- rust_assert (resolved->is<TyTy::FnType> ());
+ if (!resolved->is<TyTy::FnType> ())
+ return;
+
fntype = resolved->as<TyTy::FnType> ();
}
--- /dev/null
+#![feature(no_core, intrinsics, staged_api, lang_items)]
+#![no_core]
+
+#[lang = "sized"]
+pub trait Sized {}
+
+trait Number {
+ fn from<T>(n: T) -> Self;
+}
+
+trait NumConv {}
+
+fn main() {
+ let _: f64 = Number::from(0.0f64); // { dg-error {bounds not satisfied for f64 .Number. is not satisfied \[E0277\]} }
+}
--- /dev/null
+#![feature(no_core, intrinsics, staged_api, lang_items)]
+#![no_core]
+
+#[lang = "sized"]
+pub trait Sized {}
+
+pub trait Number: NumConv {
+ fn from<T: Number>(n: T) -> Self;
+}
+
+trait NumberExt: Number {
+ fn to_double(&self) -> f64 {
+ self.to_float() * 2.0
+ }
+}
+
+impl<T: Number> NumberExt for T {}
+
+impl Number for f64 {
+ fn from<T: Number + NewTrait>(n: T) -> f64 { // { dg-error {bounds not satisfied for f64 .NewTrait. is not satisfied \[E0277\]} }
+ n.to_float()
+ }
+}
+
+pub trait NumConv {
+ fn to_float(&self) -> f64;
+}
+
+impl NumConv for f64 {
+ fn to_float(&self) -> f64 {
+ *self
+ }
+}
+
+pub fn main() {
+ let _: f64 = Number::from(0.0f64);
+}
+
+trait NewTrait {
+ type Assoc;
+}