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 5 pull requests #105940

Merged
merged 10 commits into from
Dec 20, 2022
Merged
3 changes: 1 addition & 2 deletions compiler/rustc_error_codes/src/error_codes.rs
Original file line number Diff line number Diff line change
Expand Up @@ -184,6 +184,7 @@ E0373: include_str!("./error_codes/E0373.md"),
E0374: include_str!("./error_codes/E0374.md"),
E0375: include_str!("./error_codes/E0375.md"),
E0376: include_str!("./error_codes/E0376.md"),
E0377: include_str!("./error_codes/E0377.md"),
E0378: include_str!("./error_codes/E0378.md"),
E0379: include_str!("./error_codes/E0379.md"),
E0380: include_str!("./error_codes/E0380.md"),
Expand Down Expand Up @@ -579,8 +580,6 @@ E0791: include_str!("./error_codes/E0791.md"),
// E0315, // cannot invoke closure outside of its lifetime
// E0319, // trait impls for defaulted traits allowed just for structs/enums
// E0372, // coherence not object safe
E0377, // the trait `CoerceUnsized` may only be implemented for a coercion
// between structures with the same definition
// E0385, // {} in an aliasable location
// E0402, // cannot use an outer type parameter in this context
// E0406, // merged into 420
Expand Down
29 changes: 29 additions & 0 deletions compiler/rustc_error_codes/src/error_codes/E0377.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
The trait `CoerceUnsized` may only be implemented for a coercion between
structures with the same definition.

Example of erroneous code:

```compile_fail,E0377
#![feature(coerce_unsized)]
use std::ops::CoerceUnsized;

pub struct Foo<T: ?Sized> {
field_with_unsized_type: T,
}

pub struct Bar<T: ?Sized> {
field_with_unsized_type: T,
}

// error: the trait `CoerceUnsized` may only be implemented for a coercion
// between structures with the same definition
impl<T, U> CoerceUnsized<Bar<U>> for Foo<T> where T: CoerceUnsized<U> {}
```

When attempting to implement `CoerceUnsized`, the `impl` signature must look
like: `impl CoerceUnsized<Type<U>> for Type<T> where T: CoerceUnsized<U>`;
the *implementer* and *`CoerceUnsized` type parameter* must be the same
type. In this example, `Bar` and `Foo` (even though structurally identical)
are *not* the same type and are rejected. Learn more about the `CoerceUnsized`
trait and DST coercion in
[the `CoerceUnsized` docs](../std/ops/trait.CoerceUnsized.html).
12 changes: 8 additions & 4 deletions src/bootstrap/install.rs
Original file line number Diff line number Diff line change
Expand Up @@ -200,10 +200,14 @@ install!((self, builder, _config),
install_sh(builder, "clippy", self.compiler.stage, Some(self.target), &tarball);
};
Miri, alias = "miri", Self::should_build(_config), only_hosts: true, {
let tarball = builder
.ensure(dist::Miri { compiler: self.compiler, target: self.target })
.expect("missing miri");
install_sh(builder, "miri", self.compiler.stage, Some(self.target), &tarball);
if let Some(tarball) = builder.ensure(dist::Miri { compiler: self.compiler, target: self.target }) {
install_sh(builder, "miri", self.compiler.stage, Some(self.target), &tarball);
} else {
// Miri is only available on nightly
builder.info(
&format!("skipping Install miri stage{} ({})", self.compiler.stage, self.target),
);
}
};
LlvmTools, alias = "llvm-tools", Self::should_build(_config), only_hosts: true, {
let tarball = builder
Expand Down
2 changes: 2 additions & 0 deletions src/librustdoc/clean/cfg.rs
Original file line number Diff line number Diff line change
Expand Up @@ -507,7 +507,9 @@ impl<'a> fmt::Display for Display<'a> {
"openbsd" => "OpenBSD",
"redox" => "Redox",
"solaris" => "Solaris",
"tvos" => "tvOS",
"wasi" => "WASI",
"watchos" => "watchOS",
"windows" => "Windows",
_ => "",
},
Expand Down
11 changes: 1 addition & 10 deletions src/librustdoc/html/static/css/rustdoc.css
Original file line number Diff line number Diff line change
Expand Up @@ -338,6 +338,7 @@ code, pre, a.test-arrow, .code-header {
}
pre {
padding: 14px;
line-height: 1.5; /* https://github.com/rust-lang/rust/issues/105906 */
}
.item-decl pre {
overflow-x: auto;
Expand Down Expand Up @@ -1972,10 +1973,7 @@ in storage.js
}

.scraped-example .code-wrapper .example-wrap {
display: grid;
grid-template-columns: max-content auto;
width: 100%;
overflow-x: auto;
overflow-y: hidden;
margin-bottom: 0;
}
Expand All @@ -1984,13 +1982,6 @@ in storage.js
overflow-x: hidden;
}

