mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-22 23:04:33 +00:00
Rollup merge of #103003 - TaKO8Ki:fix-102989, r=compiler-errors
Fix `suggest_floating_point_literal` ICE Fixes #102989
This commit is contained in:
commit
65dca11514
@ -2937,11 +2937,9 @@ impl<'tcx> TypeErrCtxtExt<'tcx> for TypeErrCtxt<'_, 'tcx> {
|
|||||||
ObligationCauseCode::BinOp { rhs_span: Some(span), is_lit, .. } if *is_lit => span,
|
ObligationCauseCode::BinOp { rhs_span: Some(span), is_lit, .. } if *is_lit => span,
|
||||||
_ => return,
|
_ => return,
|
||||||
};
|
};
|
||||||
match (
|
if let ty::Float(_) = trait_ref.skip_binder().self_ty().kind()
|
||||||
trait_ref.skip_binder().self_ty().kind(),
|
&& let ty::Infer(InferTy::IntVar(_)) = trait_ref.skip_binder().substs.type_at(1).kind()
|
||||||
trait_ref.skip_binder().substs.type_at(1).kind(),
|
{
|
||||||
) {
|
|
||||||
(ty::Float(_), ty::Infer(InferTy::IntVar(_))) => {
|
|
||||||
err.span_suggestion_verbose(
|
err.span_suggestion_verbose(
|
||||||
rhs_span.shrink_to_hi(),
|
rhs_span.shrink_to_hi(),
|
||||||
"consider using a floating-point literal by writing it with `.0`",
|
"consider using a floating-point literal by writing it with `.0`",
|
||||||
@ -2949,8 +2947,6 @@ impl<'tcx> TypeErrCtxtExt<'tcx> for TypeErrCtxt<'_, 'tcx> {
|
|||||||
Applicability::MaybeIncorrect,
|
Applicability::MaybeIncorrect,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
_ => {}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn suggest_derive(
|
fn suggest_derive(
|
||||||
|
16
src/test/ui/traits/issue-102989.rs
Normal file
16
src/test/ui/traits/issue-102989.rs
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
// normalize-stderr-test "loaded from .*libcore-.*.rlib" -> "loaded from SYSROOT/libcore-*.rlib"
|
||||||
|
|
||||||
|
#![feature(lang_items)]
|
||||||
|
#[lang="sized"]
|
||||||
|
trait Sized { } //~ ERROR found duplicate lang item `sized`
|
||||||
|
|
||||||
|
fn ref_Struct(self: &Struct, f: &u32) -> &u32 {
|
||||||
|
//~^ ERROR `self` parameter is only allowed in associated functions
|
||||||
|
//~| ERROR cannot find type `Struct` in this scope
|
||||||
|
//~| ERROR mismatched types
|
||||||
|
let x = x << 1;
|
||||||
|
//~^ ERROR the size for values of type `{integer}` cannot be known at compilation time
|
||||||
|
//~| ERROR cannot find value `x` in this scope
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {}
|
59
src/test/ui/traits/issue-102989.stderr
Normal file
59
src/test/ui/traits/issue-102989.stderr
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
error: `self` parameter is only allowed in associated functions
|
||||||
|
--> $DIR/issue-102989.rs:7:15
|
||||||
|
|
|
||||||
|
LL | fn ref_Struct(self: &Struct, f: &u32) -> &u32 {
|
||||||
|
| ^^^^ not semantically valid as function parameter
|
||||||
|
|
|
||||||
|
= note: associated functions are those in `impl` or `trait` definitions
|
||||||
|
|
||||||
|
error[E0412]: cannot find type `Struct` in this scope
|
||||||
|
--> $DIR/issue-102989.rs:7:22
|
||||||
|
|
|
||||||
|
LL | fn ref_Struct(self: &Struct, f: &u32) -> &u32 {
|
||||||
|
| ^^^^^^ not found in this scope
|
||||||
|
|
||||||
|
error[E0425]: cannot find value `x` in this scope
|
||||||
|
--> $DIR/issue-102989.rs:11:13
|
||||||
|
|
|
||||||
|
LL | let x = x << 1;
|
||||||
|
| ^ help: a local variable with a similar name exists: `f`
|
||||||
|
|
||||||
|
error[E0152]: found duplicate lang item `sized`
|
||||||
|
--> $DIR/issue-102989.rs:5:1
|
||||||
|
|
|
||||||
|
LL | trait Sized { }
|
||||||
|
| ^^^^^^^^^^^
|
||||||
|
|
|
||||||
|
= note: the lang item is first defined in crate `core` (which `std` depends on)
|
||||||
|
= note: first definition in `core` loaded from SYSROOT/libcore-*.rlib
|
||||||
|
= note: second definition in the local crate (`issue_102989`)
|
||||||
|
|
||||||
|
error[E0277]: the size for values of type `{integer}` cannot be known at compilation time
|
||||||
|
--> $DIR/issue-102989.rs:11:15
|
||||||
|
|
|
||||||
|
LL | let x = x << 1;
|
||||||
|
| ^^ doesn't have a size known at compile-time
|
||||||
|
|
|
||||||
|
= help: the trait `std::marker::Sized` is not implemented for `{integer}`
|
||||||
|
|
||||||
|
error[E0308]: mismatched types
|
||||||
|
--> $DIR/issue-102989.rs:7:42
|
||||||
|
|
|
||||||
|
LL | fn ref_Struct(self: &Struct, f: &u32) -> &u32 {
|
||||||
|
| ---------- ^^^^ expected `&u32`, found `()`
|
||||||
|
| |
|
||||||
|
| implicitly returns `()` as its body has no tail or `return` expression
|
||||||
|
|
|
||||||
|
note: consider returning one of these bindings
|
||||||
|
--> $DIR/issue-102989.rs:7:30
|
||||||
|
|
|
||||||
|
LL | fn ref_Struct(self: &Struct, f: &u32) -> &u32 {
|
||||||
|
| ^
|
||||||
|
...
|
||||||
|
LL | let x = x << 1;
|
||||||
|
| ^
|
||||||
|
|
||||||
|
error: aborting due to 6 previous errors
|
||||||
|
|
||||||
|
Some errors have detailed explanations: E0152, E0277, E0308, E0412, E0425.
|
||||||
|
For more information about an error, try `rustc --explain E0152`.
|
Loading…
Reference in New Issue
Block a user