Skip to content

Commit

Permalink
Auto merge of rust-lang#78976 - GuillaumeGomez:rollup-endkih3, r=Guil…
Browse files Browse the repository at this point in the history
…laumeGomez

Rollup of 5 pull requests

Successful merges:

 - rust-lang#78916 (extend const generics test suite)
 - rust-lang#78921 (Improve the page title switch handling between search and doc)
 - rust-lang#78933 (Don't print thread ids and names in `tracing` logs)
 - rust-lang#78960 (Test default values for const parameters.)
 - rust-lang#78971 (Update books)

Failed merges:

r? `@ghost`
`@rustbot` modify labels: rollup
  • Loading branch information
bors committed Nov 12, 2020
2 parents 12f0dba + cac8ac6 commit 7f5a42b
Show file tree
Hide file tree
Showing 33 changed files with 1,165 additions and 8 deletions.
4 changes: 2 additions & 2 deletions compiler/rustc_driver/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1288,12 +1288,12 @@ pub fn init_env_logger(env: &str) {
.with_indent_lines(true)
.with_ansi(true)
.with_targets(true)
.with_thread_ids(true)
.with_thread_names(true)
.with_wraparound(10)
.with_verbose_exit(true)
.with_verbose_entry(true)
.with_indent_amount(2);
#[cfg(parallel_compiler)]
let layer = layer.with_thread_ids(true).with_thread_names(true);

use tracing_subscriber::layer::SubscriberExt;
let subscriber = tracing_subscriber::Registry::default().with(filter).with(layer);
Expand Down
2 changes: 1 addition & 1 deletion src/doc/edition-guide
2 changes: 1 addition & 1 deletion src/doc/nomicon
2 changes: 1 addition & 1 deletion src/doc/rust-by-example
7 changes: 5 additions & 2 deletions src/librustdoc/html/static/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,7 @@ function defocusSearchBar() {
var mouseMovedAfterSearch = true;

var titleBeforeSearch = document.title;
var searchTitle = null;

function clearInputTimeout() {
if (searchTimeout !== null) {
Expand Down Expand Up @@ -169,6 +170,7 @@ function defocusSearchBar() {
addClass(main, "hidden");
removeClass(search, "hidden");
mouseMovedAfterSearch = false;
document.title = searchTitle;
}

function hideSearchResults(search) {
Expand All @@ -177,6 +179,7 @@ function defocusSearchBar() {
}
addClass(search, "hidden");
removeClass(main, "hidden");
document.title = titleBeforeSearch;
}

// used for special search precedence
Expand Down Expand Up @@ -374,7 +377,6 @@ function defocusSearchBar() {
clearInputTimeout();
ev.preventDefault();
hideSearchResults(search);
document.title = titleBeforeSearch;
}
defocusSearchBar();
hideThemeButtonState();
Expand Down Expand Up @@ -1791,7 +1793,7 @@ function defocusSearchBar() {
}

// Update document title to maintain a meaningful browser history
document.title = "Results for " + query.query + " - Rust";
searchTitle = "Results for " + query.query + " - Rust";

// Because searching is incremental by character, only the most
// recent search query is added to the browser history.
Expand Down Expand Up @@ -2745,6 +2747,7 @@ function defocusSearchBar() {
"",
"?search=" + encodeURIComponent(search_input.value));
}
document.title = searchTitle;
}
}

Expand Down
24 changes: 24 additions & 0 deletions src/test/rustdoc-ui/error-in-impl-trait/const-generics.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
// check-pass
// edition:2018
#![feature(min_const_generics)]
trait ValidTrait {}

/// This has docs
pub fn extern_fn<const N: usize>() -> impl Iterator<Item = [u8; N]> {
loop {}
}

pub trait Trait<const N: usize> {}
impl Trait<1> for u8 {}
impl Trait<2> for u8 {}
impl<const N: usize> Trait<N> for [u8; N] {}

/// This also has docs
pub fn test<const N: usize>() -> impl Trait<N> where u8: Trait<N> {
loop {}
}

/// Document all the functions
pub async fn a_sink<const N: usize>(v: [u8; N]) -> impl Trait<N> {
loop {}
}
18 changes: 18 additions & 0 deletions src/test/rustdoc/const-generics/auxiliary/extern_crate.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
// edition:2018
#![feature(min_const_generics)]

pub fn extern_fn<const N: usize>() -> impl Iterator<Item = [u8; N]> {
[[0; N]; N].iter().copied()
}

pub struct ExternTy<const N: usize> {
pub inner: [u8; N],
}

pub type TyAlias<const N: usize> = ExternTy<N>;

pub trait WTrait<const N: usize, const M: usize> {
fn hey<const P: usize>() -> usize {
N + M + P
}
}
130 changes: 130 additions & 0 deletions src/test/rustdoc/const-generics/const-generics-docs.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
// edition:2018
// aux-build: extern_crate.rs
#![feature(min_const_generics)]
#![crate_name = "foo"]

extern crate extern_crate;
// @has foo/fn.extern_fn.html '//pre[@class="rust fn"]' \
// 'pub fn extern_fn<const N: usize>() -> impl Iterator<Item = [u8; N]>'
pub use extern_crate::extern_fn;
// @has foo/struct.ExternTy.html '//pre[@class="rust struct"]' \
// 'pub struct ExternTy<const N: usize> {'
pub use extern_crate::ExternTy;
// @has foo/type.TyAlias.html '//pre[@class="rust typedef"]' \
// 'type TyAlias<const N: usize> = ExternTy<N>;'
pub use extern_crate::TyAlias;
// @has foo/trait.WTrait.html '//pre[@class="rust trait"]' \
// 'pub trait WTrait<const N: usize, const M: usize>'
// @has - '//*[@class="rust trait"]' 'fn hey<const P: usize>() -> usize'
pub use extern_crate::WTrait;

// @has foo/trait.Trait.html '//pre[@class="rust trait"]' \
// 'pub trait Trait<const N: usize>'
// @has - '//*[@id="impl-Trait%3C1_usize%3E-for-u8"]//code' 'impl Trait<1_usize> for u8'
// @has - '//*[@id="impl-Trait%3C2_usize%3E-for-u8"]//code' 'impl Trait<2_usize> for u8'
// @has - '//*[@id="impl-Trait%3C{1%20+%202}%3E-for-u8"]//code' 'impl Trait<{1 + 2}> for u8'
// @has - '//*[@id="impl-Trait%3CN%3E-for-%5Bu8%3B%20N%5D"]//code' \
// 'impl<const N: usize> Trait<N> for [u8; N]'
pub trait Trait<const N: usize> {}
impl Trait<1> for u8 {}
impl Trait<2> for u8 {}
impl Trait<{1 + 2}> for u8 {}
impl<const N: usize> Trait<N> for [u8; N] {}

// @has foo/struct.Foo.html '//pre[@class="rust struct"]' \
// 'pub struct Foo<const N: usize> where u8: Trait<N>'
pub struct Foo<const N: usize> where u8: Trait<N>;
// @has foo/struct.Bar.html '//pre[@class="rust struct"]' 'pub struct Bar<T, const N: usize>(_)'
pub struct Bar<T, const N: usize>([T; N]);

// @has foo/struct.Foo.html '//h3[@id="impl"]/code' 'impl<const M: usize> Foo<M> where u8: Trait<M>'
impl<const M: usize> Foo<M> where u8: Trait<M> {
// @has - '//*[@id="associatedconstant.FOO_ASSOC"]' 'pub const FOO_ASSOC: usize'
pub const FOO_ASSOC: usize = M + 13;

// @has - '//*[@id="method.hey"]' 'pub fn hey<const N: usize>(&self) -> Bar<u8, N>'
pub fn hey<const N: usize>(&self) -> Bar<u8, N> {
Bar([0; N])
}
}

// @has foo/struct.Bar.html '//h3[@id="impl"]/code' 'impl<const M: usize> Bar<u8, M>'
impl<const M: usize> Bar<u8, M> {
// @has - '//*[@id="method.hey"]' \
// 'pub fn hey<const N: usize>(&self) -> Foo<N> where u8: Trait<N>'
pub fn hey<const N: usize>(&self) -> Foo<N> where u8: Trait<N> {
Foo
}
}

// @has foo/fn.test.html '//pre[@class="rust fn"]' \
// 'pub fn test<const N: usize>() -> impl Trait<N> where u8: Trait<N>'
pub fn test<const N: usize>() -> impl Trait<N> where u8: Trait<N> {
2u8
}

// @has foo/fn.a_sink.html '//pre[@class="rust fn"]' \
// 'pub async fn a_sink<const N: usize>(v: [u8; N]) -> impl Trait<N>'
pub async fn a_sink<const N: usize>(v: [u8; N]) -> impl Trait<N> {
v
}

// @has foo/fn.b_sink.html '//pre[@class="rust fn"]' \
// 'pub async fn b_sink<const N: usize>(__arg0: impl Trait<N>)'
// FIXME(const_generics): This should be `_` not `__arg0`.
pub async fn b_sink<const N: usize>(_: impl Trait<N>) {}

// @has foo/fn.concrete.html '//pre[@class="rust fn"]' \
// 'pub fn concrete() -> [u8; 22]'
pub fn concrete() -> [u8; 3 + std::mem::size_of::<u64>() << 1] {
Default::default()
}

// @has foo/type.Faz.html '//pre[@class="rust typedef"]' \
// 'type Faz<const N: usize> = [u8; N];'
pub type Faz<const N: usize> = [u8; N];
// @has foo/type.Fiz.html '//pre[@class="rust typedef"]' \
// 'type Fiz<const N: usize> = [[u8; N]; 48];'
pub type Fiz<const N: usize> = [[u8; N]; 3 << 4];

macro_rules! define_me {
($t:tt<$q:tt>) => {
pub struct $t<const $q: usize>([u8; $q]);
}
}

// @has foo/struct.Foz.html '//pre[@class="rust struct"]' \
// 'pub struct Foz<const N: usize>(_);'
define_me!(Foz<N>);

trait Q {
const ASSOC: usize;
}

impl<const N: usize> Q for [u8; N] {
const ASSOC: usize = N;
}

// @has foo/fn.q_user.html '//pre[@class="rust fn"]' \
// 'pub fn q_user() -> [u8; 13]'
pub fn q_user() -> [u8; <[u8; 13] as Q>::ASSOC] {
[0; <[u8; 13] as Q>::ASSOC]
}

// @has foo/union.Union.html '//pre[@class="rust union"]' \
// 'pub union Union<const N: usize>'
pub union Union<const N: usize> {
// @has - //pre "pub arr: [u8; N]"
pub arr: [u8; N],
// @has - //pre "pub another_arr: [(); N]"
pub another_arr: [(); N],
}

// @has foo/enum.Enum.html '//pre[@class="rust enum"]' \
// 'pub enum Enum<const N: usize>'
pub enum Enum<const N: usize> {
// @has - //pre "Variant([u8; N])"
Variant([u8; N]),
// @has - //pre "EmptyVariant"
EmptyVariant,
}
15 changes: 15 additions & 0 deletions src/test/ui/const-generics/associated-type-bound-fail.full.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
error[E0277]: the trait bound `u16: Bar<N>` is not satisfied
--> $DIR/associated-type-bound-fail.rs:14:5
|
LL | type Assoc: Bar<N>;
| ------ required by this bound in `Foo::Assoc`
...
LL | type Assoc = u16;
| ^^^^^^^^^^^^^^^^^ the trait `Bar<N>` is not implemented for `u16`
|
= help: the following implementations were found:
<u16 as Bar<3_usize>>

error: aborting due to previous error

For more information about this error, try `rustc --explain E0277`.
15 changes: 15 additions & 0 deletions src/test/ui/const-generics/associated-type-bound-fail.min.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
error[E0277]: the trait bound `u16: Bar<N>` is not satisfied
--> $DIR/associated-type-bound-fail.rs:14:5
|
LL | type Assoc: Bar<N>;
| ------ required by this bound in `Foo::Assoc`
...
LL | type Assoc = u16;
| ^^^^^^^^^^^^^^^^^ the trait `Bar<N>` is not implemented for `u16`
|
= help: the following implementations were found:
<u16 as Bar<3_usize>>

error: aborting due to previous error

For more information about this error, try `rustc --explain E0277`.
17 changes: 17 additions & 0 deletions src/test/ui/const-generics/associated-type-bound-fail.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
// revisions: full min
#![cfg_attr(full, allow(incomplete_features))]
#![cfg_attr(full, feature(const_generics))]
#![cfg_attr(min, feature(min_const_generics))]

trait Bar<const N: usize> {}

trait Foo<const N: usize> {
type Assoc: Bar<N>;
}

impl Bar<3> for u16 {}
impl<const N: usize> Foo<N> for i16 {
type Assoc = u16; //~ ERROR the trait bound `u16: Bar<N>`
}

fn main() {}
24 changes: 24 additions & 0 deletions src/test/ui/const-generics/associated-type-bound.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
// run-pass
// revisions: full min
#![cfg_attr(full, allow(incomplete_features))]
#![cfg_attr(full, feature(const_generics))]
#![cfg_attr(min, feature(min_const_generics))]

trait Bar<const N: usize> {}

trait Foo<const N: usize> {
type Assoc: Bar<N>;
}

impl<const N: usize> Bar<N> for u8 {}
impl Bar<3> for u16 {}

impl<const N: usize> Foo<N> for i8 {
type Assoc = u8;
}

impl Foo<3> for i16 {
type Assoc = u16;
}

fn main() {}
19 changes: 19 additions & 0 deletions src/test/ui/const-generics/auxiliary/crayte.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
// edition:2018
#![cfg_attr(full, feature(const_generics))]
#![cfg_attr(full, allow(incomplete_features))]
#![cfg_attr(min, feature(min_const_generics))]

pub trait Foo<const N: usize> {}
struct Local;
impl<const N: usize> Foo<N> for Local {}

pub fn out_foo<const N: usize>() -> impl Foo<N> { Local }
pub fn in_foo<const N: usize>(_: impl Foo<N>) {}

pub async fn async_simple<const N: usize>(_: [u8; N]) {}
pub async fn async_out_foo<const N: usize>() -> impl Foo<N> { Local }
pub async fn async_in_foo<const N: usize>(_: impl Foo<N>) {}

pub trait Bar<const N: usize> {
type Assoc: Foo<N>;
}
Loading

0 comments on commit 7f5a42b

Please sign in to comment.