Fix test redux

This commit is contained in:
Esteban Küber 2018-01-22 08:35:21 -08:00
parent 864f6d180b
commit ffb827aff3
5 changed files with 34 additions and 27 deletions

View File

@ -293,7 +293,7 @@ impl<'a, 'gcx, 'tcx> CastCheck<'tcx> {
if fcx.tcx.sess.opts.debugging_opts.explain
&& !fcx.tcx.sess.parse_sess.span_diagnostic
.code_emitted(&err.get_code().unwrap()) {
err.note(
err.help(
"Thin pointers are \"simple\" pointers: they are purely a reference to a
memory address.
@ -301,13 +301,13 @@ Fat pointers are pointers referencing \"Dynamically Sized Types\" (also
called DST). DST don't have a statically known size, therefore they can
only exist behind some kind of pointers that contain additional
information. Slices and trait objects are DSTs. In the case of slices,
the additional information the fat pointer holds is their size.");
err.note("to fix this error, don't try to cast directly between thin and fat \
pointers");
err.help("for more information about casts, take a look at
[The Book]\
(https://doc.rust-lang.org/book/first-edition/\
casting-between-types.html)");
the additional information the fat pointer holds is their size.
To fix this error, don't try to cast directly between thin and fat
pointers.
For more information about casts, take a look at The Book:
https://doc.rust-lang.org/book/first-edition/casting-between-types.html");
}
err.emit();
}

View File

@ -17,16 +17,22 @@ extern {
fn main() {
unsafe {
printf(::std::ptr::null(), 0f32);
//~^ ERROR can't pass `f32` to variadic function, cast to `c_double` [E0617]
//~^ ERROR can't pass `f32` to variadic function
//~| HELP cast the value to `c_double`
printf(::std::ptr::null(), 0i8);
//~^ ERROR can't pass `i8` to variadic function, cast to `c_int` [E0617]
//~^ ERROR can't pass `i8` to variadic function
//~| HELP cast the value to `c_int`
printf(::std::ptr::null(), 0i16);
//~^ ERROR can't pass `i16` to variadic function, cast to `c_int` [E0617]
//~^ ERROR can't pass `i16` to variadic function
//~| HELP cast the value to `c_int`
printf(::std::ptr::null(), 0u8);
//~^ ERROR can't pass `u8` to variadic function, cast to `c_uint` [E0617]
//~^ ERROR can't pass `u8` to variadic function
//~| HELP cast the value to `c_uint`
printf(::std::ptr::null(), 0u16);
//~^ ERROR can't pass `u16` to variadic function, cast to `c_uint` [E0617]
//~^ ERROR can't pass `u16` to variadic function
//~| HELP cast the value to `c_uint`
printf(::std::ptr::null(), printf);
//~^ ERROR can't pass `unsafe extern "C" fn(*const i8, ...) {printf}` to variadic function, cast to `unsafe extern "C" fn(*const i8, ...)` [E0617]
//~^ ERROR can't pass `unsafe extern "C" fn(*const i8, ...) {printf}` to variadic function
//~| HELP cast the value to `unsafe extern "C" fn(*const i8, ...)`
}
}

View File

@ -17,6 +17,7 @@ fn bar(_: *const u8) {}
fn main() {
unsafe {
foo(0, bar);
//~^ ERROR can't pass `fn(*const u8) {bar}` to variadic function, cast to `fn(*const u8)`
//~^ ERROR can't pass `fn(*const u8) {bar}` to variadic function
//~| HELP cast the value to `fn(*const u8)`
}
}

View File

@ -31,11 +31,11 @@ fn main() {
//~| expected type `extern "C" fn(isize, u8, ...)`
//~| found type `extern "C" fn(isize, u8) {bar}`
foo(1, 2, 3f32); //~ ERROR can't pass `f32` to variadic function, cast to `c_double`
foo(1, 2, true); //~ ERROR can't pass `bool` to variadic function, cast to `c_int`
foo(1, 2, 1i8); //~ ERROR can't pass `i8` to variadic function, cast to `c_int`
foo(1, 2, 1u8); //~ ERROR can't pass `u8` to variadic function, cast to `c_uint`
foo(1, 2, 1i16); //~ ERROR can't pass `i16` to variadic function, cast to `c_int`
foo(1, 2, 1u16); //~ ERROR can't pass `u16` to variadic function, cast to `c_uint`
foo(1, 2, 3f32); //~ ERROR can't pass `f32` to variadic function
foo(1, 2, true); //~ ERROR can't pass `bool` to variadic function
foo(1, 2, 1i8); //~ ERROR can't pass `i8` to variadic function
foo(1, 2, 1u8); //~ ERROR can't pass `u8` to variadic function
foo(1, 2, 1i16); //~ ERROR can't pass `i16` to variadic function
foo(1, 2, 1u16); //~ ERROR can't pass `u16` to variadic function
}
}

View File

@ -37,37 +37,37 @@ error[E0308]: mismatched types
error[E0617]: can't pass `f32` to variadic function
--> $DIR/variadic-ffi-3.rs:34:19
|
34 | foo(1, 2, 3f32); //~ ERROR can't pass `f32` to variadic function, cast to `c_double`
34 | foo(1, 2, 3f32); //~ ERROR can't pass `f32` to variadic function
| ^^^^ help: cast the value to `c_double`: `3f32 as c_double`
error[E0617]: can't pass `bool` to variadic function
--> $DIR/variadic-ffi-3.rs:35:19
|
35 | foo(1, 2, true); //~ ERROR can't pass `bool` to variadic function, cast to `c_int`
35 | foo(1, 2, true); //~ ERROR can't pass `bool` to variadic function
| ^^^^ help: cast the value to `c_int`: `true as c_int`
error[E0617]: can't pass `i8` to variadic function
--> $DIR/variadic-ffi-3.rs:36:19
|
36 | foo(1, 2, 1i8); //~ ERROR can't pass `i8` to variadic function, cast to `c_int`
36 | foo(1, 2, 1i8); //~ ERROR can't pass `i8` to variadic function
| ^^^ help: cast the value to `c_int`: `1i8 as c_int`
error[E0617]: can't pass `u8` to variadic function
--> $DIR/variadic-ffi-3.rs:37:19
|
37 | foo(1, 2, 1u8); //~ ERROR can't pass `u8` to variadic function, cast to `c_uint`
37 | foo(1, 2, 1u8); //~ ERROR can't pass `u8` to variadic function
| ^^^ help: cast the value to `c_uint`: `1u8 as c_uint`
error[E0617]: can't pass `i16` to variadic function
--> $DIR/variadic-ffi-3.rs:38:19
|
38 | foo(1, 2, 1i16); //~ ERROR can't pass `i16` to variadic function, cast to `c_int`
38 | foo(1, 2, 1i16); //~ ERROR can't pass `i16` to variadic function
| ^^^^ help: cast the value to `c_int`: `1i16 as c_int`
error[E0617]: can't pass `u16` to variadic function
--> $DIR/variadic-ffi-3.rs:39:19
|
39 | foo(1, 2, 1u16); //~ ERROR can't pass `u16` to variadic function, cast to `c_uint`
39 | foo(1, 2, 1u16); //~ ERROR can't pass `u16` to variadic function
| ^^^^ help: cast the value to `c_uint`: `1u16 as c_uint`
error: aborting due to 10 previous errors