.scraped-example .code-wrapper .example-wrap pre.rust {
overflow-x: inherit;
width: inherit;
overflow-y: hidden;
}


.more-examples-toggle {
max-width: calc(100% + 25px);
margin-top: 10px;
Expand Down
5 changes: 5 additions & 0 deletions src/test/rustdoc-gui/codeblock-sub.goml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
// Test that code blocks nested within <sub> do not have a line height of 0.
goto: "file://" + |DOC_PATH| + "/test_docs/codeblock_sub/index.html"

store-property: (codeblock_sub_1, "#codeblock-sub-1", "offsetHeight")
assert-property-false: ("#codeblock-sub-3", { "offsetHeight": |codeblock_sub_1| })
19 changes: 19 additions & 0 deletions src/test/rustdoc-gui/src/test_docs/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -455,3 +455,22 @@ impl TypeWithImplDoc {
/// fn doc
pub fn test_fn() {}
}

/// <sub id="codeblock-sub-1">
///
/// ```
/// one
/// ```
///
/// </sub>
///
/// <sub id="codeblock-sub-3">
///
/// ```
/// one
/// two
/// three
/// ```
///
/// </sub>
pub mod codeblock_sub {}
14 changes: 14 additions & 0 deletions src/test/ui/error-codes/E0377.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#![feature(coerce_unsized)]
use std::ops::CoerceUnsized;

pub struct Foo<T: ?Sized> {
field_with_unsized_type: T,
}

pub struct Bar<T: ?Sized> {
field_with_unsized_type: T,
}

impl<T, U> CoerceUnsized<Bar<U>> for Foo<T> where T: CoerceUnsized<U> {} //~ ERROR E0377

fn main() {}
9 changes: 9 additions & 0 deletions src/test/ui/error-codes/E0377.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
error[E0377]: the trait `CoerceUnsized` may only be implemented for a coercion between structures with the same definition; expected `Foo`, found `Bar`
--> $DIR/E0377.rs:12:1
|
LL | impl<T, U> CoerceUnsized<Bar<U>> for Foo<T> where T: CoerceUnsized<U> {}
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

error: aborting due to previous error

For more information about this error, try `rustc --explain E0377`.
4 changes: 2 additions & 2 deletions src/tools/tidy/src/error_codes_check.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ use regex::Regex;

// A few of those error codes can't be tested but all the others can and *should* be tested!
const EXEMPTED_FROM_TEST: &[&str] = &[
"E0313", "E0377", "E0461", "E0462", "E0465", "E0476", "E0490", "E0514", "E0519", "E0523",
"E0554", "E0640", "E0717", "E0729", "E0789",
"E0313", "E0461", "E0462", "E0465", "E0476", "E0490", "E0514", "E0519", "E0523", "E0554",
"E0640", "E0717", "E0729", "E0789",
];

// Some error codes don't have any tests apparently...
Expand Down