Skip to content

Commit

Permalink
Rollup merge of rust-lang#103003 - TaKO8Ki:fix-102989, r=compiler-errors
Browse files Browse the repository at this point in the history
Fix `suggest_floating_point_literal` ICE

Fixes rust-lang#102989
  • Loading branch information
matthiaskrgr authored Oct 13, 2022
2 parents 34c8a39 + 9b8aa65 commit e991efd
Show file tree
Hide file tree
Showing 3 changed files with 100 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2937,19 +2937,15 @@ impl<'tcx> TypeErrCtxtExt<'tcx> for TypeErrCtxt<'_, 'tcx> {
ObligationCauseCode::BinOp { rhs_span: Some(span), is_lit, .. } if *is_lit => span,
_ => return,
};
match (
trait_ref.skip_binder().self_ty().kind(),
trait_ref.skip_binder().substs.type_at(1).kind(),
) {
(ty::Float(_), ty::Infer(InferTy::IntVar(_))) => {
err.span_suggestion_verbose(
rhs_span.shrink_to_hi(),
"consider using a floating-point literal by writing it with `.0`",
".0",
Applicability::MaybeIncorrect,
);
}
_ => {}
if let ty::Float(_) = trait_ref.skip_binder().self_ty().kind()
&& let ty::Infer(InferTy::IntVar(_)) = trait_ref.skip_binder().substs.type_at(1).kind()
{
err.span_suggestion_verbose(
rhs_span.shrink_to_hi(),
"consider using a floating-point literal by writing it with `.0`",
".0",
Applicability::MaybeIncorrect,
);
}
}

Expand Down
19 changes: 19 additions & 0 deletions src/test/ui/traits/issue-102989.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
//~ ERROR can't find crate for `profiler_builtins`
// compile-flags: -Cinstrument-coverage
// normalize-stderr-test "loaded from .*libcore-.*.rlib" -> "loaded from SYSROOT/libcore-*.rlib"

#![no_core]
#![feature(no_core, 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() {}
72 changes: 72 additions & 0 deletions src/test/ui/traits/issue-102989.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
error: `self` parameter is only allowed in associated functions
--> $DIR/issue-102989.rs:10: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:10: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:14:13
|
LL | let x = x << 1;
| ^ help: a local variable with a similar name exists: `f`

error: `profiler_builtins` crate (required by compiler options) is not compatible with crate attribute `#![no_core]`

error[E0463]: can't find crate for `profiler_builtins`
|
= note: the compiler may have been built without the profiler runtime

error[E0152]: found duplicate lang item `sized`
--> $DIR/issue-102989.rs:8:1
|
LL | trait Sized { }
| ^^^^^^^^^^^
|
= note: the lang item is first defined in crate `core`.
= note: first definition in `core` loaded from SYSROOT/libcore-*.rlib
= note: second definition in the local crate (`issue_102989`)

error: `#[panic_handler]` function required, but not found

error: language item required, but not found: `eh_personality`
|
= note: this can occur when a binary crate with `#![no_std]` is compiled for a target where `eh_personality` is defined in the standard library
= help: you may be able to compile for a target that doesn't need `eh_personality`, specify a target with `--target` or in `.cargo/config`

error[E0277]: the size for values of type `{integer}` cannot be known at compilation time
--> $DIR/issue-102989.rs:14:15
|
LL | let x = x << 1;
| ^^ doesn't have a size known at compile-time
|
= help: the trait `core::marker::Sized` is not implemented for `{integer}`

error[E0308]: mismatched types
--> $DIR/issue-102989.rs:10: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:10:30
|
LL | fn ref_Struct(self: &Struct, f: &u32) -> &u32 {
| ^
...
LL | let x = x << 1;
| ^

error: aborting due to 10 previous errors

Some errors have detailed explanations: E0152, E0277, E0308, E0412, E0425, E0463.
For more information about an error, try `rustc --explain E0152`.

0 comments on commit e991efd

Please sign in to comment.