Skip to content

Commit

Permalink
Auto merge of #69612 - Dylan-DPC:rollup-f180gcc, r=Dylan-DPC
Browse files Browse the repository at this point in the history
Rollup of 7 pull requests

Successful merges:

 - #69504 (Use assert_ne in hash tests)
 - #69554 (Cleanup e0374)
 - #69568 (Clarify explanation of Vec<T> 'fn resize')
 - #69569 (simplify boolean expressions)
 - #69577 (Clean up E0375 explanation)
 - #69598 (rustdoc: HTML escape crate version)
 - #69607 (Clean up E0376 explanation)

Failed merges:

r? @ghost
  • Loading branch information
bors committed Mar 1, 2020
2 parents 360e42d + d3a5a5d commit beac68a
Show file tree
Hide file tree
Showing 15 changed files with 55 additions and 42 deletions.
4 changes: 2 additions & 2 deletions src/liballoc/collections/binary_heap.rs
Original file line number Diff line number Diff line change
Expand Up @@ -536,7 +536,7 @@ impl<T: Ord> BinaryHeap<T> {
while child < end {
let right = child + 1;
// compare with the greater of the two children
if right < end && !(hole.get(child) > hole.get(right)) {
if right < end && hole.get(child) <= hole.get(right) {
child = right;
}
// if we are already in order, stop.
Expand Down Expand Up @@ -568,7 +568,7 @@ impl<T: Ord> BinaryHeap<T> {
while child < end {
let right = child + 1;
// compare with the greater of the two children
if right < end && !(hole.get(child) > hole.get(right)) {
if right < end && hole.get(child) <= hole.get(right) {
child = right;
}
hole.move_to(child);
Expand Down
5 changes: 3 additions & 2 deletions src/liballoc/vec.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1476,8 +1476,9 @@ impl<T: Clone> Vec<T> {
/// difference, with each additional slot filled with `value`.
/// If `new_len` is less than `len`, the `Vec` is simply truncated.
///
/// This method requires [`Clone`] to be able clone the passed value. If
/// you need more flexibility (or want to rely on [`Default`] instead of
/// This method requires `T` to implement [`Clone`],
/// in order to be able to clone the passed value.
/// If you need more flexibility (or want to rely on [`Default`] instead of
/// [`Clone`]), use [`resize_with`].
///
/// # Examples
Expand Down
1 change: 0 additions & 1 deletion src/libcore/tests/hash/sip.rs
Original file line number Diff line number Diff line change
Expand Up @@ -298,7 +298,6 @@ fn test_hash_no_concat_alias() {
let t = ("aabb", "");
let u = ("a", "abb");

assert!(s != t && t != u);
assert_ne!(s, t);
assert_ne!(t, u);
assert_ne!(hash(&s), hash(&t));
Expand Down
2 changes: 1 addition & 1 deletion src/librustc_codegen_llvm/debuginfo/metadata.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2135,7 +2135,7 @@ fn set_members_of_composite_type(
/// Computes the type parameters for a type, if any, for the given metadata.
fn compute_type_parameters(cx: &CodegenCx<'ll, 'tcx>, ty: Ty<'tcx>) -> Option<&'ll DIArray> {
if let ty::Adt(def, substs) = ty.kind {
if !substs.types().next().is_none() {
if substs.types().next().is_some() {
let generics = cx.tcx.generics_of(def.did);
let names = get_parameter_names(cx, generics);
let template_params: Vec<_> = substs
Expand Down
4 changes: 2 additions & 2 deletions src/librustc_codegen_ssa/mir/debuginfo.rs
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ pub struct DebugScope<D> {

impl<D> DebugScope<D> {
pub fn is_valid(&self) -> bool {
!self.scope_metadata.is_none()
self.scope_metadata.is_some()
}
}

Expand Down Expand Up @@ -304,7 +304,7 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> {
) -> Option<IndexVec<mir::Local, Vec<PerLocalVarDebugInfo<'tcx, Bx::DIVariable>>>> {
let full_debug_info = self.cx.sess().opts.debuginfo == DebugInfo::Full;

if !(full_debug_info || !self.cx.sess().fewer_names()) {
if !full_debug_info && self.cx.sess().fewer_names() {
return None;
}

Expand Down
14 changes: 8 additions & 6 deletions src/librustc_error_codes/error_codes/E0374.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,5 @@
A struct without a field containing an unsized type cannot implement
`CoerceUnsized`. An [unsized type][1] is any type that the compiler
doesn't know the length or alignment of at compile time. Any struct
containing an unsized type is also unsized.

[1]: https://doc.rust-lang.org/book/ch19-04-advanced-types.html#dynamically-sized-types-and-the-sized-trait
`CoerceUnsized` was implemented on a struct which does not contain a field with
an unsized type.

Example of erroneous code:

Expand All @@ -20,6 +16,12 @@ impl<T, U> CoerceUnsized<Foo<U>> for Foo<T>
where T: CoerceUnsized<U> {}
```

An [unsized type][1] is any type where the compiler does not know the length or
alignment of at compile time. Any struct containing an unsized type is also
unsized.

[1]: https://doc.rust-lang.org/book/ch19-04-advanced-types.html#dynamically-sized-types-and-the-sized-trait

`CoerceUnsized` is used to coerce one struct containing an unsized type
into another struct containing a different unsized type. If the struct
doesn't have any fields of unsized types then you don't need explicit
Expand Down
19 changes: 11 additions & 8 deletions src/librustc_error_codes/error_codes/E0375.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,7 @@
A struct with more than one field containing an unsized type cannot implement
`CoerceUnsized`. This only occurs when you are trying to coerce one of the
types in your struct to another type in the struct. In this case we try to
impl `CoerceUnsized` from `T` to `U` which are both types that the struct
takes. An [unsized type][1] is any type that the compiler doesn't know the
length or alignment of at compile time. Any struct containing an unsized type
is also unsized.
`CoerceUnsized` was implemented on a struct which contains more than one field
with an unsized type.

Example of erroneous code:
Erroneous code example:

```compile_fail,E0375
#![feature(coerce_unsized)]
Expand All @@ -22,6 +17,14 @@ struct Foo<T: ?Sized, U: ?Sized> {
impl<T, U> CoerceUnsized<Foo<U, T>> for Foo<T, U> {}
```

A struct with more than one field containing an unsized type cannot implement
`CoerceUnsized`. This only occurs when you are trying to coerce one of the
types in your struct to another type in the struct. In this case we try to
impl `CoerceUnsized` from `T` to `U` which are both types that the struct
takes. An [unsized type][1] is any type that the compiler doesn't know the
length or alignment of at compile time. Any struct containing an unsized type
is also unsized.

`CoerceUnsized` only allows for coercion from a structure with a single
unsized type field to another struct with a single unsized type field.
In fact Rust only allows for a struct to have one unsized type in a struct
Expand Down
21 changes: 11 additions & 10 deletions src/librustc_error_codes/error_codes/E0376.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,6 @@
The type you are trying to impl `CoerceUnsized` for is not a struct.
`CoerceUnsized` can only be implemented for a struct. Unsized types are
already able to be coerced without an implementation of `CoerceUnsized`
whereas a struct containing an unsized type needs to know the unsized type
field it's containing is able to be coerced. An [unsized type][1]
is any type that the compiler doesn't know the length or alignment of at
compile time. Any struct containing an unsized type is also unsized.

[1]: https://doc.rust-lang.org/book/ch19-04-advanced-types.html#dynamically-sized-types-and-the-sized-trait
`CoerceUnsized` was implemented on something that isn't a struct.

Example of erroneous code:
Erroneous code example:

```compile_fail,E0376
#![feature(coerce_unsized)]
Expand All @@ -22,6 +14,15 @@ struct Foo<T: ?Sized> {
impl<T, U> CoerceUnsized<U> for Foo<T> {}
```

`CoerceUnsized` can only be implemented for a struct. Unsized types are
already able to be coerced without an implementation of `CoerceUnsized`
whereas a struct containing an unsized type needs to know the unsized type
field it's containing is able to be coerced. An [unsized type][1]
is any type that the compiler doesn't know the length or alignment of at
compile time. Any struct containing an unsized type is also unsized.

[1]: https://doc.rust-lang.org/book/ch19-04-advanced-types.html#dynamically-sized-types-and-the-sized-trait

The `CoerceUnsized` trait takes a struct type. Make sure the type you are
providing to `CoerceUnsized` is a struct with only the last field containing an
unsized type.
Expand Down
6 changes: 3 additions & 3 deletions src/librustc_infer/infer/freshen.rs
Original file line number Diff line number Diff line change
Expand Up @@ -143,9 +143,9 @@ impl<'a, 'tcx> TypeFolder<'tcx> for TypeFreshener<'a, 'tcx> {
}

fn fold_ty(&mut self, t: Ty<'tcx>) -> Ty<'tcx> {
if !t.needs_infer()
&& !t.has_erasable_regions()
&& !(t.has_closure_types() && self.infcx.in_progress_tables.is_some())
if !(t.needs_infer()
|| t.has_erasable_regions()
|| (t.has_closure_types() && self.infcx.in_progress_tables.is_some()))
{
return t;
}
Expand Down
2 changes: 1 addition & 1 deletion src/librustc_infer/infer/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1484,7 +1484,7 @@ impl<'a, 'tcx> InferCtxt<'a, 'tcx> {

// Even if the type may have no inference variables, during
// type-checking closure types are in local tables only.
if !self.in_progress_tables.is_some() || !ty.has_closure_types() {
if self.in_progress_tables.is_none() || !ty.has_closure_types() {
if !(param_env, ty).has_local_value() {
return ty.is_copy_modulo_regions(self.tcx, param_env, span);
}
Expand Down
2 changes: 1 addition & 1 deletion src/librustc_passes/stability.rs
Original file line number Diff line number Diff line change
Expand Up @@ -551,7 +551,7 @@ impl Visitor<'tcx> for Checker<'tcx> {
.emit();
} else {
let param_env = self.tcx.param_env(def_id);
if !can_type_implement_copy(self.tcx, param_env, ty).is_ok() {
if can_type_implement_copy(self.tcx, param_env, ty).is_err() {
feature_err(
&self.tcx.sess.parse_sess,
sym::untagged_unions,
Expand Down
4 changes: 2 additions & 2 deletions src/librustc_resolve/imports.rs
Original file line number Diff line number Diff line change
Expand Up @@ -313,9 +313,9 @@ impl<'a> Resolver<'a> {
}
}

if !self.is_accessible_from(binding.vis, parent_scope.module) &&
if !(self.is_accessible_from(binding.vis, parent_scope.module) ||
// Remove this together with `PUB_USE_OF_PRIVATE_EXTERN_CRATE`
!(self.last_import_segment && binding.is_extern_crate())
(self.last_import_segment && binding.is_extern_crate()))
{
self.privacy_errors.push(PrivacyError {
ident,
Expand Down
5 changes: 3 additions & 2 deletions src/librustdoc/html/render.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1313,7 +1313,8 @@ impl Context {
<p>Version {}</p>\
</div>\
<a id='all-types' href='index.html'><p>Back to index</p></a>",
crate_name, version
crate_name,
Escape(version),
)
} else {
String::new()
Expand Down Expand Up @@ -3974,7 +3975,7 @@ fn print_sidebar(cx: &Context, it: &clean::Item, buffer: &mut Buffer) {
"<div class='block version'>\
<p>Version {}</p>\
</div>",
version
Escape(version)
);
}
}
Expand Down
2 changes: 1 addition & 1 deletion src/libstd/net/parser.rs
Original file line number Diff line number Diff line change
Expand Up @@ -206,7 +206,7 @@ impl<'a> Parser<'a> {
}

// read `::` if previous code parsed less than 8 groups
if !self.read_given_char(':').is_some() || !self.read_given_char(':').is_some() {
if self.read_given_char(':').is_none() || self.read_given_char(':').is_none() {
return None;
}

Expand Down
6 changes: 6 additions & 0 deletions src/test/rustdoc/crate-version-escape.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
// compile-flags: --crate-version=<script>alert("hi")</script> -Z unstable-options

#![crate_name = "foo"]

// @has 'foo/index.html' '//div[@class="block version"]/p' 'Version <script>alert("hi")</script>'
// @has 'foo/all.html' '//div[@class="block version"]/p' 'Version <script>alert("hi")</script>'

0 comments on commit beac68a

Please sign in to comment.