Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rollup of 6 pull requests #71985

Merged
merged 22 commits into from
May 7, 2020
Merged
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
9ed9200
use trait_object_dummy_self instead of err
mark-i-m May 6, 2020
96d4e0b
Add test for #29988
JohnTitor May 6, 2020
be2d553
Add test for #34979
JohnTitor May 6, 2020
f22bc7b
Add some tests for #67945
JohnTitor May 6, 2020
8e76663
test: Fix warnings in `rust_test_helpers.c`
petrochenkov May 6, 2020
6425413
grammar: which vs that
jsoref May 6, 2020
39b5b70
grammar: count-agreement default ... is
jsoref May 6, 2020
5f54ce7
grammar: disambiguate space-character
jsoref May 6, 2020
c8aba78
grammar: subject-verb not subject-verb-verb
jsoref May 6, 2020
488e660
grammar: noun not verb
jsoref May 6, 2020
5d2d7e7
grammar: stray comma
jsoref May 6, 2020
eb12784
grammar: simplify to avoid that
jsoref May 6, 2020
6c8c3f8
grammar: dealing-with
jsoref May 6, 2020
d1ea287
use hex for pointers in Miri error messages; refine vtable error message
RalfJung May 7, 2020
d14f000
Allow a few warnings.
steveklabnik May 7, 2020
d717e55
Add some skip flags
JohnTitor May 7, 2020
037ae40
Rollup merge of #71938 - mark-i-m:de-abuse-err-4, r=eddyb
Dylan-DPC May 7, 2020
480f718
Rollup merge of #71952 - JohnTitor:add-tests, r=Dylan-DPC
Dylan-DPC May 7, 2020
9e4a745
Rollup merge of #71959 - petrochenkov:chelpers, r=Mark-Simulacrum
Dylan-DPC May 7, 2020
2e9db8d
Rollup merge of #71962 - jsoref:grammar, r=Dylan-DPC
Dylan-DPC May 7, 2020
806089a
Rollup merge of #71972 - RalfJung:miri-validity-error-refine, r=oli-obk
Dylan-DPC May 7, 2020
c818e84
Rollup merge of #71980 - steveklabnik:warnings-fixes, r=Mark-Simulacrum
Dylan-DPC May 7, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 11 additions & 11 deletions src/liballoc/fmt.rs
Original file line number Diff line number Diff line change
@@ -50,8 +50,8 @@
//! The internal iterator over the argument has not been advanced by the time
//! the first `{}` is seen, so it prints the first argument. Then upon reaching
//! the second `{}`, the iterator has advanced forward to the second argument.
//! Essentially, parameters which explicitly name their argument do not affect
//! parameters which do not name an argument in terms of positional specifiers.
//! Essentially, parameters that explicitly name their argument do not affect
//! parameters that do not name an argument in terms of positional specifiers.
//!
//! A format string is required to use all of its arguments, otherwise it is a
//! compile-time error. You may refer to the same argument more than once in the
@@ -60,7 +60,7 @@
//! ## Named parameters
//!
//! Rust itself does not have a Python-like equivalent of named parameters to a
//! function, but the [`format!`] macro is a syntax extension which allows it to
//! function, but the [`format!`] macro is a syntax extension that allows it to
//! leverage named parameters. Named parameters are listed at the end of the
//! argument list and have the syntax:
//!
@@ -77,7 +77,7 @@
//! ```
//!
//! It is not valid to put positional parameters (those without names) after
//! arguments which have names. Like with positional parameters, it is not
//! arguments that have names. Like with positional parameters, it is not
//! valid to provide named parameters that are unused by the format string.
//!
//! # Formatting Parameters
@@ -130,7 +130,7 @@
//!
//! The default [fill/alignment](#fillalignment) for non-numerics is a space and
//! left-aligned. The
//! defaults for numeric formatters is also a space but with right-alignment. If
//! default for numeric formatters is also a space character but with right-alignment. If
//! the `0` flag (see below) is specified for numerics, then the implicit fill character is
//! `0`.
//!
@@ -161,7 +161,7 @@
//! `Signed` trait. This flag indicates that the correct sign (`+` or `-`)
//! should always be printed.
//! * `-` - Currently not used
//! * `#` - This flag is indicates that the "alternate" form of printing should
//! * `#` - This flag indicates that the "alternate" form of printing should
//! be used. The alternate forms are:
//! * `#?` - pretty-print the [`Debug`] formatting
//! * `#x` - precedes the argument with a `0x`
@@ -173,9 +173,9 @@
//! like `{:08}` would yield `00000001` for the integer `1`, while the
//! same format would yield `-0000001` for the integer `-1`. Notice that
//! the negative version has one fewer zero than the positive version.
//! Note that padding zeroes are always placed after the sign (if any)
//! Note that padding zeros are always placed after the sign (if any)
//! and before the digits. When used together with the `#` flag, a similar
//! rule applies: padding zeroes are inserted after the prefix but before
//! rule applies: padding zeros are inserted after the prefix but before
//! the digits. The prefix is included in the total width.
//!
//! ## Precision
@@ -251,7 +251,7 @@
//!
//! In some programming languages, the behavior of string formatting functions
//! depends on the operating system's locale setting. The format functions
//! provided by Rust's standard library do not have any concept of locale, and
//! provided by Rust's standard library do not have any concept of locale and
//! will produce the same results on all systems regardless of user
//! configuration.
//!
@@ -470,7 +470,7 @@
//!
//! ### `format_args!`
//!
//! This is a curious macro which is used to safely pass around
//! This is a curious macro used to safely pass around
//! an opaque object describing the format string. This object
//! does not require any heap allocations to create, and it only
//! references information on the stack. Under the hood, all of
@@ -495,7 +495,7 @@
//! This structure can then be passed to the [`write`] and [`format`] functions
//! inside this module in order to process the format string.
//! The goal of this macro is to even further prevent intermediate allocations
//! when dealing formatting strings.
//! when dealing with formatting strings.
//!
//! For example, a logging library could use the standard formatting syntax, but
//! it would internally pass around this structure until it has been determined
7 changes: 4 additions & 3 deletions src/librustc_mir/interpret/validity.rs
Original file line number Diff line number Diff line change
@@ -321,11 +321,12 @@ impl<'rt, 'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> ValidityVisitor<'rt, 'mir, '
try_validation!(
self.ecx.read_drop_type_from_vtable(vtable),
self.path,
err_ub!(InvalidDropFn(..)) |
err_ub!(DanglingIntPointer(..)) |
err_ub!(InvalidFunctionPointer(..)) |
err_unsup!(ReadBytesAsPointer) =>
{ "invalid drop function pointer in vtable" },
{ "invalid drop function pointer in vtable (not pointing to a function)" },
err_ub!(InvalidDropFn(..)) =>
{ "invalid drop function pointer in vtable (function has incompatible signature)" },
);
try_validation!(
self.ecx.read_size_and_align_from_vtable(vtable),
@@ -400,7 +401,7 @@ impl<'rt, 'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> ValidityVisitor<'rt, 'mir, '
err_ub!(DanglingIntPointer(0, _)) =>
{ "a NULL {}", kind },
err_ub!(DanglingIntPointer(i, _)) =>
{ "a dangling {} (address {} is unallocated)", kind, i },
{ "a dangling {} (address 0x{:x} is unallocated)", kind, i },
err_ub!(PointerOutOfBounds { .. }) =>
{ "a dangling {} (going beyond the bounds of its allocation)", kind },
err_unsup!(ReadBytesAsPointer) =>
2 changes: 1 addition & 1 deletion src/librustc_typeck/check/closure.rs
Original file line number Diff line number Diff line change
@@ -178,7 +178,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
match expected_ty.kind {
ty::Dynamic(ref object_type, ..) => {
let sig = object_type.projection_bounds().find_map(|pb| {
let pb = pb.with_self_ty(self.tcx, self.tcx.types.err);
let pb = pb.with_self_ty(self.tcx, self.tcx.types.trait_object_dummy_self);
self.deduce_sig_from_projection(None, &pb)
});
let kind = object_type
1 change: 1 addition & 0 deletions src/libstd/sys/unix/ext/net.rs
Original file line number Diff line number Diff line change
@@ -7,6 +7,7 @@ use libc;

// FIXME(#43348): Make libc adapt #[doc(cfg(...))] so we don't need these fake definitions here?
#[cfg(not(unix))]
#[allow(non_camel_case_types)]
mod libc {
pub use libc::c_int;
pub type socklen_t = u32;
5 changes: 5 additions & 0 deletions src/libstd/sys/unix/ext/raw.rs
Original file line number Diff line number Diff line change
@@ -11,10 +11,15 @@
#![allow(deprecated)]

#[stable(feature = "raw_ext", since = "1.1.0")]
#[allow(non_camel_case_types)]
pub type uid_t = u32;

#[stable(feature = "raw_ext", since = "1.1.0")]
#[allow(non_camel_case_types)]
pub type gid_t = u32;

#[stable(feature = "raw_ext", since = "1.1.0")]
#[allow(non_camel_case_types)]
pub type pid_t = i32;

#[doc(inline)]
2 changes: 2 additions & 0 deletions src/test/auxiliary/rust_test_helpers.c
Original file line number Diff line number Diff line change
@@ -368,6 +368,7 @@ rust_dbg_unpack_option_u64(struct U8TaggedEnumOptionU64 o, uint64_t *into) {
return 0;
default:
assert(0 && "unexpected tag");
return 0;
}
}

@@ -411,5 +412,6 @@ rust_dbg_unpack_option_u64u64(struct U8TaggedEnumOptionU64U64 o, uint64_t *a, ui
return 0;
default:
assert(0 && "unexpected tag");
return 0;
}
}
25 changes: 25 additions & 0 deletions src/test/codegen/ffi-out-of-bounds-loads.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
// Regression test for #29988

// compile-flags: -C no-prepopulate-passes
// only-x86_64
// ignore-windows

#[repr(C)]
struct S {
f1: i32,
f2: i32,
f3: i32,
}

extern {
fn foo(s: S);
}

fn main() {
let s = S { f1: 1, f2: 2, f3: 3 };
unsafe {
// CHECK: load { i64, i32 }, { i64, i32 }* {{.*}}, align 4
// CHECK: call void @foo({ i64, i32 } {{.*}})
foo(s);
}
}
6 changes: 3 additions & 3 deletions src/test/ui/consts/const-eval/ub-wide-ptr.stderr
Original file line number Diff line number Diff line change
@@ -170,23 +170,23 @@ error[E0080]: it is undefined behavior to use this value
--> $DIR/ub-wide-ptr.rs:109:1
|
LL | const TRAIT_OBJ_BAD_DROP_FN_NULL: &dyn Trait = unsafe { mem::transmute((&92u8, &[0usize; 8])) };
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ type validation failed: encountered invalid drop function pointer in vtable
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ type validation failed: encountered invalid drop function pointer in vtable (not pointing to a function)
|
= note: The rules on what exactly is undefined behavior aren't clear, so this check might be overzealous. Please open an issue on the rustc repository if you believe it should not be considered undefined behavior.

error[E0080]: it is undefined behavior to use this value
--> $DIR/ub-wide-ptr.rs:111:1
|
LL | const TRAIT_OBJ_BAD_DROP_FN_INT: &dyn Trait = unsafe { mem::transmute((&92u8, &[1usize; 8])) };
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ type validation failed: encountered invalid drop function pointer in vtable
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ type validation failed: encountered invalid drop function pointer in vtable (not pointing to a function)
|
= note: The rules on what exactly is undefined behavior aren't clear, so this check might be overzealous. Please open an issue on the rustc repository if you believe it should not be considered undefined behavior.

error[E0080]: it is undefined behavior to use this value
--> $DIR/ub-wide-ptr.rs:113:1
|
LL | const TRAIT_OBJ_BAD_DROP_FN_NOT_FN_PTR: &dyn Trait = unsafe { mem::transmute((&92u8, &[&42u8; 8])) };
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ type validation failed: encountered invalid drop function pointer in vtable
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ type validation failed: encountered invalid drop function pointer in vtable (not pointing to a function)
|
= note: The rules on what exactly is undefined behavior aren't clear, so this check might be overzealous. Please open an issue on the rustc repository if you believe it should not be considered undefined behavior.

8 changes: 8 additions & 0 deletions src/test/ui/enum/issue-67945-1.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
enum Bug<S> {
Var = {
let x: S = 0; //~ ERROR: mismatched types
0
},
}

fn main() {}
17 changes: 17 additions & 0 deletions src/test/ui/enum/issue-67945-1.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
error[E0308]: mismatched types
--> $DIR/issue-67945-1.rs:3:20
|
LL | enum Bug<S> {
| - this type parameter
LL | Var = {
LL | let x: S = 0;
| - ^ expected type parameter `S`, found integer
| |
| expected due to this
|
= note: expected type parameter `S`
found type `{integer}`

error: aborting due to previous error

For more information about this error, try `rustc --explain E0308`.
9 changes: 9 additions & 0 deletions src/test/ui/enum/issue-67945-2.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#![feature(type_ascription)]

enum Bug<S> {
Var = 0: S,
//~^ ERROR: mismatched types
//~| ERROR: mismatched types
}

fn main() {}
25 changes: 25 additions & 0 deletions src/test/ui/enum/issue-67945-2.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
error[E0308]: mismatched types
--> $DIR/issue-67945-2.rs:4:11
|
LL | enum Bug<S> {
| - this type parameter
LL | Var = 0: S,
| ^ expected type parameter `S`, found integer
|
= note: expected type parameter `S`
found type `{integer}`

error[E0308]: mismatched types
--> $DIR/issue-67945-2.rs:4:11
|
LL | enum Bug<S> {
| - this type parameter
LL | Var = 0: S,
| ^^^^ expected `isize`, found type parameter `S`
|
= note: expected type `isize`
found type parameter `S`

error: aborting due to 2 previous errors

For more information about this error, try `rustc --explain E0308`.
9 changes: 9 additions & 0 deletions src/test/ui/lifetimes/issue-34979.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
trait Foo {}
impl<'a, T> Foo for &'a T {}

struct Ctx<'a>(&'a ())
where
&'a (): Foo, //~ ERROR: type annotations needed
&'static (): Foo;

fn main() {}
14 changes: 14 additions & 0 deletions src/test/ui/lifetimes/issue-34979.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
error[E0283]: type annotations needed
--> $DIR/issue-34979.rs:6:13
|
LL | trait Foo {}
| --------- required by this bound in `Foo`
...
LL | &'a (): Foo,
| ^^^ cannot infer type for reference `&'a ()`
|
= note: cannot satisfy `&'a (): Foo`

error: aborting due to previous error

For more information about this error, try `rustc --explain E0283`.