Skip to content

infinite recursion ICE #52701

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

Closed
DutchGhost opened this issue Jul 25, 2018 · 18 comments
Closed

infinite recursion ICE #52701

DutchGhost opened this issue Jul 25, 2018 · 18 comments
Assignees
Labels
A-diagnostics Area: Messages for errors, warnings, and lints A-impl-trait Area: `impl Trait`. Universally / existentially quantified anonymous types with static dispatch. C-bug Category: This is a bug. I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️ regression-from-stable-to-stable Performance or correctness regression from one stable version to another. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.

Comments

@DutchGhost
Copy link
Contributor

DutchGhost commented Jul 25, 2018

The following ICE's on nightly and beta, both on debug and release mode:

fn rec() -> impl Fn() { rec() }

fn main() {
    let f = rec();
}

Stable refuses to compile:

 Compiling playground v0.0.1 (file:///playground)
warning: function cannot return without recurring
 --> src/main.rs:2:1
  |
2 | fn rec() -> impl Fn() { rec() }
  | ^^^^^^^^^^^^^^^^^^^^^   ----- recursive call site
  | |
  | cannot return without recurring
  |
  = note: #[warn(unconditional_recursion)] on by default
  = help: a `loop` may express intention better if this is on purpose

error[E0275]: overflow evaluating the requirement `impl std::ops::Fn<()>`
  |
  = help: consider adding a `#![recursion_limit="128"]` attribute to your crate

error: aborting due to previous error

For more information about this error, try `rustc --explain E0275`.
error: Could not compile `playground`.

To learn more, run the command again with --verbose.

in a way, this is related to #28728 (LLVM optimization bug)

ICE message:

error: internal compiler error: librustc\traits\query\normalize.rs:124: infinite recursion generic_ty: impl std::ops::Fn<()>, substs: [], concrete_ty: impl std::ops::Fn<()>, ty: impl std::ops::Fn<()>
Backtrace: ``` thread 'main' panicked at 'Box', librustc_errors\lib.rs:557:9 stack backtrace: 0: ::drop 1: std::error::> for alloc::boxed::Box<(dyn std::error::Error + core::marker::Send + core::marker::Sync + 'a)>>::from 2: std::panicking::take_hook 3: std::panicking::take_hook 4: ::fmt 5: std::panicking::rust_panic_with_hook 6: ::fmt 7: rustc_errors::Handler::bug 8: as core::clone::Clone>::clone 9: rustc::ty::context::tls::track_diagnostic 10: rustc::ty::context::tls::track_diagnostic 11: rustc::ty::context::tls::track_diagnostic 12: rustc::session::bug_fmt 13: rustc::session::bug_fmt 14: as rustc::ty::fold::TypeFolder<'gcx, 'tcx>>::fold_ty 15: as rustc_traits::lowering::Lower>>>::lower 16: as rustc_traits::lowering::Lower>>>::lower 17: as rustc::ty::context::Lift<'tcx>>::lift_to_tcx 18: rustc_traits::provide 19: as core::fmt::Debug>::fmt 20: rustc::ty::context::tls::track_diagnostic 21: rustc::dep_graph::graph::DepGraph::assert_ignored 22: rustc::ty::context::tls::track_diagnostic 23: rustc::ty::query::plumbing::>::try_print_query_stack 24: rustc::ty::query::plumbing::>::try_print_query_stack 25: as rustc::ty::fold::TypeFolder<'tcx, 'tcx>>::fold_ty 26: as rustc::mir::visit::Visitor<'tcx>>::visit_terminator_kind 27: rustc_mir::monomorphize::collector::collect_crate_mono_items 28: >::visit_local 29: ::fmt 30: rustc_mir::monomorphize::collector::collect_crate_mono_items 31: 32: ::next 33: rustc::ty::context::tls::track_diagnostic 34: rustc::dep_graph::graph::DepGraph::assert_ignored 35: rustc::ty::context::tls::track_diagnostic 36: rustc::ty::query::plumbing::>::try_print_query_stack 37: rustc::ty::query::plumbing::>::try_print_query_stack 38: ::codegen_crate 39: >::visit_item 40: rustc_driver::driver::phase_4_codegen 41: >::visit_impl_item 42: >::visit_impl_item 43: >::visit_item 44: ::fmt 45: rustc_driver::driver::compile_input 46: rustc_driver::run_compiler 47: rustc_driver::target_features::add_configuration 48: >::visit_impl_item 49: _rust_maybe_catch_panic 50: rustc_driver::profile::dump 51: rustc_driver::main 52: 53: std::panicking::update_panic_count 54: _rust_maybe_catch_panic 55: std::rt::lang_start_internal 56: 57: 58: BaseThreadInitThunk 59: RtlUserThreadStart query stack during panic: #0 [normalize_ty_after_erasing_regions] normalizing `ParamEnvAnd { param_env: ParamEnv { caller_bounds: [], reveal: All }, value: impl std::ops::Fn<()> }` #1 [collect_and_partition_mono_items] collect_and_partition_mono_items end of query stack error: aborting due to previous error

note: the compiler unexpectedly panicked. this is a bug.

note: we would appreciate a bug report: https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md#bug-reports

note: rustc 1.29.0-nightly (874dec2 2018-07-21) running on x86_64-pc-windows-msvc

note: compiler flags: -C opt-level=3 --crate-type bin

note: some of the compiler flags provided by cargo are hidden

error: Could not compile llvm-opt-ice.

To learn more, run the command again with --verbose.

</details>
@DutchGhost DutchGhost changed the title Nightly Release mode ICE infinite recursion ICE Jul 25, 2018
@DutchGhost
Copy link
Contributor Author

DutchGhost commented Jul 25, 2018

A slighty more interesting example might be this:

fn rec() -> *const impl Copy {
    // This should *NEVER* run, but just to trigger the recursion
    if false {
        rec()
        
    } else {

        0u8 as *const _ // cast is needed to make compiler happy about the types
    }
}

fn main() {
    rec();
}

As far as I know, in this example the type that implements Copy is the u8, however it is being cast to...something

@estebank estebank added I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️ A-impl-trait Area: `impl Trait`. Universally / existentially quantified anonymous types with static dispatch. labels Jul 26, 2018
@DutchGhost
Copy link
Contributor Author

DutchGhost commented Jul 28, 2018

With the 2018's async fn, it fails to compile, complaining about recursion limit.

However when inserting an await!(), it still crashes:

#![feature(futures_api)]
#![feature(async_await)]
#![feature(await_macro)]

use std::future::Future;

async fn rec() -> impl Future { await!(rec()) }

fn main() {
    
    rec();
}

@DutchGhost
Copy link
Contributor Author

DutchGhost commented Aug 2, 2018

as of 1.28, this also ICE's on stable:

Backtrace:
warning: function cannot return without recurring
   --> src\lib.rs:173:5
    |
173 |     pub fn infinite_recursion() -> impl Fn() { infinite_recursion() }
    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^   -------------------- recursive call site
    |     |
    |     cannot return without recurring
    |
    = note: #[warn(unconditional_recursion)] on by default
    = help: a `loop` may express intention better if this is on purpose

thread 'main' panicked at 'assertion failed: `(left != right)`
  left: `impl std::ops::Fn<()>`,
 right: `impl std::ops::Fn<()>`: infinite recursion', librustc\traits\query\normalize.rs:130:25
stack backtrace:
   0: <std::sync::mpsc::select::Select as core::fmt::Debug>::fmt
   1: std::stdsimd::arch::detect::os::check_for
   2: std::panicking::take_hook
   3: std::panicking::take_hook
   4: <rustc::ty::query::on_disk_cache::CacheEncoder<'enc, 'a, 'tcx, serialize::opaque::Encoder<'enc>> as serialize::serialize::SpecializedEncoder<rustc::ich::fingerprint::Fingerprint>>::specialized_encode
   5: std::panicking::rust_panic_with_hook
   6: std::panicking::begin_panic_fmt
   7: std::panicking::begin_panic_fmt
   8: <rustc::traits::query::normalize::QueryNormalizer<'cx, 'gcx, 'tcx> as rustc::ty::fold::TypeFolder<'gcx, 'tcx>>::fold_ty
   9: rustc_traits::provide
  10: <rustc_traits::chalk_context::ConstrainedSubst<'a> as rustc::ty::context::Lift<'tcx>>::lift_to_tcx
  11: <rustc::ty::Predicate<'tcx> as rustc_traits::lowering::Lower<rustc::ty::sty::Binder<rustc::traits::DomainGoal<'tcx>>>>::lower
  12: <unknown>
  13: rustc::ty::query::on_disk_cache::__ty_decoder_impl::<impl serialize::serialize::Decoder for rustc::ty::query::on_disk_cache::CacheDecoder<'a, 'tcx, 'x>>::read_str
  14: rustc::ty::context::tls::track_diagnostic
  15: rustc::ty::context::tls::track_diagnostic
  16: rustc::dep_graph::graph::DepGraph::assert_ignored
  17: rustc::ty::context::tls::track_diagnostic
  18: rustc::ty::query::plumbing::<impl rustc::ty::context::TyCtxt<'a, 'gcx, 'tcx>>::try_print_query_stack
  19: rustc::ty::query::plumbing::<impl rustc::ty::context::TyCtxt<'a, 'gcx, 'tcx>>::try_print_query_stack
  20: <rustc::traits::query::normalize_erasing_regions::NormalizeAfterErasingRegionsFolder<'cx, 'tcx> as rustc::ty::fold::TypeFolder<'tcx, 'tcx>>::fold_ty
  21: <rustc_mir::monomorphize::collector::MirNeighborCollector<'a, 'tcx> as rustc::mir::visit::Visitor<'tcx>>::visit_terminator_kind
  22: rustc_mir::monomorphize::collector::collect_crate_mono_items
  23: rustc_mir::monomorphize::collector::collect_crate_mono_items
  24: rustc_mir::monomorphize::collector::collect_crate_mono_items
  25: <rustc_codegen_llvm::time_graph::TimelineId as core::fmt::Debug>::fmt
  26: <rustc_codegen_llvm::base::ValueIter as core::iter::iterator::Iterator>::next
  27: rustc::ty::context::tls::track_diagnostic
  28: rustc::ty::context::tls::track_diagnostic
  29: rustc::dep_graph::graph::DepGraph::assert_ignored
  30: rustc::ty::context::tls::track_diagnostic
  31: rustc::ty::query::plumbing::<impl rustc::ty::context::TyCtxt<'a, 'gcx, 'tcx>>::try_print_query_stack
  32: rustc::ty::query::plumbing::<impl rustc::ty::context::TyCtxt<'a, 'gcx, 'tcx>>::try_print_query_stack
  33: <rustc_codegen_llvm::back::linker::MsvcLinker<'a> as rustc_codegen_llvm::back::linker::Linker>::finalize
  34: rustc::ty::context::tls::track_diagnostic
  35: rustc::ty::context::tls::track_diagnostic
  36: rustc::dep_graph::graph::DepGraph::assert_ignored
  37: rustc::ty::context::tls::track_diagnostic
  38: rustc::ty::query::plumbing::<impl rustc::ty::context::TyCtxt<'a, 'gcx, 'tcx>>::try_print_query_stack
  39: rustc::ty::query::plumbing::<impl rustc::ty::context::TyCtxt<'a, 'gcx, 'tcx>>::try_print_query_stack
  40: <rustc_metadata::encoder::ImplVisitor<'a, 'tcx> as rustc::hir::itemlikevisit::ItemLikeVisitor<'v>>::visit_item
  41: rustc_metadata::cstore_impl::<impl rustc::middle::cstore::CrateStore for rustc_metadata::cstore::CStore>::encode_metadata
  42: rustc::ty::context::TyCtxt::encode_metadata
  43: rustc_codegen_llvm::base::codegen_instance
  44: <rustc_codegen_llvm::time_graph::TimelineId as core::fmt::Debug>::fmt
  45: <rustc_codegen_llvm::base::ValueIter as core::iter::iterator::Iterator>::next
  46: <rustc_codegen_llvm::LlvmCodegenBackend as rustc_codegen_utils::codegen_backend::CodegenBackend>::codegen_crate
  47: rustc_driver::driver::build_output_filenames
  48: rustc_driver::driver::phase_4_codegen
  49: rustc_driver::profile::dump
  50: <rustc_driver::derive_registrar::Finder as rustc::hir::itemlikevisit::ItemLikeVisitor<'v>>::visit_impl_item
  51: <rustc_driver::pretty::IdentifiedAnnotation<'hir> as rustc_driver::pretty::PrinterSupport>::sess
  52: <unknown>
  53: rustc_driver::driver::compile_input
  54: rustc_driver::run_compiler
  55: rustc_driver::target_features::add_configuration
  56: <rustc_driver::pretty::IdentifiedAnnotation<'hir> as rustc_driver::pretty::PrinterSupport>::sess
  57: _rust_maybe_catch_panic
  58: <rustc_driver::derive_registrar::Finder as rustc::hir::itemlikevisit::ItemLikeVisitor<'v>>::visit_item
  59: rustc_driver::main
  60: <unknown>
  61: std::panicking::update_panic_count
  62: _rust_maybe_catch_panic
  63: std::rt::lang_start_internal
  64: <unknown>
  65: <unknown>
  66: BaseThreadInitThunk
  67: RtlUserThreadStart
query stack during panic:
#0 [normalize_ty_after_erasing_regions] normalizing `ParamEnvAnd { param_env: ParamEnv { caller_bounds: [], reveal: All }, value: impl std::ops::Fn<()> }`
#1 [collect_and_partition_mono_items] collect_and_partition_mono_items
#2 [exported_symbols] exported_symbols
end of query stack

error: internal compiler error: unexpected panic

note: the compiler unexpectedly panicked. this is a bug.

note: we would appreciate a bug report: https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md#bug-reports

note: rustc 1.28.0 (9634041f0 2018-07-30) running on x86_64-pc-windows-msvc

note: compiler flags: -C debuginfo=2 -C incremental --crate-type lib

note: some of the compiler flags provided by cargo are hidden

error: Could not compile `test_bugs`.

To learn more, run the command again with --verbose.

@earthengine
Copy link

I can see how this happen - the compiler working hard to find a type to wrap with impl Fn() etc, but it is never given. As there is already a warning issues for the recusing nature, I guess we can default the type to ! in such a detectable case?

@pietroalbini pietroalbini added I-nominated T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. regression-from-stable-to-stable Performance or correctness regression from one stable version to another. C-bug Category: This is a bug. labels Sep 13, 2018
@eddyb
Copy link
Member

eddyb commented Sep 13, 2018

Where's the ICE? All I'm seeing is an error - you have a cyclic dependency in types.

EDIT: oh, the ICE is hidden in the backtrace, it's this (I'll also edit the issue description):

error: internal compiler error: librustc\traits\query\normalize.rs:124: infinite recursion generic_ty: impl std::ops::Fn<()>, substs: [], concrete_ty: impl std::ops::Fn<()>, ty: impl std::ops::Fn<()>

@pnkfelix
Copy link
Member

discussed at meeting. P-high. Assigning to @nikomatsakis

@pnkfelix pnkfelix added P-high High priority and removed I-nominated labels Sep 13, 2018
@pnkfelix
Copy link
Member

visited for triage. I might work-steal this.

@pnkfelix
Copy link
Member

On the playground currently, I see an ICE on stable, but no ICE on beta or nightly.

Playground links:

I suspect this has been fixed, and the only question is whether we want to try to find a backport.

I will try to at least bisect to where this was fixed.

@pnkfelix
Copy link
Member

Did some bisection. Unfortunately we don't have nightlies from nightly-2018-08-{20,21,22,23}-x86_64-unknown-linux-gnu...

But the ICE replicates with nightly-2018-08-19-x86_64-unknown-linux-gnu, and goes away with nightly-2018-08-24-x86_64-unknown-linux-gnu:

More complete transcript in details block:

% cat issue-52701.rs
fn rec() -> impl Fn() { rec() }

fn main() {
    let f = rec();
}
% rustup override set nightly-2018-08-19-x86_64-unknown-linux-gnu
info: using existing install for 'nightly-2018-08-19-x86_64-unknown-linux-gnu'
info: override toolchain for '/home/pnkfelix/Dev/Mozilla/issue52701' set to 'nightly-2018-08-19-x86_64-unknown-linux-gnu'

  nightly-2018-08-19-x86_64-unknown-linux-gnu unchanged - rustc 1.30.0-nightly (33b923fd4 2018-08-18)

% rustc --version
rustc 1.30.0-nightly (33b923fd4 2018-08-18)
% rustc issue-52701.rs
warning: unused variable: `f`
 --> issue-52701.rs:4:9
  |
4 |     let f = rec();
  |         ^ help: consider using `_f` instead
  |
  = note: #[warn(unused_variables)] on by default

warning: function cannot return without recurring
 --> issue-52701.rs:1:1
  |
1 | fn rec() -> impl Fn() { rec() }
  | ^^^^^^^^^^^^^^^^^^^^^   ----- recursive call site
  | |
  | cannot return without recurring
  |
  = note: #[warn(unconditional_recursion)] on by default
  = help: a `loop` may express intention better if this is on purpose

error: internal compiler error: librustc/traits/query/normalize.rs:124: infinite recursion generic_ty: impl std::ops::Fn<()>, substs: [], concrete_ty: impl std::ops::Fn<()>, ty: impl std::ops::Fn<()>

thread 'main' panicked at 'Box<Any>', librustc_errors/lib.rs:579:9
note: Run with `RUST_BACKTRACE=1` for a backtrace.
error: aborting due to previous error


note: the compiler unexpectedly panicked. this is a bug.

note: we would appreciate a bug report: https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md#bug-reports

note: rustc 1.30.0-nightly (33b923fd4 2018-08-18) running on x86_64-unknown-linux-gnu

% rustup override set nightly-2018-08-24-x86_64-unknown-linux-gnu
info: using existing install for 'nightly-2018-08-24-x86_64-unknown-linux-gnu'
info: override toolchain for '/home/pnkfelix/Dev/Mozilla/issue52701' set to 'nightly-2018-08-24-x86_64-unknown-linux-gnu'

  nightly-2018-08-24-x86_64-unknown-linux-gnu unchanged - rustc 1.30.0-nightly (63d66494a 2018-08-23)

% rustc --version
rustc 1.30.0-nightly (63d66494a 2018-08-23)
% rustc issue-52701.rs
error[E0391]: cycle detected when processing `rec::{{impl-Trait}}`
 --> issue-52701.rs:1:13
  |
1 | fn rec() -> impl Fn() { rec() }
  |             ^^^^^^^^^
  |
note: ...which requires processing `rec`...
 --> issue-52701.rs:1:23
  |
1 | fn rec() -> impl Fn() { rec() }
  |                       ^^^^^^^^^
  = note: ...which again requires processing `rec::{{impl-Trait}}`, completing the cycle

error: aborting due to previous error

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

@pnkfelix
Copy link
Member

pnkfelix commented Sep 26, 2018

And in this details block is the git log output covering the commit series between the aforementioned builds of rustc:

% git log 33b923fd4..63d66494a produces:

�[33mcommit 63d6649�[m
Merge: 5ce5e08 cd8fcb6
Author: bors [email protected]
Date: Thu Aug 23 22:52:29 2018 +0000

Auto merge of #53638 - flip1995:clippy, r=nrc

Update clippy

r? @oli-obk @Manishearth

�[33mcommit cd8fcb6�[m
Author: flip1995 [email protected]
Date: Thu Aug 23 23:31:55 2018 +0200

Update clippy again

�[33mcommit 5ce5e08�[m
Merge: 54d82d0 7440125
Author: bors [email protected]
Date: Thu Aug 23 20:34:12 2018 +0000

Auto merge of #53588 - tristanburgess:52985_diagnostics_no_concrete_type_behind_existential_type, r=oli-obk

52985 diagnostics no concrete type behind existential type

@oli-obk FYI. See below for new cycle error generated.

```rust
error[E0391]: cycle detected when processing `Foo`
 --> /dev/staging/existential_type_no_concrete_type_nouse_potential.rs:3:1
  |
3 | existential type Foo: Copy;
  | ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  |
note: ...which requires processing `bar`...
 --> /dev/staging/existential_type_no_concrete_type_nouse_potential.rs:6:23
  |
6 |   fn bar(x: Foo) -> Foo {
  |  _______________________^
7 | |     x
8 | | }
  | |_^
  = note: ...which again requires processing `Foo`, completing the cycle

error: aborting due to previous error

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

�[33mcommit 54d82d0�[m
Merge: e5284b0 f8d5ed4
Author: bors [email protected]
Date: Thu Aug 23 17:13:44 2018 +0000

Auto merge of #53571 - MaloJaffre:vecdeque-emergency, r=RalfJung

Fix unsoundness for VecDeque

 See individual commit for more details.

r? @RalfJung.

Fixes https://github.com/rust-lang/rust/issues/53566, fixes https://github.com/rust-lang/rust/issues/53529

�[33mcommit e5284b0�[m
Merge: 35bf1ae 4d81fe9
Author: bors [email protected]
Date: Thu Aug 23 14:40:22 2018 +0000

Auto merge of #53384 - gootorov:use-servo-smallvec, r=michaelwoerister

Use optimized SmallVec implementation

This PR replaces current SmallVec implementation with the one from the Servo project.

Closes https://github.com/rust-lang/rust/issues/51640

r? @Mark-Simulacrum

�[33mcommit 65c0ebd�[m
Author: flip1995 [email protected]
Date: Thu Aug 23 16:00:04 2018 +0200

Update clippy

�[33mcommit 35bf1ae�[m
Merge: 827e57c 0095471
Author: bors [email protected]
Date: Thu Aug 23 11:46:24 2018 +0000

Auto merge of #52602 - scottmcm:tryblock-expr, r=nikomatsakis

Implement try block expressions

I noticed that `try` wasn't a keyword yet in Rust 2018, so...

~~Fix​es https://github.com/rust-lang/rust/issues/52604~~ That was fixed by PR https://github.com/rust-lang/rust/pull/53135
cc https://github.com/rust-lang/rust/issues/31436 https://github.com/rust-lang/rust/issues/50412

�[33mcommit 827e57c�[m
Merge: c648b0b b34503e
Author: bors [email protected]
Date: Thu Aug 23 08:38:22 2018 +0000

Auto merge of #53459 - petrochenkov:stabmore, r=nrc

Stabilize a few secondary macro features

- `tool_attributes` - closes https://github.com/rust-lang/rust/issues/44690
- `proc_macro_path_invoc` - this feature was created due to issues with tool attributes (https://github.com/rust-lang/rust/issues/51277), those issues are now fixed (https://github.com/rust-lang/rust/pull/52841)
- partially `proc_macro_gen` - this feature was created due to issue https://github.com/rust-lang/rust/issues/50504, the issue is now fixed (https://github.com/rust-lang/rust/pull/51952), so proc macros can generate modules. They still can't generate `macro_rules` items though due to unclear hygiene interactions.

�[33mcommit 4d81fe9�[m
Author: Igor Gutorov [email protected]
Date: Mon Aug 13 22:15:16 2018 +0300

Use optimized SmallVec implementation

�[33mcommit c648b0b�[m
Merge: e73077e 83d5a60
Author: bors [email protected]
Date: Thu Aug 23 06:34:11 2018 +0000

Auto merge of #53235 - varkor:gat_impl_where, r=estebank

Feature gate where clauses on associated type impls

Fixes #52913. This doesn't address the core problem, which is tracked by https://github.com/rust-lang/rust/issues/47206. However, it fixes the stable-to-stable regression: you now have to enable `#![feature(generic_associated_types)]` to trigger the weird behaviour.

�[33mcommit e73077e�[m
Merge: 917945d e7e9f2e
Author: bors [email protected]
Date: Thu Aug 23 02:54:24 2018 +0000

Auto merge of #53520 - nnethercote:merge-IdxSet-IdxSetBuf, r=nikomatsakis

Merge `IdxSet` and `IdxSetBuf`

Because it simplifies things.

@r? nikomatsakis

�[33mcommit 7440125�[m
Author: Tristan Burgess [email protected]
Date: Wed Aug 22 00:24:03 2018 -0400

52985: formatting PR files

�[33mcommit 3045ffa�[m
Author: Tristan Burgess [email protected]
Date: Wed Aug 22 00:02:07 2018 -0400

52985: better cycle error for existential types
  - Original cycle error diagnostics PR'd against this issue caught
panic-causing error while resolving std::mem::transmute calls
  - Now, catch invalid use case of not providing a concrete sized type
behind existential type in definining use case.
  - Update relevant test to reflect this new error

52985: revert normalize query changes
      - PR 53588 invalidates 53316, causing a correct cycle error to occur
    with a good span.
      - Don't need to revert the whole merge as the test files are
    still fine, just need to revert the normalize query changes.
      - It should now be correct that infinite recursion detected during
    normalize query type folding is a bug, should have been caught earlier
    (when resolving the existential type's defining use cases).

52985: code review impl
  - Only cause cycle error if anonymous type resolves to anonymous type
that has the same def id (is the same type) as the original (parent)
type.
  - Add test case to cover this case for existential types.

52985: remove Ty prefix from TyAnon
  - To align with changes per commit 6f637da50c56a22f745fd056691da8c86824cd9b

�[33mcommit b34503e�[m
Author: Vadim Petrochenkov [email protected]
Date: Sat Aug 18 00:52:34 2018 +0300

Stabilize a few secondary macro features

`tool_attributes`, `proc_macro_path_invoc`, partially `proc_macro_gen`

�[33mcommit 917945d�[m
Merge: f1b506a bd6ae6a
Author: bors [email protected]
Date: Wed Aug 22 22:08:03 2018 +0000

Auto merge of #52011 - oli-obk:dont_you_hate_it_too_when_everything_panics_constantly, r=eddyb

Allow panicking with string literal messages inside constants

r? @eddyb

cc https://github.com/rust-lang/rust/issues/51999

we can't implement things like `panic!("foo: {}", x)` right now because we can't call trait methods (most notably `Display::fmt`) inside constants. Also most of these impls probably have loops and conditions, so it's messy anyway.

But hey `panic!("foo")` works at least.

cc @japaric got any test ideas for `#![no_std]`?

�[33mcommit f1b506a�[m
Merge: b75b047 f012b4c
Author: bors [email protected]
Date: Wed Aug 22 19:59:52 2018 +0000

Auto merge of #53607 - GuillaumeGomez:rollup, r=GuillaumeGomez

Rollup of 10 pull requests

Successful merges:

 - #53418 (Mark some suggestions as MachineApplicable)
 - #53431 (Moved some feature gate ui tests to correct location)
 - #53442 (Update version of rls-data used with save-analysis)
 - #53504 (Set applicability for more suggestions.)
 - #53541 (Fix missing impl trait display as ret type)
 - #53544 (Point at the trait argument when using unboxed closure)
 - #53558 (Normalize source line and column numbers.)
 - #53562 (Lament the invincibility of the Turbofish)
 - #53574 (Suggest direct raw-pointer dereference)
 - #53585 (Remove super old comment on function that parses items)

Failed merges:

 - #53472 (Use FxHash{Map,Set} instead of the default Hash{Map,Set} everywhere in rustc.)
 - #53563 (use String::new() instead of String::from(""), "".to_string(), "".to_owned() or "".into())

r? @ghost

�[33mcommit b75b047�[m
Merge: c24f27c 71722b9
Author: bors [email protected]
Date: Wed Aug 22 17:43:44 2018 +0000

Auto merge of #53581 - varkor:tyvariants-rename, r=eddyb

Rename TyVariants and variants

- Rename `TypeVariants` to `TyKind`.
- Remove the `Ty` prefix from each one of its variants (plus the identically-named variants of `PrimTy`).
- Rename `ty::Slice` to `ty::List`.

The new names look cleaner.

r? @eddyb

�[33mcommit bd6ae6a�[m
Author: Oliver Schneider [email protected]
Date: Mon Aug 13 14:27:29 2018 +0200

Reexpose stability hole in the presence of feature gates

�[33mcommit bb78426�[m
Author: Oliver Schneider [email protected]
Date: Mon Aug 13 13:48:47 2018 +0200

Allow panicking with string literal messages inside constants

�[33mcommit f012b4c�[m
Merge: 4f78a2d cf1b6d6
Author: Guillaume Gomez [email protected]
Date: Wed Aug 22 17:45:43 2018 +0200

Rollup merge of #53585 - dtolnay:comment, r=Mark-Simulacrum

Remove super old comment on function that parses items

This comment was added more than 5 years ago in ab03c1e4221. As far as anyone reading this comment today needs to know, the function has never parsed items from inside an extern crate.

�[33mcommit 4f78a2d�[m
Merge: ef4b2ed 18f41e5
Author: Guillaume Gomez [email protected]
Date: Wed Aug 22 17:45:41 2018 +0200

Rollup merge of #53574 - vorner:ptr_as_ref_unchecked, r=Mark-Simulacrum

Suggest direct raw-pointer dereference

People often come looking for some kind of `as_ref_unchecked` method on
raw pointers that would give them `&T` and not `Option<&T>` when they
are sure the pointer is not NULL.

There's no such method, but taking a reference of the dereferenced
pointer accomplishes the same thing. Therefore, suggest using that, at
the `as_ref` site ‒ it's a place people are likely going to look into.

�[33mcommit ef4b2ed�[m
Merge: 95bdc65 3d5fef6
Author: Guillaume Gomez [email protected]
Date: Wed Aug 22 17:45:39 2018 +0200

Rollup merge of #53562 - varkor:bastion-of-the-turbofish, r=nagisa

Lament the invincibility of the Turbofish

Here a test case is added to ensure that any others attempting to drive the Turbofish to extinction have second thoughts. Previously the [entire test suite would succeed](https://github.com/rust-lang/rust/pull/53511) if generic arguments were accepted without disambiguation, making for [confusing and heartbreaking circumstances](https://github.com/rust-lang/rfcs/pull/2527).

�[33mcommit 95bdc65�[m
Merge: e53a575 6e24868
Author: Guillaume Gomez [email protected]
Date: Wed Aug 22 17:45:38 2018 +0200

Rollup merge of #53558 - davidtwco:issue-53547, r=estebank

Normalize source line and column numbers.

Fixes #53547.

r? @eddyb

�[33mcommit e53a575�[m
Merge: 3d8e760 05d19fb
Author: Guillaume Gomez [email protected]
Date: Wed Aug 22 17:45:37 2018 +0200

Rollup merge of #53544 - estebank:issue-53534, r=varkor

Point at the trait argument when using unboxed closure

Fix #53534.

r? @varkor

�[33mcommit 3d8e760�[m
Merge: 4fa4bb5 e67bba8
Author: Guillaume Gomez [email protected]
Date: Wed Aug 22 17:45:36 2018 +0200

Rollup merge of #53541 - GuillaumeGomez:fix-impl-trait-ret-type, r=oli-obk

Fix missing impl trait display as ret type

I need to convert a `TraitPredicate` into a `TraitBound` to get the returned impl trait. So far, didn't find how or even if it was the good way to do it.

cc @eddyb @oli-obk (since you're the one behind the change apparently 😉)

�[33mcommit 4fa4bb5�[m
Merge: 55d9823 5a23a0d
Author: Guillaume Gomez [email protected]
Date: Wed Aug 22 17:45:34 2018 +0200

Rollup merge of #53504 - ekse:suggestions-applicability-2, r=estebank

Set applicability for more suggestions.

Converts a couple more calls to `span_suggestion_with_applicability`  (#50723). To be on the safe side, I marked suggestions that depend on the intent of the user or that are potentially lossy conversions as MaybeIncorrect.

r? @estebank

�[33mcommit 55d9823�[m
Merge: da86fbd a50f29a
Author: Guillaume Gomez [email protected]
Date: Wed Aug 22 17:45:32 2018 +0200

Rollup merge of #53442 - staktrace:rlsbump, r=nrc

Update version of rls-data used with save-analysis

This part 1/3 for fixing rust-lang/rust#53440.

�[33mcommit da86fbd�[m
Merge: 8255f9e 9511ffe
Author: Guillaume Gomez [email protected]
Date: Wed Aug 22 17:45:31 2018 +0200

Rollup merge of #53431 - alexreg:move-feature-gate-tests, r=cramertj

Moved some feature gate ui tests to correct location

None

�[33mcommit 8255f9e�[m
Merge: 329dde5 e665715
Author: Guillaume Gomez [email protected]
Date: Wed Aug 22 17:45:29 2018 +0200

Rollup merge of #53418 - ekse:suggestions-applicability, r=estebank

Mark some suggestions as MachineApplicable

I think the following suggestions should be safe to mark as `MachineApplicable`.

r? @estebank

�[33mcommit c24f27c�[m
Merge: 329dde5 0447b50
Author: bors [email protected]
Date: Wed Aug 22 15:29:07 2018 +0000

Auto merge of #53536 - RalfJung:array-drop, r=eddyb

fix array drop glue: properly turn raw ptr into reference

Discovered while working on https://github.com/rust-lang/rust/pull/53424: The generated drop glue uses an assignment `ptr = cur` where `ptr` is a reference and `cur` a raw pointer. This is not well-formed MIR.

Do we have MIR sanity checks that run on the drop glue and should have caught this?

r? @eddyb

�[33mcommit 71722b9�[m
Author: varkor [email protected]
Date: Wed Aug 22 11:54:46 2018 +0100

Fix rebase issues

�[33mcommit d0209c4�[m
Author: varkor [email protected]
Date: Wed Aug 22 11:47:31 2018 +0100

Replace TyForeign with ForeignTy

�[33mcommit 05cfb3f�[m
Author: varkor [email protected]
Date: Wed Aug 22 02:13:31 2018 +0100

Rename Def::{Param, Foreign} to Def::{TyParam, TyForeign}

�[33mcommit 08f3685�[m
Author: varkor [email protected]
Date: Wed Aug 22 02:08:01 2018 +0100

Remove unnecessary TyKind::s

�[33mcommit 8a5dccd�[m
Author: varkor [email protected]
Date: Wed Aug 22 01:35:55 2018 +0100

Remove Ty prefix from Ty{Bool|Char|Int|Uint|Float|Str}

�[33mcommit 04fa5d3�[m
Author: varkor [email protected]
Date: Wed Aug 22 01:35:29 2018 +0100

Remove Ty prefix from Ty{Foreign|Param}

�[33mcommit 6f637da�[m
Author: varkor [email protected]
Date: Wed Aug 22 01:35:02 2018 +0100

Remove Ty prefix from Ty{Adt|Array|Slice|RawPtr|Ref|FnDef|FnPtr|Dynamic|Closure|Generator|GeneratorWitness|Never|Tuple|Projection|Anon|Infer|Error}

�[33mcommit d37cee3�[m
Author: varkor [email protected]
Date: Wed Aug 22 01:34:12 2018 +0100

Rename ty::TyVariants to ty::TyKind

�[33mcommit 87c7e57�[m
Author: varkor [email protected]
Date: Wed Aug 22 00:35:01 2018 +0100

Rename ty::Slice to ty::List

�[33mcommit 3d5fef6�[m
Author: varkor [email protected]
Date: Tue Aug 21 14:44:36 2018 +0100

Lament the invincibility of the Turbofish

�[33mcommit 329dde5�[m
Merge: 674ef66 9d54bf8
Author: bors [email protected]
Date: Wed Aug 22 13:16:32 2018 +0000

Auto merge of #53524 - alexcrichton:buffer-out, r=eddyb

Buffer LLVM's object output stream

In some profiling on OSX I saw the `write` syscall as quite high up on
the profiling graph, which is definitely not good! It looks like we're
setting the output stream of an object file as directly to a file
descriptor which means that we run the risk of doing lots of little
writes rather than a few large writes.

This commit fixes this issue by adding a buffered stream on the output,
causing the `write` syscall to disappear from the profiles on OSX.

�[33mcommit f8d5ed4�[m
Author: MaloJaffre [email protected]
Date: Wed Aug 22 10:22:21 2018 +0200

Add a test for issue #53529

�[33mcommit b85e4cc�[m
Author: MaloJaffre [email protected]
Date: Tue Aug 21 19:50:05 2018 +0200

Fix unsoundness in VecDeque Debug impls

Fixes #53566.

�[33mcommit 674ef66�[m
Merge: 71a1ef1 4fec615
Author: bors [email protected]
Date: Wed Aug 22 11:11:14 2018 +0000

Auto merge of #53424 - RalfJung:miri-refactor, r=oli-obk

CTFE engine refactor

* Value gets renamed to `Operand`, so that now `interpret::{Place, Operand}` are the "dynamic" versions of `mir::{Place, Operand}`.
* `Operand` and `Place` share the data for their "stuff is in memory"-base in a new type, `MemPlace`. This also makes it possible to give some more precise types in other areas. Both `Operand` and `MemPlace` have methods available to project into fields (and other kinds of projections) without causing further allocations.
* The type for "a `Scalar` or a `ScalarPair`" is called `Value`, and again used to give some more precise types.
* All of these have versions with an attached layout, so that we can more often drag the layout along instead of recomputing it. This lets us get rid of `PlaceExtra::Downcast`. `MPlaceTy` and `PlaceTy` can only be constructed in place.rs, making sure the layout is handled properly. (The same should eventually be done for `ValTy` and `OpTy`.)
 This is used to check, when copying an operand to a place, that the sizes match (which caught a bunch of bugs).
* All the high-level functions to write typed memory take a `Place`, and live in `place.rs`. All the high-level typed functions to read typed memory take an `Operand`, and live in `operands.rs`.
* Remove `cur_frame` and handling of signedess from memory (catching a bug in the float casting code).
* [Only functional change] Enable sanity check to recurse below dyn traits and slices.

r? @oli-obk

Cc @eddyb

�[33mcommit 4fec615�[m
Author: Ralf Jung [email protected]
Date: Wed Aug 22 12:02:09 2018 +0200

fix error reporting in validation

�[33mcommit 899bc14�[m
Author: Ralf Jung [email protected]
Date: Wed Aug 22 11:27:38 2018 +0200

fix validating fat pointers to user-defined unsized types

�[33mcommit 14dc780�[m
Author: Ralf Jung [email protected]
Date: Mon Aug 20 22:39:08 2018 +0200

fix a comment in validity

�[33mcommit f3e7efc�[m
Author: Ralf Jung [email protected]
Date: Mon Aug 20 20:08:37 2018 +0200

fix layout sanity check

�[33mcommit 128c634�[m
Author: Ralf Jung [email protected]
Date: Mon Aug 20 20:08:24 2018 +0200

also avoid recomputing the layout for unary and binary ops, where possible

�[33mcommit 54c81ac�[m
Author: Ralf Jung [email protected]
Date: Mon Aug 20 15:21:04 2018 +0200

in a Use statement, exploit the fact that type and hence layout are the same for LHS and RHS

�[33mcommit 8ad4047�[m
Author: Ralf Jung [email protected]
Date: Sun Aug 19 17:01:31 2018 +0200

optimize creating a stack frame

�[33mcommit c3d392f�[m
Author: Ralf Jung [email protected]
Date: Sun Aug 19 12:03:58 2018 +0200

fix validating fat raw pointers

�[33mcommit 49999e9�[m
Author: Ralf Jung [email protected]
Date: Sat Aug 18 13:46:52 2018 +0200

optimize sanity check path printing

During the sanity check, we keep track of the path we are below in a `Vec`.  We
avoid cloning that `Vec` unless we hit a pointer indirection.  The `String`
representation is only computed when validation actually fails.

�[33mcommit 42a1239�[m
Author: Ralf Jung [email protected]
Date: Sat Aug 18 11:53:15 2018 +0200

avoid some redundant alignment checks

�[33mcommit e3b4f8e�[m
Author: Ralf Jung [email protected]
Date: Sat Aug 18 11:11:40 2018 +0200

better error message when using NULL in to_ptr

�[33mcommit 0b8c691�[m
Author: Ralf Jung [email protected]
Date: Fri Aug 17 21:25:59 2018 +0200

fix UI tests

�[33mcommit 956b51f�[m
Author: Ralf Jung [email protected]
Date: Fri Aug 17 17:47:37 2018 +0200

optimize validation iterating over the elements of an array

This is still roughly 45ns slower than the old state, because it now works with
an MPlaceTy and uses the appropriate abstractions, instead of working with a
ptr-align pair directly.

�[33mcommit 6f5cf12�[m
Author: Ralf Jung [email protected]
Date: Fri Aug 17 12:39:36 2018 +0200

test for detecting bad data inside trait objects / slices

�[33mcommit ad8deba�[m
Author: Ralf Jung [email protected]
Date: Fri Aug 17 12:31:50 2018 +0200

fix formatting nits

�[33mcommit 5099933�[m
Author: Ralf Jung [email protected]
Date: Fri Aug 17 12:18:02 2018 +0200

move validation to its own file

�[33mcommit 71a1ef1�[m
Merge: 24bc544 7e8825b
Author: bors [email protected]
Date: Wed Aug 22 09:03:25 2018 +0000

Auto merge of #53516 - petrochenkov:derregr, r=estebank

resolve: Continue search in outer scopes after applying derive resolution fallback

Fixes https://github.com/rust-lang/rust/issues/53263

�[33mcommit 241b9b4�[m
Author: MaloJaffre [email protected]
Date: Wed Aug 22 09:06:24 2018 +0200

Revert "Auto merge of #52553 - Pazzaz:vecdeque-append, r=SimonSapin"

This partially reverts commit d5b6b95aef94169b5dbe4dbb1357d4bab1fc9800,
reversing changes made to 6b1ff19af36f7bbf1974579ec1b9bf2c8ccd595e.

Fixes #53529.
Cc: #53564.

�[33mcommit f2aeb5b�[m
Author: Ralf Jung [email protected]
Date: Thu Aug 16 17:41:19 2018 +0200

fix operator handling when using 128bit intrinsics

�[33mcommit aa760a5�[m
Author: Ralf Jung [email protected]
Date: Thu Aug 16 11:38:16 2018 +0200

finally remove all traces of signs from memory

�[33mcommit b1df2ae�[m
Author: Ralf Jung [email protected]
Date: Thu Aug 16 10:30:56 2018 +0200

fix computing layout when calling virtual fn

�[33mcommit 730098b�[m
Author: Ralf Jung [email protected]
Date: Thu Aug 16 09:36:53 2018 +0200

avoid allocating for ZST

�[33mcommit ad009ae�[m
Author: Ralf Jung [email protected]
Date: Thu Aug 16 09:36:44 2018 +0200

fix using copy_op to transmute

�[33mcommit 23d86b0�[m
Author: Ralf Jung [email protected]
Date: Thu Aug 16 09:36:25 2018 +0200

try_read_value_from_ptr -> try_read_value_from_mplace

�[33mcommit 61e7ba1�[m
Author: Ralf Jung [email protected]
Date: Thu Aug 16 09:05:01 2018 +0200

fix dynamically determining size and alignment

�[33mcommit e314a4e�[m
Author: Ralf Jung [email protected]
Date: Thu Aug 16 00:41:26 2018 +0200

fix accessing unsized fields

�[33mcommit 1e137a7�[m
Author: Ralf Jung [email protected]
Date: Thu Aug 16 00:18:09 2018 +0200

fix drop typing; use same machinery for validating (sanity checking) dyn trait ptrs and slices

�[33mcommit 09b15e9�[m
Author: Ralf Jung [email protected]
Date: Wed Aug 15 22:39:39 2018 +0200

fix dropping with vtables

�[33mcommit e860ab2�[m
Author: Ralf Jung [email protected]
Date: Wed Aug 15 20:18:40 2018 +0200

Tweak logging

- The logging in step.rs becomes debug! to make it stand out a bit more
- Dump value of operands (in `eval_operands`)
- Try to log a bit less verbose

�[33mcommit 0807ad1�[m
Author: Ralf Jung [email protected]
Date: Wed Aug 15 20:22:28 2018 +0200

fix union field access and DST computations and dumping of places

�[33mcommit 689c711�[m
Author: Ralf Jung [email protected]
Date: Wed Aug 15 20:21:59 2018 +0200

remove cur_frame from memory (validation is gone, new validation will not need it)

�[33mcommit 7483ea8�[m
Author: Ralf Jung [email protected]
Date: Tue Aug 14 20:38:30 2018 +0200

generalize truncate and sign_extend to take a Size

�[33mcommit ad2de8b�[m
Author: Ralf Jung [email protected]
Date: Mon Aug 13 16:14:22 2018 +0200

miri/CTFE refactor

* Value gets renamed to Operand, so that now interpret::{Place, Operand} are the
  "dynamic" versions of mir::{Place, Operand}.
* Operand and Place share the data for their "stuff is in memory"-base in a new
  type, MemPlace.  This also makes it possible to give some more precise types
  in other areas.  Both Operand and MemPlace have methods available to project
  into fields (and other kinds of projections) without causing further
  allocations.
* The type for "a Scalar or a ScalarPair" is called Value, and again used to
  give some more precise types.
* All of these have versions with an attached layout, so that we can more often
  drag the layout along instead of recomputing it.  This lets us get rid of
  `PlaceExtra::Downcast`.  MPlaceTy and PlaceTy can only be constructed
  in place.rs, making sure the layout is handled properly.
  (The same should eventually be done for ValTy and OpTy.)
* All the high-level functions to write typed memory take a Place, and live in
  place.rs.  All the high-level typed functions to read typed memory take an
  Operand, and live in operands.rs.

�[33mcommit 24bc544�[m
Merge: 786ccc3 7b47fd7
Author: bors [email protected]
Date: Wed Aug 22 06:54:22 2018 +0000

Auto merge of #53509 - petrochenkov:wildregr, r=alexcrichton

resolve: Reject some inaccessible candidates sooner during import resolution

This allows import resolution to progress in cases like #53140

Fixes #53140

�[33mcommit 7d4f5f7�[m
Author: Ralf Jung [email protected]
Date: Thu Aug 9 15:04:53 2018 +0200

Move some value-and-memory related things out of eval_context

�[33mcommit 786ccc3�[m
Merge: a79cffb d6426e8
Author: bors [email protected]
Date: Wed Aug 22 03:01:14 2018 +0000

Auto merge of #53477 - ftilde:exec-rust-gdb-lldb, r=michaelwoerister

Exec gdb/lldb in rust-{gdb/lldb} wrapper scripts

This way, the process we get by executing `rust-gdb` or `rust-lldb` (eventually) is an actual `gdb` or `lldb` process and behaves accordingly. Previously (and at least to me unexpectedly) it was just a script waiting for the debugger to exit. Sending a signal (e.g. SIGINT) to the spawned process did therefore not affect the debugger process (which was just a child of the wrapper script).

In order to work around that we `exec` (according to [this](http://pubs.opengroup.org/onlinepubs/009695399/utilities/exec.html) part of the posix shell) and replace the script process with the debugger in the last line of the script. The lldb script had to be modified to not pass the configuration commands via a script file (which in my opinion is cleaner anyway).

�[33mcommit cf1b6d6�[m
Author: David Tolnay [email protected]
Date: Tue Aug 21 21:46:56 2018 -0400

Remove super old comment on function that parses items

This comment was added more than 5 years ago in ab03c1e4221. As far as
anyone reading this comment today needs to know, the function has never
parsed items from inside an extern crate.

�[33mcommit a79cffb�[m
Merge: 1cbf339 6971c5d
Author: bors [email protected]
Date: Wed Aug 22 00:57:00 2018 +0000

Auto merge of #50912 - varkor:exhaustive-integer-matching, r=arielb1

Exhaustive integer matching

This adds a new feature flag `exhaustive_integer_patterns` that enables exhaustive matching of integer types by their values. For example, the following is now accepted:
```rust
#![feature(exhaustive_integer_patterns)]
#![feature(exclusive_range_pattern)]

fn matcher(x: u8) {
  match x { // ok
    0 .. 32 => { /* foo */ }
    32 => { /* bar */ }
    33 ..= 255 => { /* baz */ }
  }
}
```
This matching is permitted on all integer (signed/unsigned and char) types. Sensible error messages are also provided. For example:
```rust
fn matcher(x: u8) {
  match x { //~ ERROR
    0 .. 32 => { /* foo */ }
  }
}
```
results in:
```
error[E0004]: non-exhaustive patterns: `32u8...255u8` not covered
 --> matches.rs:3:9
  |
6 |   match x {
  |         ^ pattern `32u8...255u8` not covered
```

This implements https://github.com/rust-lang/rfcs/issues/1550 for https://github.com/rust-lang/rust/issues/50907. While there hasn't been a full RFC for this feature, it was suggested that this might be a feature that obviously complements the existing exhaustiveness checks (e.g. for `bool`) and so a feature gate would be sufficient for now.

�[33mcommit 6971c5d�[m
Author: varkor [email protected]
Date: Tue Aug 21 23:55:57 2018 +0100

Add some extra edge case tests

�[33mcommit 1cbf339�[m
Merge: d0d81b7 985da80
Author: bors [email protected]
Date: Tue Aug 21 22:48:21 2018 +0000

Auto merge of #53439 - GuillaumeGomez:generate-blanket-impls-for-reexported-items, r=QuietMisdreavus

Generate blanket implementations for reexported items as well

Fixes #53374.

r? @QuietMisdreavus

�[33mcommit dec5563�[m
Author: varkor [email protected]
Date: Tue Aug 21 23:27:45 2018 +0100

Use a boundary method instead of an endpoint method for split_grouped_constructors

�[33mcommit e67bba8�[m
Author: Guillaume Gomez [email protected]
Date: Tue Aug 21 00:43:02 2018 +0200

Fix missing impl trait display as ret type

�[33mcommit d0d81b7�[m
Merge: 2d6d3ac 82619ea
Author: bors [email protected]
Date: Tue Aug 21 20:33:31 2018 +0000

Auto merge of #53471 - petrochenkov:biattr2, r=oli-obk

resolve: Some macro resolution refactoring

Work towards completing https://github.com/rust-lang/rust/pull/50911#issuecomment-411605393

The last commit also fixes https://github.com/rust-lang/rust/issues/53269 by not using `def_id()` on `Def::Err` and also fixes https://github.com/rust-lang/rust/issues/53512.

�[33mcommit 6a957e1�[m
Author: varkor [email protected]
Date: Tue Aug 21 21:04:19 2018 +0100

Add a test case for u128::MAX - 1

�[33mcommit 2d6d3ac�[m
Merge: 9f9f2c0 1695856
Author: bors [email protected]
Date: Tue Aug 21 18:16:43 2018 +0000

Auto merge of #53444 - varkor:lib_features-conditional, r=michaelwoerister

Only fetch lib_features when there are unknown feature attributes

An attempt to win back some of the performance lost in https://github.com/rust-lang/rust/pull/52644#issuecomment-413761127.

cc @nnethercote

�[33mcommit 18f41e5�[m
Author: Michal 'vorner' Vaner [email protected]
Date: Tue Aug 21 19:57:59 2018 +0200

Suggest direct raw-pointer dereference

People often come looking for some kind of `as_ref_unchecked` method on
raw pointers that would give them `&T` and not `Option<&T>` when they
are sure the pointer is not NULL.

There's no such method, but taking a reference of the dereferenced
pointer accomplishes the same thing. Therefore, suggest using that, at
the `as_ref` site ‒ it's a place people are likely going to look into.

�[33mcommit 9f9f2c0�[m
Merge: a9d4967 e3887e6
Author: bors [email protected]
Date: Tue Aug 21 16:04:11 2018 +0000

Auto merge of #53530 - kennytm:rollup, r=kennytm

Rollup of 17 pull requests

Successful merges:

 - #53030 (Updated RELEASES.md for 1.29.0)
 - #53104 (expand the documentation on the `Unpin` trait)
 - #53213 (Stabilize IP associated constants)
 - #53296 (When closure with no arguments was expected, suggest wrapping)
 - #53329 (Replace usages of ptr::offset with ptr::{add,sub}.)
 - #53363 (add individual docs to `core::num::NonZero*`)
 - #53370 (Stabilize macro_vis_matcher)
 - #53393 (Mark libserialize functions as inline)
 - #53405 (restore the page title after escaping out of a search)
 - #53452 (Change target triple used to check for lldb in build-manifest)
 - #53462 (Document Box::into_raw returns non-null ptr)
 - #53465 (Remove LinkMeta struct)
 - #53492 (update lld submodule to include RISCV patch)
 - #53496 (Fix typos found by codespell.)
 - #53521 (syntax: Optimize some literal parsing)
 - #53540 (Moved issue-53157.rs into src/test/ui/consts/const-eval/)
 - #53551 (Avoid some Place clones.)

Failed merges:

r? @ghost

�[33mcommit e3887e6�[m
Merge: 0dd88c9 c0636ab
Author: kennytm [email protected]
Date: Tue Aug 21 22:09:35 2018 +0800

Rollup merge of #53551 - nnethercote:access_place_error_reported, r=varkor

Avoid some Place clones.

This is a 0.5% speedup on ripgrep.

�[33mcommit 0dd88c9�[m
Merge: 9bbab65 993fb93
Author: kennytm [email protected]
Date: Tue Aug 21 22:05:30 2018 +0800

Rollup merge of #53329 - frewsxcv:frewsxcv-ptr-add-sub, r=RalfJung

Replace usages of ptr::offset with ptr::{add,sub}.

Rust provides these helper methods – so let's use them!

�[33mcommit a9d4967�[m
Merge: 70c33bb e221fcc
Author: bors [email protected]
Date: Tue Aug 21 13:52:11 2018 +0000

Auto merge of #53236 - alexreg:stabilise-raw-idents, r=cramertj

Stabilise raw_identifiers feature

* [Reference PR](https://github.com/rust-lang-nursery/reference/pull/395)
* [Book PR](https://github.com/rust-lang/book/pull/1480)
* [Rust by Example PR](https://github.com/rust-lang/rust-by-example/pull/1095)

Closes #48589.

r? @cramertj
CC @cuviper @centril

�[33mcommit 6e24868�[m
Author: David Wood [email protected]
Date: Tue Aug 21 12:57:11 2018 +0200

Normalize source line and column numbers.

This commit adds a normalization for line and column numbers in stderr
files where the line/col is from the source directory rather than
the test itself - thereby removing the need to update tests as
compiler source changes.

�[33mcommit 9bbab65�[m
Merge: dc8e9fb 6b597ce
Author: kennytm [email protected]
Date: Tue Aug 21 17:48:45 2018 +0800

Rollup merge of #53540 - TheDarkula:move-test, r=oli-obk

Moved issue-53157.rs into src/test/ui/consts/const-eval/

�[33mcommit dc8e9fb�[m
Merge: fed4298 6ae915b
Author: kennytm [email protected]
Date: Tue Aug 21 17:47:29 2018 +0800

Rollup merge of #53104 - nivkner:unpin_doc, r=RalfJung

expand the documentation on the `Unpin` trait

provides an overview of the Pin API which the trait is for,
and show how it can be used in making self referencial structs

part of #49150

�[33mcommit fed4298�[m
Merge: 7896ac3 de35b66
Author: kennytm [email protected]
Date: Tue Aug 21 11:09:03 2018 +0800

Rollup merge of #53462 - estk:doc-Box_into_raw, r=steveklabnik

Document Box::into_raw returns non-null ptr

Closes  #52806.

�[33mcommit 7896ac3�[m
Merge: 4457180 687cc98
Author: kennytm [email protected]
Date: Tue Aug 21 11:08:28 2018 +0800

Rollup merge of #53363 - llogiq:num-individual-nonzero-docs, r=steveklabnik

add individual docs to `core::num::NonZero*`

�[33mcommit 4457180�[m
Merge: b5519db 5bf2ad3
Author: kennytm [email protected]
Date: Tue Aug 21 11:07:45 2018 +0800

Rollup merge of #53521 - alexcrichton:optimize-lit-token, r=michaelwoerister

syntax: Optimize some literal parsing

Currently in the `wasm-bindgen` project we have a very very large crate that's
procedurally generated, `web-sys`. To generate this crate we parse all of a
browser's WebIDL and we then generate bindings for all of the APIs contained
within.

The resulting Rust file is 18MB large (wow!) and currently takes a very long
time to compile in debug mode. On the nightly compiler a *debug* build takes 90s
for the crate to finish. I was curious what was taking so long and upon
investigating a *massive* portion of the time was spent in the `lit_token`
method of the compiler, primarily formatting strings via `format!`.

Upon some more investigation it looks like the `byte_str_lit` was allocating an
error message once per byte, causing a very large number of allocations to
happen for large literals, of which wasm-bindgen generates quite a few (some are
MB large).

This commit fixes the issue by lazily allocating the error message, only doing
so if the error message is actually needed (which should be never). As a result,
the debug mode compilation time for our `web-sys` crate decreased from 90s to
20s, a very nice improvement! (although we've still got some work to do).

�[33mcommit b5519db�[m
Merge: 0834a1a 71120ef
Author: kennytm [email protected]
Date: Tue Aug 21 01:20:25 2018 +0800

Rollup merge of #53496 - matthiaskrgr:codespell_08_2018, r=varkor

Fix typos found by codespell.

�[33mcommit 0834a1a�[m
Merge: 5d4a25d 99bba34
Author: kennytm [email protected]
Date: Tue Aug 21 01:20:24 2018 +0800

Rollup merge of #53492 - danc86:lld-riscv, r=alexcrichton

update lld submodule to include RISCV patch

This pulls in one new commit, to add support for linking static RISCV
binaries, suitable for the new riscv32imac-unknown-none-elf target.
See: https://github.com/rust-lang/lld/pull/1

�[33mcommit 5d4a25d�[m
Merge: c980ba7 d52047f
Author: kennytm [email protected]
Date: Tue Aug 21 01:20:21 2018 +0800

Rollup merge of #53465 - bjorn3:remove_link_meta_struct, r=varkor

Remove LinkMeta struct

Fixes #53291

�[33mcommit c980ba7�[m
Merge: 2a0d720 c37787e
Author: kennytm [email protected]
Date: Tue Aug 21 01:20:19 2018 +0800

Rollup merge of #53452 - tromey:lldb-manifest-fix, r=alexcrichton

Change target triple used to check for lldb in build-manifest

The wrong target triple was used for lldb in build-manifest.  lldb is
only built for macOS, so update the triple to reflect that.

This is an attempt to fix bug#48168.

�[33mcommit 2a0d720�[m
Merge: b21e956 2075509
Author: kennytm [email protected]
Date: Tue Aug 21 01:20:18 2018 +0800

Rollup merge of #53405 - oconnor663:search_esc, r=GuillaumeGomez

restore the page title after escaping out of a search

Currently if I start a search in the docs, but then hit ESC, the "Results for..." title is still there in my browser tab. This is a simple attempt to fix that. I see that there's a separate `var previousTitle = document.title` thing happening in `startSearch()`, but as far as I can tell that's only related to the back stack? I'd also appreciate feedback on the right place to declare the `titleBeforeSearch` variable.

Testing-wise, I've confirmed by hand that the tab title restores correctly after building with `./x.py doc --stage 1 src/libstd`, but nothing more involved than that. What else should I test?

�[33mcommit b21e956�[m
Merge: f9e3af7 1540e8c
Author: kennytm [email protected]
Date: Tue Aug 21 01:20:16 2018 +0800

Rollup merge of #53393 - BurntPizza:serialize-inlines, r=alexcrichton

Mark libserialize functions as inline

Got to thinking: "what if that big pile of tiny functions isn't inlining as it should?"
So a few `replace-regex` later the local perf run says this:
<details>

![](https://i.imgur.com/gvdJEgG.png)
</details>
Not huge, but still a win, which is interesting. Want to verify with the real perf run, but I understand there's a backlog.

I didn't notice any increase in compile time or binary sizes for rustc/libs.

�[33mcommit f9e3af7�[m
Merge: ffde96c 00920c0
Author: kennytm [email protected]
Date: Tue Aug 21 01:20:15 2018 +0800

Rollup merge of #53370 - jkozlowski:stabilize-macro_vis_matcher, r=cramertj

Stabilize macro_vis_matcher

This PR should stabilize [macro_vis_matcher](https://github.com/rust-lang/rust/issues/41022) feature.

- [ ] "reference" book changes: https://github.com/rust-lang-nursery/reference/pull/400
- [ ] "Rust by example" book changes: https://github.com/rust-lang/rust-by-example/pull/1096
- [ ] "clippy" changes: https://github.com/rust-lang-nursery/rust-clippy/pull/3055

r? @cramertj

�[33mcommit c0636ab�[m
Author: Nicholas Nethercote [email protected]
Date: Tue Aug 21 18:06:55 2018 +1000

Avoid some Place clones.

This is a 0.5% speedup on ripgrep.

�[33mcommit 70c33bb�[m
Merge: 1558ae7 79a905e
Author: bors [email protected]
Date: Tue Aug 21 06:40:20 2018 +0000

Auto merge of #53080 - hermord:rc-opt, r=alexcrichton

Change `Rc::inc_{weak,strong}` to better hint optimization to LLVM

As discussed in #13018, `Rc::inc_strong` and `Rc::inc_weak` are changed to allow compositions of `clone` and `drop` to be better optimized. Almost entirely as in [this comment](https://github.com/rust-lang/rust/issues/13018#issuecomment-408642184), except that `abort` on zero is added so that a `drop(t.clone())` does not produce a zero check followed by conditional deallocation.

This is different from #21418 in that it doesn't rely on `assume`, avoiding the prohibitive compilation slowdown.

[Before and after IR](https://gist.github.com/hermord/266e55451b7fe0bb8caa6e35d17c86e1).

�[33mcommit 1695856�[m
Author: varkor [email protected]
Date: Tue Aug 21 01:39:48 2018 +0100

Iterate through all crates in stability.rs rather than lib_features.rs

�[33mcommit 61b6363�[m
Author: varkor [email protected]
Date: Tue Aug 21 00:16:12 2018 +0100

Add more detail to the split_grouped_constructors comment

�[33mcommit 05d19fb�[m
Author: Esteban Küber [email protected]
Date: Mon Aug 20 16:16:17 2018 -0700

Point at the trait argument when using unboxed closure

�[33mcommit c421af9�[m
Author: varkor [email protected]
Date: Mon Aug 20 23:59:46 2018 +0100

Add assertion to constructor_intersects_pattern

�[33mcommit 6e8a625�[m
Author: varkor [email protected]
Date: Mon Aug 20 23:32:01 2018 +0100

Remove pattern consideration from split_grouped_constructors

�[33mcommit 87463c3�[m
Author: varkor [email protected]
Date: Mon Aug 20 23:16:15 2018 +0100

Improve some comments

�[33mcommit 82619ea�[m
Author: Vadim Petrochenkov [email protected]
Date: Tue Aug 21 00:34:30 2018 +0300

resolve: Unify reporting of ambiguity errors for macro paths

�[33mcommit 6b597ce�[m
Author: thedarkula [email protected]
Date: Mon Aug 20 20:02:34 2018 +0100

Moved issue-53157.rs into src/test/ui/consts/const-eval/

�[33mcommit e221fcc�[m
Author: Alexander Regueiro [email protected]
Date: Thu Aug 9 21:51:12 2018 +0100

Removed `raw_identifiers` feature gate.

�[33mcommit c2788a8�[m
Author: Vadim Petrochenkov [email protected]
Date: Sat Aug 18 02:38:51 2018 +0300

resolve: Refactor away `MacroBinding`

`fn resolve_legacy_scope` can now resolve only to `macro_rules!` items,
`fn resolve_lexical_macro_path_segment` is for everything else - modularized macros, preludes

�[33mcommit 23e9a1d�[m
Author: Vadim Petrochenkov [email protected]
Date: Wed Aug 15 03:51:12 2018 +0300

resolve: Consolidate error reporting for resolved macros in `fn resolve_macro_to_def`

�[33mcommit 3a44ee6�[m
Author: Vadim Petrochenkov [email protected]
Date: Mon Aug 13 02:57:19 2018 +0300

resolve: Move derive attribute detection closer to other macro ident resolution code

Refactor away `fn resolve_invoc_to_def`

�[33mcommit 0447b50�[m
Author: Ralf Jung [email protected]
Date: Mon Aug 20 21:11:35 2018 +0200

fix array drop glue: properly turn raw ptr into reference

�[33mcommit 5bf2ad3�[m
Author: Alex Crichton [email protected]
Date: Sun Aug 19 21:25:08 2018 -0700

syntax: Optimize some literal parsing

Currently in the `wasm-bindgen` project we have a very very large crate that's
procedurally generated, `web-sys`. To generate this crate we parse all of a
browser's WebIDL and we then generate bindings for all of the APIs contained
within.

The resulting Rust file is 18MB large (wow!) and currently takes a very long
time to compile in debug mode. On the nightly compiler a *debug* build takes 90s
for the crate to finish. I was curious what was taking so long and upon
investigating a *massive* portion of the time was spent in the `lit_token`
method of the compiler, primarily formatting strings via `format!`.

Upon some more investigation it looks like the `byte_str_lit` was allocating an
error message once per byte, causing a very large number of allocations to
happen for large literals, of which wasm-bindgen generates quite a few (some are
MB large).

This commit fixes the issue by lazily allocating the error message, only doing
so if the error message is actually needed (which should be never). As a result,
the debug mode compilation time for our `web-sys` crate decreased from 90s to
20s, a very nice improvement! (although we've still got some work to do).

�[33mcommit ffde96c�[m
Merge: fa3d56a cea73d6
Author: kennytm [email protected]
Date: Tue Aug 21 01:20:12 2018 +0800

Rollup merge of #53296 - estebank:suggest-closure, r=KodrAus

When closure with no arguments was expected, suggest wrapping

Fix #49694.

�[33mcommit fa3d56a�[m
Merge: b51723a e6244e5
Author: kennytm [email protected]
Date: Tue Aug 21 01:20:10 2018 +0800

Rollup merge of #53213 - tmccombs:stable-ipconstructors, r=KodrAus

Stabilize IP associated constants

Fixes #44582

�[33mcommit b51723a�[m
Merge: bf1e461 b4924bf
Author: kennytm [email protected]
Date: Tue Aug 21 01:20:08 2018 +0800

Rollup merge of #53030 - Aaronepower:master, r=Mark-Simulacrum

Updated RELEASES.md for 1.29.0

[Rendered](https://github.com/Aaronepower/rust/blob/master/RELEASES.md)

r? @Mark-Simulacrum
cc @rust-lang/release

�[33mcommit de35b66�[m
Author: Evan Simmons [email protected]
Date: Fri Aug 17 21:21:00 2018 -0600

Document Box::into_raw returns non-null ptr

�[33mcommit 1558ae7�[m
Merge: bf1e461 ee9bd0f
Author: bors [email protected]
Date: Mon Aug 20 15:47:39 2018 +0000

Auto merge of #51880 - varkor:generics-hir-generalisation-followup, r=eddyb

The Great Generics Generalisation: HIR Followup

Addresses the final comments in #48149.

r? @eddyb, but there are a few things I have yet to clean up. Making the PR now to more easily see when things break.

cc @yodaldevoid

�[33mcommit ee9bd0f�[m
Author: varkor [email protected]
Date: Mon Aug 20 16:32:59 2018 +0100

Add a test for skipping all arguments versus just one

�[33mcommit aa3b5c5�[m
Author: varkor [email protected]
Date: Mon Aug 20 12:52:56 2018 +0100

Fix diagnostic regression

�[33mcommit 79a905e�[m
Author: Dmytro Shynkevych [email protected]
Date: Mon Aug 20 11:13:45 2018 -0400

Added explicit optimization flag to test

�[33mcommit 0dd10af�[m
Author: Dmytro Shynkevych [email protected]
Date: Mon Aug 20 07:45:11 2018 -0400

Revert accidental submodule change

�[33mcommit 993fb93�[m
Author: Corey Farwell [email protected]
Date: Sun Aug 19 22:16:22 2018 -0400

Replace usages of ptr::offset with ptr::{add,sub}.

�[33mcommit bf1e461�[m
Merge: 758239c 86641d9
Author: bors [email protected]
Date: Mon Aug 20 09:09:55 2018 +0000

Auto merge of #47562 - Centril:feature/core_convert_id, r=oli-obk

Add the identity function as core::convert::identity

## New notes

This implements rust-lang/rfcs#2306 (see https://github.com/rust-lang/rust/issues/53500).

## Old notes (ignore this in new reviews)

Adds the identity function `fn id<T>(x: T) -> T { x }` to core::convert and the prelude.
Some motivations for why this is useful are explained in the doc tests.
Another is that using the identity function instead of `{ x }` or `|x| x` makes it clear that you intended to use an identity conversion on purpose.

The reasoning:
+ behind adding this to `convert` and not `mem` is that this is an identity *conversion*.
+ for adding this to the prelude is that it should be easy enough to use that the ease of writing your own identity function or using a closure `|x| x` doesn't overtake that.

I've separated this out into two feature gates so that the addition to the prelude can be considered and stabilized separately.

cc @bluss

�[33mcommit 5a23a0d�[m
Author: Sébastien Duquette [email protected]
Date: Sun Aug 19 15:01:33 2018 -0400

Set applicability for more suggestions.

�[33mcommit 86641d9�[m
Author: Mazdak Farrokhzad [email protected]
Date: Mon Aug 20 09:16:56 2018 +0200

core::convert::identity: fix issue number to #53500

�[33mcommit 9d54bf8�[m
Author: Alex Crichton [email protected]
Date: Sun Aug 19 23:44:25 2018 -0700

Buffer LLVM's object output stream

In some profiling on OSX I saw the `write` syscall as quite high up on
the profiling graph, which is definitely not good! It looks like we're
setting the output stream of an object file as directly to a file
descriptor which means that we run the risk of doing lots of little
writes rather than a few large writes.

This commit fixes this issue by adding a buffered stream on the output,
causing the `write` syscall to disappear from the profiles on OSX.

�[33mcommit 758239c�[m
Merge: d2048b6 7e5a2b2
Author: bors [email protected]
Date: Mon Aug 20 06:34:09 2018 +0000

Auto merge of #53519 - Manishearth:clippyup, r=eddyb

Update clippy

r? @oli-obk @eddyb

�[33mcommit 0b83914�[m
Author: Dmytro Shynkevych [email protected]
Date: Mon Aug 20 02:19:28 2018 -0400

Renamed test to match actual issue number

�[33mcommit e7e9f2e�[m
Author: Nicholas Nethercote [email protected]
Date: Fri Aug 17 14:51:39 2018 +1000

Remove IdxSet typedef and Rename {,Hybrid}IdxSetBuf as {,Hybrid}IdxSet.

Now that the `Buf` vs. non-`Buf` distinction has been removed, it makes
sense to drop the `Buf` suffix and use the shorter names everywhere.

�[33mcommit ab8dfbc�[m
Author: Nicholas Nethercote [email protected]
Date: Fri Aug 17 13:32:11 2018 +1000

Merge `IdxSet` and `IdxSetBuf`.

The `Buf` vs. non-`Buf` distinction is no longer necessary, and the
nastiest code in this file can be removed.

To minimize this patch, `IdxSet` is made a typedef of `IdxSetBuf`. The
next patch will remove this typedef.

�[33mcommit 04b50e2�[m
Author: Nicholas Nethercote [email protected]
Date: Fri Aug 17 10:41:14 2018 +1000

Convert `AllSets::on_entry_sets` to a `Vec<IdxSetBuf<E>>`.

This makes it more like `AllSets::{gen,kill}_set`, removes the need for
a bunch of bitset range computations, and removes the need for `Bits`.

It's marginally less efficient, because we have to allocate one bitset
per basic block instead of one large shared bitset, but the difference
is negligible in practice.

�[33mcommit 7e5a2b2�[m
Author: Manish Goregaokar [email protected]
Date: Sun Aug 19 19:17:24 2018 -0700

Update clippy

�[33mcommit d2048b6�[m
Merge: 6bf6d50 a6f4ae8
Author: bors [email protected]
Date: Mon Aug 20 01:12:58 2018 +0000

Auto merge of #52101 - japaric:linker-flavor, r=alexcrichton

try to infer linker flavor from linker name and vice versa

This is a second take on PR #50359 that implements the logic proposed in https://github.com/rust-lang/rust/pull/50359#pullrequestreview-116663121

With this change it would become possible to link `thumb*` binaries using GNU's LD on stable as `-C linker=arm-none-eabi-ld` would be enough to change both the linker and the linker flavor from their default values of `arm-none-eabi-gcc` and `gcc`.

To link `thumb*` binaries using rustc's LLD on stable `-Z linker-flavor` would need to be stabilized as `-C linker=rust-lld -Z linker-flavor=ld.lld` are both required to change the linker and the linker flavor, but this PR doesn't propose that. We would probably need some sort of stability guarantee around `rust-lld`'s name and availability to make linking with rustc's LLD truly stable.

With this change it would also be possible to link `thumb*` binaries using a system installed LLD on stable using the `-C linker=ld.lld` flag (provided that `ld.lld` is a symlink to the system installed LLD).

r? @alexcrichton

�[33mcommit 0095471�[m
Author: Scott McMurray [email protected]
Date: Sun Aug 19 17:51:02 2018 -0700

Switch out another use of `do catch`

�[33mcommit 7e8825b�[m
Author: Vadim Petrochenkov [email protected]
Date: Mon Aug 20 03:35:52 2018 +0300

resolve: Continue search in outer scopes after applying derive resolution fallback

�[33mcommit e428085�[m
Author: Scott McMurray [email protected]
Date: Sun Aug 12 20:05:29 2018 -0700

Make a try-blocks folder for all the try{} UI tests

�[33mcommit 5cf387c�[m
Author: Scott McMurray [email protected]
Date: Sat Jul 28 01:06:11 2018 -0700

Update try-block tests to work under NLL

�[33mcommit 9f683be�[m
Author: Scott McMurray [email protected]
Date: Tue Jul 24 18:03:25 2018 -0700

Rename `catch_expr` feature to `try_blocks`

�[33mcommit 817efc2�[m
Author: Scott McMurray [email protected]
Date: Tue Jul 24 17:55:36 2018 -0700

Suggest `try` if someone uses `do catch`

�[33mcommit 91967a8�[m
Author: Scott McMurray [email protected]
Date: Sun Jul 22 20:52:43 2018 -0700

Put `try` in the reserved list, not the in-use list

�[33mcommit ef19886�[m
Author: Scott McMurray [email protected]
Date: Sat Jul 21 23:23:15 2018 -0700

Fix the unstable book

I ignored the code block as I didn't see a way to run the doctest in 2018 -- I noticed the edition guide is also not testing its 2018 code snippits.

�[33mcommit 9e64ce1�[m
Author: Scott McMurray [email protected]
Date: Sat Jul 21 20:59:44 2018 -0700

Parse try blocks with the try keyword instead of do catch placeholder

�[33mcommit ae81fc6�[m
Author: varkor [email protected]
Date: Mon Aug 20 00:39:58 2018 +0100

Fix ICE

�[33mcommit 1c90609�[m
Author: Scott McMurray [email protected]
Date: Sat Jul 21 19:34:45 2018 -0700

Add `try` to syntax_pos as an edition-2018-only keyword

�[33mcommit f2445fb�[m
Author: Scott McMurray [email protected]
Date: Sat Jul 21 18:47:02 2018 -0700

Rename `Catch` variants to `TryBlock`

(Not `Try` since `QuestionMark` is using that.)

�[33mcommit 6bf6d50�[m
Merge: f28f648 6138c82
Author: bors [email protected]
Date: Sun Aug 19 23:08:26 2018 +0000

Auto merge of #52953 - dsciarra:mv-codemap-sourcemap, r=petrochenkov

Rename CodeMap/FileMap to SourceMap/SourceFile

A first renaming for #51574

�[33mcommit b5c2470�[m
Author: varkor [email protected]
Date: Mon Aug 20 00:08:01 2018 +0100

Update new ui tests

�[33mcommit 798b9ff�[m
Author: varkor [email protected]
Date: Sun Aug 19 23:10:18 2018 +0100

Tweak comments

�[33mcommit a6f4ae8�[m
Author: Jorge Aparicio [email protected]
Date: Sun Aug 19 23:59:20 2018 +0200

fix: preserve msvc linker fallback logic

�[33mcommit 25b6267�[m
Author: varkor [email protected]
Date: Sun Aug 19 20:33:38 2018 +0100

Taking a peek

�[33mcommit 7b47fd7�[m
Author: Vadim Petrochenkov [email protected]
Date: Mon Aug 20 00:03:40 2018 +0300

resolve: Reject some inaccessible candidates sooner during import resolution

This allows import resolution to progress in cases like #53140

�[33mcommit f28f648�[m
Merge: 3ac79c7 8895e3b
Author: bors [email protected]
Date: Sun Aug 19 21:03:12 2018 +0000

Auto merge of #53316 - tristanburgess:52895_existential_type_ICE, r=oli-obk

52985: cause cycle err on inf trait normalization

Issue: #52985
 - If an existential type is defined, but no user code infers the
concrete type behind the existential type, normalization would
infinitely recurse on this existential type which is only defined in
terms of itself.
  - Instead of raising an inf recurse error, we cause a cycle error to
help highlight that the issue is that the type is only defined in terms
of itself.
  - Three known potential improvements:
    - If type folding itself was exposed as a query, used by
normalization and other mechanisms, cases that would cause infinite recursion would
automatically cause a cycle error.
    - The span for the cycle error should be improved to point to user
code that fails to allow inference of the concrete type of the existential type,
assuming that this error occurs because no user code can allow inference the
concrete type.
    - A mechanism to extend the cycle error with a helpful note would be nice. Currently,
the error is built and maintained by src/librustc/ty/query/plumbing,
with no known way to extend the information that the error gets built
with.

r? @oli-obk

�[33mcommit 6138c82�[m
Author: Donato Sciarra [email protected]
Date: Sat Aug 18 12:14:31 2018 +0200

fix tidy errors

�[33mcommit a2ff845�[m
Author: Donato Sciarra [email protected]
Date: Sat Aug 18 12:14:25 2018 +0200

mv CachingCodemapView CachingSourceMapView

�[33mcommit 062bfbf�[m
Author: Donato Sciarra [email protected]
Date: Sat Aug 18 12:14:14 2018 +0200

mv codemap source_map

�[33mcommit d3fe97f�[m
Author: Donato Sciarra [email protected]
Date: Sat Aug 18 12:14:09 2018 +0200

mv codemap() source_map()

�[33mcommit 82607d2�[m
Author: Donato Sciarra [email protected]
Date: Sat Aug 18 12:14:03 2018 +0200

mv (mod) codemap source_map

�[33mcommit cbd0595�[m
Author: Donato Sciarra [email protected]
Date: Sat Aug 18 12:13:56 2018 +0200

mv filemap source_file

�[33mcommit d6dcbcd�[m
Author: Donato Sciarra [email protected]
Date: Sat Aug 18 12:13:52 2018 +0200

mv FileMap SourceFile

�[33mcommit c655473�[m
Author: Donato Sciarra [email protected]
Date: Sat Aug 18 12:13:35 2018 +0200

mv CodeMap SourceMap

�[33mcommit b7772e6�[m
Author: Mazdak Farrokhzad [email protected]
Date: Sun Aug 19 21:06:43 2018 +0200

convert-id: tests for const gating.

�[33mcommit 4722744�[m
Author: varkor [email protected]
Date: Wed Aug 8 01:46:00 2018 +0100

Fix some remaining tests

�[33mcommit 03c4628�[m
Author: varkor [email protected]
Date: Wed Aug 8 01:18:03 2018 +0100

Avoid clone and update documentation

�[33mcommit 04d33bb�[m
Author: varkor [email protected]
Date: Wed Aug 8 00:38:31 2018 +0100

Refactor generic argument count check in check/mod.rs

�[33mcommit 68b0e7d�[m
Author: varkor [email protected]
Date: Wed Aug 8 00:01:47 2018 +0100

Refactor generic argument count check in method/confirm.rs

�[33mcommit 49c4573�[m
Author: varkor [email protected]
Date: Tue Aug 7 18:53:43 2018 +0100

Refactor generic argument count check in astconv

�[33mcommit a14bc71�[m
Author: varkor [email protected]
Date: Tue Aug 7 17:44:30 2018 +0100

Add Default for GenericParamCount

�[33mcommit 7c9f7c2�[m
Author: varkor [email protected]
Date: Tue Aug 7 17:01:12 2018 +0100

Args first, then params

�[33mcommit 9d3d4b1�[m
Author: varkor [email protected]
Date: Tue Aug 7 12:28:08 2018 +0100

Refactor lock-step

�[33mcommit 6a96cf1�[m
Author: varkor [email protected]
Date: Thu Aug 2 18:09:14 2018 +0100

Clean match statement

�[33mcommit e79bc41�[m
Author: varkor [email protected]
Date: Tue Jul 24 17:47:31 2018 +0100

Consolidate into create_substs_for_generic_args

�[33mcommit ccef306�[m
Author: varkor [email protected]
Date: Tue Jul 24 13:23:45 2018 +0100

Revert broken test

�[33mcommit b524991�[m
Author: varkor [email protected]
Date: Tue Jul 24 02:59:22 2018 +0100

Refactor astconv.rs (part ii)

�[33mcommit 5d07db4�[m
Author: varkor [email protected]
Date: Tue Jul 24 02:27:18 2018 +0100

Refactor confirm.rs (part ii)

�[33mcommit 08d49a6�[m
Author: varkor [email protected]
Date: Tue Jul 24 01:43:30 2018 +0100

Refactor mod/check (part viii)

�[33mcommit 5f2588f�[m
Author: varkor [email protected]
Date: Mon Jul 23 23:55:24 2018 +0100

Fix behaviour in error condition

�[33mcommit db94efa�[m
Author: varkor [email protected]
Date: Mon Jul 23 18:29:16 2018 +0100

Refactor mod/check (part vii)

�[33mcommit 9bb40b0�[m
Author: varkor [email protected]
Date: Mon Jul 23 14:48:37 2018 +0100

Make prohibit_generics take IntoIterators

�[33mcommit 9cfe92c�[m
Author: varkor [email protected]
Date: Tue Jul 3 22:24:13 2018 +0100

"Fix" annoying test

�[33mcommit e02642d�[m
Author: varkor [email protected]
Date: Tue Jul 3 19:55:28 2018 +0100

Fix confirm.rs

�[33mcommit 340a7fc�[m
Author: varkor [email protected]
Date: Tue Jul 3 19:38:04 2018 +0100

Refactor astconv.rs

�[33mcommit 35ddd46�[m
Author: varkor [email protected]
Date: Tue Jul 3 17:20:20 2018 +0100

Refactor confirm.rs

�[33mcommit 84edc0a�[m
Author: varkor [email protected]
Date: Tue Jul 3 16:14:43 2018 +0100

Move lifetime calculation outside loop

�[33mcommit b6eef18�[m
Author: varkor [email protected]
Date: Tue Jul 3 09:53:46 2018 +0100

Supress consecutive errors

�[33mcommit d8ba103�[m
Author: varkor [email protected]
Date: Tue Jul 3 08:10:45 2018 +0100

Fix param_idx calculation

�[33mcommit d5e24dc�[m
Author: varkor [email protected]
Date: Mon Jul 2 18:09:15 2018 +0100

Fix integer overflow

�[33mcommit 734ce4a�[m
Author: varkor [email protected]
Date: Thu Jun 28 22:29:53 2018 +0100

Fix tidy check

�[33mcommit 3357702�[m
Author: varkor [email protected]
Date: Thu Jun 28 22:13:34 2018 +0100

Replace generics_require_inlining with generics.requires_monomorphization

�[33mcommit 88d5b2f�[m
Author: varkor [email protected]
Date: Thu Jun 28 22:04:51 2018 +0100

Refactor mod/check (part vi)

�[33mcommit c9941a8�[m
Author: varkor [email protected]
Date: Tue Jun 26 23:34:33 2018 +0100

Refactor mod/check (part v)

�[33mcommit e812b55�[m
Author: varkor [email protected]
Date: Tue Jun 26 23:08:02 2018 +0100

Refactor mod/check (part iv)

�[33mcommit 96379e1�[m
Author: varkor [email protected]
Date: Tue Jun 26 20:24:13 2018 +0100

Refactor mod/check (part iii)

�[33mcommit 5fe9aeb�[m
Author: varkor [email protected]
Date: Tue Jun 26 19:48:50 2018 +0100

Refactor mod/check (part ii)

�[33mcommit d1a82af�[m
Author: varkor [email protected]
Date: Mon Jun 25 19:52:50 2018 +0100

Refactor mod/check (part i)

�[33mcommit 2317abd�[m
Author: varkor [email protected]
Date: Sat Jun 23 00:44:17 2018 +0100

Fix quadratic loop in confirm.rs

�[33mcommit 651215e�[m
Author: varkor [email protected]
Date: Sat Jun 23 00:33:03 2018 +0100

Replace for_each with for

�[33mcommit 11adc13�[m
Author: varkor [email protected]
Date: Sat Jun 23 00:21:35 2018 +0100

Address minor comments

�[33mcommit 3ac79c7�[m
Merge: bfc3b20 58e4b54
Author: bors [email protected]
Date: Sun Aug 19 17:44:43 2018 +0000

Auto merge of #53258 - nikomatsakis:issue-53189-optimize-reassignment-immutable-state, r=pnkfelix

optimize reassignment immutable state

This is the "simple fix" when it comes to checking for reassignment. We just shoot for compatibility with the AST-based checker. Makes no attempt to solve #21232.

I opted for this simpler fix because I didn't want to think about complications [like the ones described here](https://github.com/rust-lang/rust/issues/21232#issuecomment-412219247).

Let's do some profiling measurements.

Fixes #53189

r? @pnkfelix

�[33mcommit f84ec02�[m
Author: Mazdak Farrokhzad [email protected]
Date: Sun Aug 19 19:25:35 2018 +0200

remove feature(convert_id) from lib{core,std}/lib.rs

�[33mcommit 71187b7�[m
Author: Mazdak Farrokhzad [email protected]
Date: Sun Aug 19 18:49:31 2018 +0200

Make core::convert::identity a const fn.

�[33mcommit c2217b7�[m
Author: Mazdak Farrokhzad [email protected]
Date: Sun Aug 19 18:37:00 2018 +0200

Get rid of unnecessary #![feature(core_float)].

�[33mcommit 8208c77�[m
Author: Mazdak Farrokhzad [email protected]
Date: Sun Aug 19 18:36:18 2018 +0200

Drop `identity` from prelude.

�[33mcommit 08b1d83�[m
Merge: ac64ef3 b355906
Author: Mazdak Farrokhzad [email protected]
Date: Sun Aug 19 18:34:46 2018 +0200

Merge branch 'master' into feature/core_convert_id

�[33mcommit 00920c0�[m
Author: Jakub Kozlowski [email protected]
Date: Wed Aug 15 00:24:55 2018 +0100

Stabilize macro_vis_matcher

�[33mcommit 71120ef�[m
Author: Matthias Krüger [email protected]
Date: Sun Aug 19 15:30:23 2018 +0200

Fix typos found by codespell.

�[33mcommit bfc3b20�[m
Merge: b355906 1341e66
Author: bors [email protected]
Date: Sun Aug 19 15:22:18 2018 +0000

Auto merge of #53248 - nikomatsakis:nll-trivial-sized-predicate, r=eddyb

skip trivial `Sized` predicates

This came to about a 2% win for me in cargo. Small, but hey.

r? @eddyb

�[33mcommit 58e4b54�[m
Author: Niko Matsakis [email protected]
Date: Tue Aug 14 08:24:44 2018 -0400

move tests to borrowck directory, remove feature(nll)

now compare-mode can show us the differences

�[33mcommit 4e50c5b�[m
Author: Niko Matsakis [email protected]
Date: Sat Aug 11 06:15:58 2018 -0400

add tests for assigning fields without initializing var

We did not seem to have any!

�[33mcommit 78e987a�[m
Author: Niko Matsakis [email protected]
Date: Fri Aug 10 18:05:01 2018 -0400

just check whether a variable is initialized

Don't iterate over all things that are initialized.

�[33mcommit a8a982b�[m
Author: Niko Matsakis [email protected]
Date: Fri Aug 10 17:34:56 2018 -0400

treat local variables specially

�[33mcommit 85b92c1�[m
Author: Dmytro Shynkevych [email protected]
Date: Sun Aug 19 06:07:04 2018 -0400

Added test

�[33mcommit b355906�[m
Merge: 8928de7 c488d59
Author: bors [email protected]
Date: Sun Aug 19 12:21:56 2018 +0000

Auto merge of #51131 - qnighy:unsized-locals, r=eddyb

Implement Unsized Rvalues

This PR is the first step to implement RFC1909: unsized rvalues (#48055).

## Implemented

- `Sized` is removed for arguments and local bindings. (under `#![feature(unsized_locals)]`)
- Unsized locations are allowed in MIR
- Unsized places and operands are correctly translated at codegen

## Not implemented in this PR

- Additional `Sized` checks:
  - tuple struct constructor (accidentally compiles now)
  - closure arguments at closure generation (accidentally compiles now)
  - upvars (ICEs now)
- Generating vtable for `fn method(self)` (ICEs now)
- VLAs: `[e; n]` where `n` isn't const
- Reduce unnecessary allocations

## Current status

- [x] Fix `__rust_probestack` (rust-lang-nursery/compiler-builtins#244)
  - [x] Get the fix merged
- [x] `#![feature(unsized_locals)]`
  - [x] Give it a tracking issue number
- [x] Lift sized checks in typeck and MIR-borrowck
  - [ ] <del>Forbid `A(unsized-expr)`</del> will be another PR
- [x] Minimum working codegen
- [x] Add more examples and fill in unimplemented codegen paths
- [ ] <del>Loosen object-safety rules (will be another PR)</del>
- [ ] <del>Implement `Box<FnOnce>` (will be another PR)</del>
- [ ] <del>Reduce temporaries (will be another PR)</del>

�[33mcommit 99bba34�[m
Author: Dan Callaghan [email protected]
Date: Sun Aug 19 21:26:05 2018 +1000

update lld submodule to include RISCV patch

This pulls in one new commit, to add support for linking static RISCV
binaries, suitable for the new riscv32imac-unknown-none-elf target.
See: https://github.com/rust-lang/lld/pull/1

�[33mcommit 98e4cd5�[m
Author: Jorge Aparicio [email protected]
Date: Sun Aug 19 12:35:58 2018 +0200

fix: use detected MSVC's link.exe

�[33mcommit 8928de7�[m
Merge: a9fe312 1001b2b
Author: bors [email protected]
Date: Sun Aug 19 09:40:36 2018 +0000

Auto merge of #52972 - RalfJung:from_raw_parts_align, r=alexcrichton

debug_assert to ensure that from_raw_parts is only used properly aligned

This does not help nearly as much as I would hope because everybody uses the distributed libstd which is compiled without debug assertions. For this reason, I am not sure if this is even worth it. OTOH, this would have caught the misalignment fixed by https://github.com/rust-lang/rust/issues/42789 *if* there had been any tests actually using ZSTs with alignment >1 (we have a CI runner which has debug assertions in libstd enabled), and it seems to currently [fail in the rg testsuite](https://ci.appveyor.com/project/rust-lang/rust/build/1.0.8403/job/v7dfdcgn8ay5j6sb). So maybe it is worth it, after all.

I have seen the attribute `#[rustc_inherit_overflow_checks]` in some places, does that make it so that the *caller's* debug status is relevant? Is there a similar attribute for `debug_assert!`? That could even subsume `rustc_inherit_overflow_checks`: Something like `rustc_inherit_debug_flag` could affect *all* places that change the generated code depending on whether we are in debug or release mode. In fact, given that we have to keep around the MIR for generic functions anyway, is there ever a reason *not* to handle the debug flag that way? I guess currently we apply debug flags like `cfg` so this is dropped early during the MIR pipeline?

EDIT: I learned from @eddyb that because of how `debug_assert!` works, this is not realistic. Well, we could still have it for the rustc CI runs and then maybe, eventually, when libstd gets compiled client-side and there is both a debug and a release build... then this will also benefit users.^^

�[33mcommit c8ef8b6�[m
Author: Jorge Aparicio [email protected]
Date: Sun Aug 19 09:39:19 2018 +0200

LinkerFlavor::Gcc defaults to cc, not gcc

�[33mcommit c488d59�[m
Author: Masaki Hara [email protected]
Date: Fri Aug 3 23:50:13 2018 +0900

Integrate OperandValue::UnsizedRef into OperandValue::Ref.

�[33mcommit 6e15e7c�[m
Author: Masaki Hara [email protected]
Date: Fri Aug 3 23:32:21 2018 +0900

Integrate PassMode::UnsizedIndirect into PassMode::Indirect.

�[33mcommit a0c422a�[m
Author: Masaki Hara [email protected]
Date: Thu Jul 12 20:27:10 2018 +0900

Remove a now-unnecessary paragraph.

The paragraph described a case where we can't optimize away repetitive
dynamic stack allocation. However, as arielb1 pointed out, it can
actually optimizable by dynamically delaying the stack unwinding.

�[33mcommit 438edc3�[m
Author: Masaki Hara [email protected]
Date: Thu Jul 12 20:26:13 2018 +0900

Update the unstable book regarding [e; dyn n].

�[33mcommit c72e87e�[m
Author: Masaki Hara [email protected]
Date: Wed May 30 00:33:01 2018 +0900

Add an unstable-book article about unsized_locals.

�[33mcommit 800f2c1�[m
Author: Masaki Hara [email protected]
Date: Tue May 29 00:12:55 2018 +0900

Implement simple codegen for unsized rvalues.

�[33mcommit e2b95cb�[m
Author: Masaki Hara [email protected]
Date: Tue May 29 00:11:34 2018 +0900

Lift some Sized checks.

�[33mcommit 7f05304�[m
Author: Masaki Hara [email protected]
Date: Tue May 29 00:10:09 2018 +0900

Add #![feature(unsized_locals)].

�[33mcommit cd0476a�[m
Author: Masaki Hara [email protected]
Date: Tue May 29 00:07:23 2018 +0900

Add Builder::array_alloca.

�[33mcommit 9f0168a�[m
Author: Masaki Hara [email protected]
Date: Wed May 30 00:25:56 2018 +0900

Add notes on unsized argument errors.

�[33mcommit d6426e8�[m
Author: ftilde [email protected]
Date: Sat Aug 18 23:48:26 2018 +0200

Exec gdb and lldb in rust-* wrappers

This way the process we get by calling rust-{gdb,lldb} is an actual
{gdb,lldb} instance and not (perhaps surprisingly) a script waiting for
the debugger process to finish. Thus, sending a SIGINT to the spawned
process stops execution of the child, for example.

�[33mcommit 73b5c7e�[m
Author: ftilde [email protected]
Date: Sat Aug 18 23:46:52 2018 +0200

Avoid creation of command temp file in rust-lldb

Arguments are passed on the command line via --one-line-before-file
(instead of in a file via --source-before-file) to lldb.

�[33mcommit a9fe312�[m
Merge: 33b923f 14aed81
Author: bors [email protected]
Date: Sat Aug 18 21:58:37 2018 +0000

Auto merge of #52592 - eddyb:or-default, r=Mark-Simulacrum

Use the new Entry::or_default method where possible.

�[33mcommit 4bbedd7�[m
Author: Jorge Aparicio [email protected]
Date: Sat Aug 18 20:16:04 2018 +0200

fully implement lld-flavor

�[33mcommit 14aed81�[m
Author: Eduard-Mihai Burtescu [email protected]
Date: Sat Jul 21 22:43:31 2018 +0300

Use the new Entry::or_default method where possible.

�[33mcommit cafeb6f�[m
Author: Jorge Aparicio [email protected]
Date: Sat Aug 18 17:19:42 2018 +0200

fatal -> bug

�[33mcommit 27390fc�[m
Author: Jorge Aparicio [email protected]
Date: Sat Aug 18 16:36:24 2018 +0200

wasm32-unknown-unknown uses the WASM LLD flavor

�[33mcommit 750e72b�[m
Author: Jorge Aparicio [email protected]
Date: Sat Aug 18 16:31:36 2018 +0200

add lld_flavor info to target spec

this field defaults to the LD / GNU flavor

�[33mcommit d52047f�[m
Author: bjorn3 [email protected]
Date: Sat Aug 18 12:08:06 2018 +0200

Remove LinkMeta struct

�[33mcommit 6ae915b�[m
Author: Niv Kaminer [email protected]
Date: Fri Aug 17 22:28:05 2018 +0300

clarify use of Unpin and pinning types

�[33mcommit c37787e�[m
Author: Tom Tromey [email protected]
Date: Fri Aug 17 08:40:16 2018 -0600

Change target triple used to check for lldb in build-manifest

The wrong target triple was used for lldb in build-manifest.  lldb is
only built for macOS, so update the triple to reflect that.

This is an attempt to fix bug#48168.

�[33mcommit 1540e8c�[m
Author: BurntPizza [email protected]
Date: Fri Aug 17 02:59:55 2018 -0400

Remove inline attribute on generic functions

�[33mcommit a50f29a�[m
Author: Kartikaya Gupta [email protected]
Date: Thu Aug 16 21:40:25 2018 -0400

Update version of rls-data used with save-analysis

This part 1/3 for fixing rust-lang/rust#53440.

�[33mcommit 0383539�[m
Author: varkor [email protected]
Date: Tue Aug 14 19:25:26 2018 +0100

Fix handling of floating-point ranges

�[33mcommit 1dbc781�[m
Author: varkor [email protected]
Date: Tue Aug 14 16:40:04 2018 +0100

Handle equivalence classes of length-1 ranges

�[33mcommit e9c8361�[m
Author: varkor [email protected]
Date: Tue Aug 14 12:45:26 2018 +0100

Add equivalence class splitting for range constructors

�[33mcommit 527cccb�[m
Author: varkor [email protected]
Date: Tue Aug 14 03:02:31 2018 +0100

Add some more compound exhaustiveness tests

�[33mcommit 9e9e023�[m
Author: varkor [email protected]
Date: Mon Aug 13 16:23:14 2018 +0100

More formatting improvements

�[33mcommit 400cb14�[m
Author: varkor [email protected]
Date: Mon Aug 13 16:01:13 2018 +0100

Add a summary of the algorithm to the file

�[33mcommit 99754ad�[m
Author: varkor [email protected]
Date: Mon Aug 13 00:56:13 2018 +0100

Some reformatting

�[33mcommit bfc8ce3�[m
Author: varkor [email protected]
Date: Sun Aug 12 20:47:23 2018 +0100

Add a test for integer products

�[33mcommit 5959a35�[m
Author: varkor [email protected]
Date: Sun Aug 12 20:39:53 2018 +0100

Move logic from push_wild_constructor to apply_constructor

�[33mcommit 4aa929c�[m
Author: varkor [email protected]
Date: Sun Aug 12 20:16:25 2018 +0100

Move witnesses inside push_wild_constructor

�[33mcommit bfc0807�[m
Author: varkor [email protected]
Date: Sun Aug 12 11:43:42 2018 +0100

Add some comments

�[33mcommit af366b0�[m
Author: varkor [email protected]
Date: Fri Jun 22 23:52:56 2018 +0100

Refactor condition

�[33mcommit 25ba911�[m
Author: varkor [email protected]
Date: Sat Jun 2 10:53:47 2018 +0100

Add guarded arms to tests

�[33mcommit 07064de�[m
Author: varkor [email protected]
Date: Tue May 29 12:47:39 2018 +0100

No longer return value_constructors for all_constructors

�[33mcommit d27c21c�[m
Author: varkor [email protected]
Date: Mon May 28 20:53:20 2018 +0100

Refactor for less allocation

�[33mcommit 6c21a03�[m
Author: varkor [email protected]
Date: Sat May 26 00:54:52 2018 +0100

Refactor after miri api changes

�[33mcommit 732d638�[m
Author: varkor [email protected]
Date: Fri May 25 09:47:37 2018 +0100

Replace ... with ..= in suggestions

As ... is "(silently) deprecated". Presumably this means we should be giving correct, up-to-date suggestions, though.

�[33mcommit 1aa7494�[m
Author: varkor [email protected]
Date: Thu May 24 13:30:21 2018 +0100

Introduce signed_bias method

The epitome of simplicity!

�[33mcommit 72cc4bd�[m
Author: varkor [email protected]
Date: Thu May 24 12:27:30 2018 +0100

Inline encode and decode methods

�[33mcommit be12b24�[m
Author: varkor [email protected]
Date: Thu May 24 12:13:28 2018 +0100

Fix print_miri_value for signed integers

�[33mcommit 97a032e�[m
Author: varkor [email protected]
Date: Thu May 24 10:48:23 2018 +0100

Simplify bitwise operations

�[33mcommit c388c11�[m
Author: varkor [email protected]
Date: Wed May 23 22:09:50 2018 +0100

Special-case (RangeEnd::Included, Ordering::Equal) in lower_pattern_unadjusted

�[33mcommit effb3d0�[m
Author: varkor [email protected]
Date: Wed May 23 21:16:07 2018 +0100

Improve the comments

�[33mcommit a9f2c5a�[m
Author: varkor [email protected]
Date: Wed May 23 10:22:45 2018 +0100

Fix sign conversion arithmetic errors

�[33mcommit f4af3b0�[m
Author: varkor [email protected]
Date: Tue May 22 18:23:30 2018 +0100

Refactor to remove explicit integer type matching

�[33mcommit 8389972�[m
Author: varkor [email protected]
Date: Tue May 22 01:03:05 2018 +0100

Add singleton patterns to test

�[33mcommit a553fa7�[m
Author: varkor [email protected]
Date: Tue May 22 01:02:47 2018 +0100

Fix integer overflow

�[33mcommit 7695bd0�[m
Author: varkor [email protected]
Date: Mon May 21 23:51:01 2018 +0100

Use bit operators for min_max_ty

�[33mcommit c00fd8f�[m
Author: varkor [email protected]
Date: Mon May 21 21:46:12 2018 +0100

Refactor interval conditions

�[33mcommit 7f72030�[m
Author: varkor [email protected]
Date: Mon May 21 20:50:40 2018 +0100

Fix range splitting

�[33mcommit a20cb10�[m
Author: varkor [email protected]
Date: Mon May 21 20:40:38 2018 +0100

Require just the Unicode Scalar Values to be matched for a char

�[33mcommit 9778a81�[m
Author: varkor [email protected]
Date: Sun May 20 02:10:37 2018 +0100

Improve macros with reduced repetition

�[33mcommit 7476ba4�[m
Author: varkor [email protected]
Date: Sun May 20 01:55:05 2018 +0100

Add semi-exhaustive tests for exhaustiveness

�[33mcommit 121fa8d�[m
Author: varkor [email protected]
Date: Sun May 20 01:54:22 2018 +0100

Fix handling of signed integers

�[33mcommit b8702a0�[m
Author: varkor [email protected]
Date: Sat May 19 23:19:37 2018 +0100

Add feature gate test

�[33mcommit ed5a4d5�[m
Author: varkor [email protected]
Date: Sat May 19 23:19:29 2018 +0100

Add feature gate and refactor

�[33mcommit 384db4f�[m
Author: varkor [email protected]
Date: Sat May 19 21:57:25 2018 +0100

Add support for all integer types

�[33mcommit b3d2baf�[m
Author: varkor [email protected]
Date: Sat May 19 18:46:05 2018 +0100

Give correct suggestions

�[33mcommit e3357d9�[m
Author: varkor [email protected]
Date: Sat May 19 15:26:07 2018 +0100

Implement interval checking

�[33mcommit 9511ffe�[m
Author: Alexander Regueiro [email protected]
Date: Thu Aug 16 17:03:49 2018 +0100

Moved some feature gate ui tests to correct location

�[33mcommit 985da80�[m
Author: Guillaume Gomez [email protected]
Date: Thu Aug 16 15:14:11 2018 +0200

Generate blanket implementations for reexported items as well

�[33mcommit 03530fa�[m
Author: Niv Kaminer [email protected]
Date: Thu Aug 16 13:56:08 2018 +0300

add example for moving out of pointer

�[33mcommit 2075509�[m
Author: Jack O'Connor [email protected]
Date: Wed Aug 15 14:08:25 2018 -0400

restore the page title after escaping out of a search

�[33mcommit e665715�[m
Author: Sébastien Duquette [email protected]
Date: Wed Aug 15 22:59:56 2018 -0400

Mark some suggestions as MachineApplicable

�[33mcommit cea73d6�[m
Author: Esteban Küber [email protected]
Date: Wed Aug 15 13:17:04 2018 -0700

update recently moved tests

�[33mcommit e5e14d3�[m
Author: Esteban Küber [email protected]
Date: Sun Aug 12 12:21:53 2018 -0700

When closure with no arguments was expected, suggest wrapping

�[33mcommit bc900f5�[m
Author: BurntPizza [email protected]
Date: Wed Aug 15 02:54:21 2018 -0400

Mark libserialize functions as inline

�[33mcommit e6244e5�[m
Author: Thayne McCombs [email protected]
Date: Thu Aug 9 01:50:30 2018 -0600

Stabilize IP associated constants

Fixes #44582

�[33mcommit 687cc98�[m
Author: Andre Bogus [email protected]
Date: Tue Aug 14 22:18:18 2018 +0200

add individual docs to `core::num::NonZero*`

�[33mcommit 83d5a60�[m
Author: varkor [email protected]
Date: Thu Aug 9 20:58:43 2018 +0100

Feature gate where clauses on associated type impls

�[33mcommit 8895e3b�[m
Author: Tristan Burgess [email protected]
Date: Mon Aug 13 17:15:29 2018 -0400

52985: cause cycle err on inf trait normalization
  - If an existential type is defined, but no user code infers the
concrete type behind the existential type, normalization would
infinitely recurse on this existential type which is only defined in
terms of itself.
  - Instead of raising an inf recurse error, we cause a cycle error to
help highlight that the issue is that the type is only defined in terms
of itself.
  - Three known potential improvements:
    - If type folding itself was exposed as a query, used by
normalization and other mechanisms, cases that would cause infinite recursion would
automatically cause a cycle error.
    - The span for the cycle error should be improved to point to user
code that fails to allow inference of the concrete type of the existential type,
assuming that this error occurs because no user code can allow inference the
concrete type.
    - A mechanism to extend the cycle error with a helpful note would be nice. Currently,
the error is built and maintained by src/librustc/ty/query/plumbing,
with no known way to extend the information that the error gets built
with.

�[33mcommit 1341e66�[m
Author: Niko Matsakis [email protected]
Date: Fri Aug 10 09:24:27 2018 -0400

skip trivial `T: Sized` predicates

�[33mcommit a0911cf�[m
Author: Jorge Aparicio [email protected]
Date: Thu Aug 9 16:08:12 2018 -0500

address review comments

�[33mcommit eb74f21�[m
Author: Jorge Aparicio [email protected]
Date: Fri Jul 6 00:41:42 2018 -0500

try to infer linker flavor from linker name and vice versa

�[33mcommit 68e766a�[m
Author: Niv Kaminer [email protected]
Date: Tue Aug 7 21:14:57 2018 +0300

remove general pinning information from Unpin trait

�[33mcommit 87bbd2e�[m
Author: Niv Kaminer [email protected]
Date: Mon Aug 6 23:52:15 2018 +0300

fix style issues in doc comment

�[33mcommit 1001b2b�[m
Author: Ralf Jung [email protected]
Date: Mon Aug 6 18:45:15 2018 +0200

inore some codegen tests when debug assertions are enabled

�[33mcommit f47d56a�[m
Author: Ralf Jung [email protected]
Date: Mon Aug 6 14:06:27 2018 +0200

update ripgrep tested by cargotest

�[33mcommit 9b7d710�[m
Author: Niv Kaminer [email protected]
Date: Mon Aug 6 14:01:49 2018 +0300

fix link to PinBox

�[33mcommit 6845dc4�[m
Author: Niv Kaminer [email protected]
Date: Mon Aug 6 12:02:46 2018 +0300

correct explenation on the usage of NonNull

�[33mcommit 038ce65�[m
Author: Niv Kaminer [email protected]
Date: Mon Aug 6 10:52:35 2018 +0300

expand the documentation on the `Unpin` trait

provides an overview of the Pin API which the trait is for,
and show how it can be used in making self referencial structs

part of #49150

�[33mcommit 4e17fbd�[m
Author: Dmytro Shynkevych [email protected]
Date: Sun Aug 5 02:41:14 2018 -0400

Fixed typo

�[33mcommit 1553ea2�[m
Author: Dmytro Shynkevych [email protected]
Date: Sat Aug 4 01:49:36 2018 -0400

Changed `Rc::inc_{weak,strong}` to better hint optimization to LLVM

�[33mcommit b4924bf�[m
Author: Aaron Power [email protected]
Date: Fri Aug 3 20:54:07 2018 +0100

Update RELEASES.md

�[33mcommit 96f50f1�[m
Author: Aaron Power [email protected]
Date: Fri Aug 3 18:56:54 2018 +0100

Update RELEASES.md

�[33mcommit a646c10�[m
Author: Aaron Power [email protected]
Date: Fri Aug 3 18:27:25 2018 +0100

Update RELEASES.md

�[33mcommit 3350eaf�[m
Author: Aaron Power [email protected]
Date: Fri Aug 3 16:07:03 2018 +0100

Updated RELEASES.md for 1.29.0

�[33mcommit 6fb97a6�[m
Author: Ralf Jung [email protected]
Date: Thu Aug 2 16:51:54 2018 +0200

test that align_of handles alignment properly for the mid part

�[33mcommit 7b24d2b�[m
Author: Ralf Jung [email protected]
Date: Thu Aug 2 11:33:59 2018 +0200

debug_assert to ensure that from_raw_parts is only used properly aligned

�[33mcommit ac64ef3�[m
Author: Mazdak [email protected]
Date: Fri Jan 19 03:11:57 2018 +0100

fix doctests for convert::id

�[33mcommit 93debaa�[m
Author: Mazdak [email protected]
Date: Fri Jan 19 02:48:02 2018 +0100

add #![feature(convert_id)] to libstd + libcore

�[33mcommit 567f040�[m
Author: Mazdak [email protected]
Date: Fri Jan 19 02:41:58 2018 +0100

fix prelude reexport of convert::id

�[33mcommit 651b25a�[m
Author: Mazdak [email protected]
Date: Fri Jan 19 01:28:25 2018 +0100

add fn core::convert::id<T>(x: T) -> T { x } to the prelude

�[33mcommit 351fefb�[m
Author: Mazdak [email protected]
Date: Fri Jan 19 01:27:59 2018 +0100

add fn core::convert::id<T>(x: T) -> T { x }

@pnkfelix
Copy link
Member

Oh right, its often more useful to filter down to just the bors commits, so that we get a high-level view of the PR's that were merged. Here's a new version of the git log output with that filter applied:

git log --author bors 33b923fd4..63d66494a produces:

�[33mcommit 63d6649�[m
Merge: 5ce5e08 cd8fcb6
Author: bors [email protected]
Date: Thu Aug 23 22:52:29 2018 +0000

Auto merge of #53638 - flip1995:clippy, r=nrc

Update clippy

r? @oli-obk @Manishearth

�[33mcommit 5ce5e08�[m
Merge: 54d82d0 7440125
Author: bors [email protected]
Date: Thu Aug 23 20:34:12 2018 +0000

Auto merge of #53588 - tristanburgess:52985_diagnostics_no_concrete_type_behind_existential_type, r=oli-obk

52985 diagnostics no concrete type behind existential type

@oli-obk FYI. See below for new cycle error generated.

```rust
error[E0391]: cycle detected when processing `Foo`
 --> /dev/staging/existential_type_no_concrete_type_nouse_potential.rs:3:1
  |
3 | existential type Foo: Copy;
  | ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  |
note: ...which requires processing `bar`...
 --> /dev/staging/existential_type_no_concrete_type_nouse_potential.rs:6:23
  |
6 |   fn bar(x: Foo) -> Foo {
  |  _______________________^
7 | |     x
8 | | }
  | |_^
  = note: ...which again requires processing `Foo`, completing the cycle

error: aborting due to previous error

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

�[33mcommit 54d82d0�[m
Merge: e5284b0 f8d5ed4
Author: bors [email protected]
Date: Thu Aug 23 17:13:44 2018 +0000

Auto merge of #53571 - MaloJaffre:vecdeque-emergency, r=RalfJung

Fix unsoundness for VecDeque

 See individual commit for more details.

r? @RalfJung.

Fixes https://github.com/rust-lang/rust/issues/53566, fixes https://github.com/rust-lang/rust/issues/53529

�[33mcommit e5284b0�[m
Merge: 35bf1ae 4d81fe9
Author: bors [email protected]
Date: Thu Aug 23 14:40:22 2018 +0000

Auto merge of #53384 - gootorov:use-servo-smallvec, r=michaelwoerister

Use optimized SmallVec implementation

This PR replaces current SmallVec implementation with the one from the Servo project.

Closes https://github.com/rust-lang/rust/issues/51640

r? @Mark-Simulacrum

�[33mcommit 35bf1ae�[m
Merge: 827e57c 0095471
Author: bors [email protected]
Date: Thu Aug 23 11:46:24 2018 +0000

Auto merge of #52602 - scottmcm:tryblock-expr, r=nikomatsakis

Implement try block expressions

I noticed that `try` wasn't a keyword yet in Rust 2018, so...

~~Fix​es https://github.com/rust-lang/rust/issues/52604~~ That was fixed by PR https://github.com/rust-lang/rust/pull/53135
cc https://github.com/rust-lang/rust/issues/31436 https://github.com/rust-lang/rust/issues/50412

�[33mcommit 827e57c�[m
Merge: c648b0b b34503e
Author: bors [email protected]
Date: Thu Aug 23 08:38:22 2018 +0000

Auto merge of #53459 - petrochenkov:stabmore, r=nrc

Stabilize a few secondary macro features

- `tool_attributes` - closes https://github.com/rust-lang/rust/issues/44690
- `proc_macro_path_invoc` - this feature was created due to issues with tool attributes (https://github.com/rust-lang/rust/issues/51277), those issues are now fixed (https://github.com/rust-lang/rust/pull/52841)
- partially `proc_macro_gen` - this feature was created due to issue https://github.com/rust-lang/rust/issues/50504, the issue is now fixed (https://github.com/rust-lang/rust/pull/51952), so proc macros can generate modules. They still can't generate `macro_rules` items though due to unclear hygiene interactions.

�[33mcommit c648b0b�[m
Merge: e73077e 83d5a60
Author: bors [email protected]
Date: Thu Aug 23 06:34:11 2018 +0000

Auto merge of #53235 - varkor:gat_impl_where, r=estebank

Feature gate where clauses on associated type impls

Fixes #52913. This doesn't address the core problem, which is tracked by https://github.com/rust-lang/rust/issues/47206. However, it fixes the stable-to-stable regression: you now have to enable `#![feature(generic_associated_types)]` to trigger the weird behaviour.

�[33mcommit e73077e�[m
Merge: 917945d e7e9f2e
Author: bors [email protected]
Date: Thu Aug 23 02:54:24 2018 +0000

Auto merge of #53520 - nnethercote:merge-IdxSet-IdxSetBuf, r=nikomatsakis

Merge `IdxSet` and `IdxSetBuf`

Because it simplifies things.

@r? nikomatsakis

�[33mcommit 917945d�[m
Merge: f1b506a bd6ae6a
Author: bors [email protected]
Date: Wed Aug 22 22:08:03 2018 +0000

Auto merge of #52011 - oli-obk:dont_you_hate_it_too_when_everything_panics_constantly, r=eddyb

Allow panicking with string literal messages inside constants

r? @eddyb

cc https://github.com/rust-lang/rust/issues/51999

we can't implement things like `panic!("foo: {}", x)` right now because we can't call trait methods (most notably `Display::fmt`) inside constants. Also most of these impls probably have loops and conditions, so it's messy anyway.

But hey `panic!("foo")` works at least.

cc @japaric got any test ideas for `#![no_std]`?

�[33mcommit f1b506a�[m
Merge: b75b047 f012b4c
Author: bors [email protected]
Date: Wed Aug 22 19:59:52 2018 +0000

Auto merge of #53607 - GuillaumeGomez:rollup, r=GuillaumeGomez

Rollup of 10 pull requests

Successful merges:

 - #53418 (Mark some suggestions as MachineApplicable)
 - #53431 (Moved some feature gate ui tests to correct location)
 - #53442 (Update version of rls-data used with save-analysis)
 - #53504 (Set applicability for more suggestions.)
 - #53541 (Fix missing impl trait display as ret type)
 - #53544 (Point at the trait argument when using unboxed closure)
 - #53558 (Normalize source line and column numbers.)
 - #53562 (Lament the invincibility of the Turbofish)
 - #53574 (Suggest direct raw-pointer dereference)
 - #53585 (Remove super old comment on function that parses items)

Failed merges:

 - #53472 (Use FxHash{Map,Set} instead of the default Hash{Map,Set} everywhere in rustc.)
 - #53563 (use String::new() instead of String::from(""), "".to_string(), "".to_owned() or "".into())

r? @ghost

�[33mcommit b75b047�[m
Merge: c24f27c 71722b9
Author: bors [email protected]
Date: Wed Aug 22 17:43:44 2018 +0000

Auto merge of #53581 - varkor:tyvariants-rename, r=eddyb

Rename TyVariants and variants

- Rename `TypeVariants` to `TyKind`.
- Remove the `Ty` prefix from each one of its variants (plus the identically-named variants of `PrimTy`).
- Rename `ty::Slice` to `ty::List`.

The new names look cleaner.

r? @eddyb

�[33mcommit c24f27c�[m
Merge: 329dde5 0447b50
Author: bors [email protected]
Date: Wed Aug 22 15:29:07 2018 +0000

Auto merge of #53536 - RalfJung:array-drop, r=eddyb

fix array drop glue: properly turn raw ptr into reference

Discovered while working on https://github.com/rust-lang/rust/pull/53424: The generated drop glue uses an assignment `ptr = cur` where `ptr` is a reference and `cur` a raw pointer. This is not well-formed MIR.

Do we have MIR sanity checks that run on the drop glue and should have caught this?

r? @eddyb

�[33mcommit 329dde5�[m
Merge: 674ef66 9d54bf8
Author: bors [email protected]
Date: Wed Aug 22 13:16:32 2018 +0000

Auto merge of #53524 - alexcrichton:buffer-out, r=eddyb

Buffer LLVM's object output stream

In some profiling on OSX I saw the `write` syscall as quite high up on
the profiling graph, which is definitely not good! It looks like we're
setting the output stream of an object file as directly to a file
descriptor which means that we run the risk of doing lots of little
writes rather than a few large writes.

This commit fixes this issue by adding a buffered stream on the output,
causing the `write` syscall to disappear from the profiles on OSX.

�[33mcommit 674ef66�[m
Merge: 71a1ef1 4fec615
Author: bors [email protected]
Date: Wed Aug 22 11:11:14 2018 +0000

Auto merge of #53424 - RalfJung:miri-refactor, r=oli-obk

CTFE engine refactor

* Value gets renamed to `Operand`, so that now `interpret::{Place, Operand}` are the "dynamic" versions of `mir::{Place, Operand}`.
* `Operand` and `Place` share the data for their "stuff is in memory"-base in a new type, `MemPlace`. This also makes it possible to give some more precise types in other areas. Both `Operand` and `MemPlace` have methods available to project into fields (and other kinds of projections) without causing further allocations.
* The type for "a `Scalar` or a `ScalarPair`" is called `Value`, and again used to give some more precise types.
* All of these have versions with an attached layout, so that we can more often drag the layout along instead of recomputing it. This lets us get rid of `PlaceExtra::Downcast`. `MPlaceTy` and `PlaceTy` can only be constructed in place.rs, making sure the layout is handled properly. (The same should eventually be done for `ValTy` and `OpTy`.)
 This is used to check, when copying an operand to a place, that the sizes match (which caught a bunch of bugs).
* All the high-level functions to write typed memory take a `Place`, and live in `place.rs`. All the high-level typed functions to read typed memory take an `Operand`, and live in `operands.rs`.
* Remove `cur_frame` and handling of signedess from memory (catching a bug in the float casting code).
* [Only functional change] Enable sanity check to recurse below dyn traits and slices.

r? @oli-obk

Cc @eddyb

�[33mcommit 71a1ef1�[m
Merge: 24bc544 7e8825b
Author: bors [email protected]
Date: Wed Aug 22 09:03:25 2018 +0000

Auto merge of #53516 - petrochenkov:derregr, r=estebank

resolve: Continue search in outer scopes after applying derive resolution fallback

Fixes https://github.com/rust-lang/rust/issues/53263

�[33mcommit 24bc544�[m
Merge: 786ccc3 7b47fd7
Author: bors [email protected]
Date: Wed Aug 22 06:54:22 2018 +0000

Auto merge of #53509 - petrochenkov:wildregr, r=alexcrichton

resolve: Reject some inaccessible candidates sooner during import resolution

This allows import resolution to progress in cases like #53140

Fixes #53140

�[33mcommit 786ccc3�[m
Merge: a79cffb d6426e8
Author: bors [email protected]
Date: Wed Aug 22 03:01:14 2018 +0000

Auto merge of #53477 - ftilde:exec-rust-gdb-lldb, r=michaelwoerister

Exec gdb/lldb in rust-{gdb/lldb} wrapper scripts

This way, the process we get by executing `rust-gdb` or `rust-lldb` (eventually) is an actual `gdb` or `lldb` process and behaves accordingly. Previously (and at least to me unexpectedly) it was just a script waiting for the debugger to exit. Sending a signal (e.g. SIGINT) to the spawned process did therefore not affect the debugger process (which was just a child of the wrapper script).

In order to work around that we `exec` (according to [this](http://pubs.opengroup.org/onlinepubs/009695399/utilities/exec.html) part of the posix shell) and replace the script process with the debugger in the last line of the script. The lldb script had to be modified to not pass the configuration commands via a script file (which in my opinion is cleaner anyway).

�[33mcommit a79cffb�[m
Merge: 1cbf339 6971c5d
Author: bors [email protected]
Date: Wed Aug 22 00:57:00 2018 +0000

Auto merge of #50912 - varkor:exhaustive-integer-matching, r=arielb1

Exhaustive integer matching

This adds a new feature flag `exhaustive_integer_patterns` that enables exhaustive matching of integer types by their values. For example, the following is now accepted:
```rust
#![feature(exhaustive_integer_patterns)]
#![feature(exclusive_range_pattern)]

fn matcher(x: u8) {
  match x { // ok
    0 .. 32 => { /* foo */ }
    32 => { /* bar */ }
    33 ..= 255 => { /* baz */ }
  }
}
```
This matching is permitted on all integer (signed/unsigned and char) types. Sensible error messages are also provided. For example:
```rust
fn matcher(x: u8) {
  match x { //~ ERROR
    0 .. 32 => { /* foo */ }
  }
}
```
results in:
```
error[E0004]: non-exhaustive patterns: `32u8...255u8` not covered
 --> matches.rs:3:9
  |
6 |   match x {
  |         ^ pattern `32u8...255u8` not covered
```

This implements https://github.com/rust-lang/rfcs/issues/1550 for https://github.com/rust-lang/rust/issues/50907. While there hasn't been a full RFC for this feature, it was suggested that this might be a feature that obviously complements the existing exhaustiveness checks (e.g. for `bool`) and so a feature gate would be sufficient for now.

�[33mcommit 1cbf339�[m
Merge: d0d81b7 985da80
Author: bors [email protected]
Date: Tue Aug 21 22:48:21 2018 +0000

Auto merge of #53439 - GuillaumeGomez:generate-blanket-impls-for-reexported-items, r=QuietMisdreavus

Generate blanket implementations for reexported items as well

Fixes #53374.

r? @QuietMisdreavus

�[33mcommit d0d81b7�[m
Merge: 2d6d3ac 82619ea
Author: bors [email protected]
Date: Tue Aug 21 20:33:31 2018 +0000

Auto merge of #53471 - petrochenkov:biattr2, r=oli-obk

resolve: Some macro resolution refactoring

Work towards completing https://github.com/rust-lang/rust/pull/50911#issuecomment-411605393

The last commit also fixes https://github.com/rust-lang/rust/issues/53269 by not using `def_id()` on `Def::Err` and also fixes https://github.com/rust-lang/rust/issues/53512.

�[33mcommit 2d6d3ac�[m
Merge: 9f9f2c0 1695856
Author: bors [email protected]
Date: Tue Aug 21 18:16:43 2018 +0000

Auto merge of #53444 - varkor:lib_features-conditional, r=michaelwoerister

Only fetch lib_features when there are unknown feature attributes

An attempt to win back some of the performance lost in https://github.com/rust-lang/rust/pull/52644#issuecomment-413761127.

cc @nnethercote

�[33mcommit 9f9f2c0�[m
Merge: a9d4967 e3887e6
Author: bors [email protected]
Date: Tue Aug 21 16:04:11 2018 +0000

Auto merge of #53530 - kennytm:rollup, r=kennytm

Rollup of 17 pull requests

Successful merges:

 - #53030 (Updated RELEASES.md for 1.29.0)
 - #53104 (expand the documentation on the `Unpin` trait)
 - #53213 (Stabilize IP associated constants)
 - #53296 (When closure with no arguments was expected, suggest wrapping)
 - #53329 (Replace usages of ptr::offset with ptr::{add,sub}.)
 - #53363 (add individual docs to `core::num::NonZero*`)
 - #53370 (Stabilize macro_vis_matcher)
 - #53393 (Mark libserialize functions as inline)
 - #53405 (restore the page title after escaping out of a search)
 - #53452 (Change target triple used to check for lldb in build-manifest)
 - #53462 (Document Box::into_raw returns non-null ptr)
 - #53465 (Remove LinkMeta struct)
 - #53492 (update lld submodule to include RISCV patch)
 - #53496 (Fix typos found by codespell.)
 - #53521 (syntax: Optimize some literal parsing)
 - #53540 (Moved issue-53157.rs into src/test/ui/consts/const-eval/)
 - #53551 (Avoid some Place clones.)

Failed merges:

r? @ghost

�[33mcommit a9d4967�[m
Merge: 70c33bb e221fcc
Author: bors [email protected]
Date: Tue Aug 21 13:52:11 2018 +0000

Auto merge of #53236 - alexreg:stabilise-raw-idents, r=cramertj

Stabilise raw_identifiers feature

* [Reference PR](https://github.com/rust-lang-nursery/reference/pull/395)
* [Book PR](https://github.com/rust-lang/book/pull/1480)
* [Rust by Example PR](https://github.com/rust-lang/rust-by-example/pull/1095)

Closes #48589.

r? @cramertj
CC @cuviper @centril

�[33mcommit 70c33bb�[m
Merge: 1558ae7 79a905e
Author: bors [email protected]
Date: Tue Aug 21 06:40:20 2018 +0000

Auto merge of #53080 - hermord:rc-opt, r=alexcrichton

Change `Rc::inc_{weak,strong}` to better hint optimization to LLVM

As discussed in #13018, `Rc::inc_strong` and `Rc::inc_weak` are changed to allow compositions of `clone` and `drop` to be better optimized. Almost entirely as in [this comment](https://github.com/rust-lang/rust/issues/13018#issuecomment-408642184), except that `abort` on zero is added so that a `drop(t.clone())` does not produce a zero check followed by conditional deallocation.

This is different from #21418 in that it doesn't rely on `assume`, avoiding the prohibitive compilation slowdown.

[Before and after IR](https://gist.github.com/hermord/266e55451b7fe0bb8caa6e35d17c86e1).

�[33mcommit 1558ae7�[m
Merge: bf1e461 ee9bd0f
Author: bors [email protected]
Date: Mon Aug 20 15:47:39 2018 +0000

Auto merge of #51880 - varkor:generics-hir-generalisation-followup, r=eddyb

The Great Generics Generalisation: HIR Followup

Addresses the final comments in #48149.

r? @eddyb, but there are a few things I have yet to clean up. Making the PR now to more easily see when things break.

cc @yodaldevoid

�[33mcommit bf1e461�[m
Merge: 758239c 86641d9
Author: bors [email protected]
Date: Mon Aug 20 09:09:55 2018 +0000

Auto merge of #47562 - Centril:feature/core_convert_id, r=oli-obk

Add the identity function as core::convert::identity

## New notes

This implements rust-lang/rfcs#2306 (see https://github.com/rust-lang/rust/issues/53500).

## Old notes (ignore this in new reviews)

Adds the identity function `fn id<T>(x: T) -> T { x }` to core::convert and the prelude.
Some motivations for why this is useful are explained in the doc tests.
Another is that using the identity function instead of `{ x }` or `|x| x` makes it clear that you intended to use an identity conversion on purpose.

The reasoning:
+ behind adding this to `convert` and not `mem` is that this is an identity *conversion*.
+ for adding this to the prelude is that it should be easy enough to use that the ease of writing your own identity function or using a closure `|x| x` doesn't overtake that.

I've separated this out into two feature gates so that the addition to the prelude can be considered and stabilized separately.

cc @bluss

�[33mcommit 758239c�[m
Merge: d2048b6 7e5a2b2
Author: bors [email protected]
Date: Mon Aug 20 06:34:09 2018 +0000

Auto merge of #53519 - Manishearth:clippyup, r=eddyb

Update clippy

r? @oli-obk @eddyb

�[33mcommit d2048b6�[m
Merge: 6bf6d50 a6f4ae8
Author: bors [email protected]
Date: Mon Aug 20 01:12:58 2018 +0000

Auto merge of #52101 - japaric:linker-flavor, r=alexcrichton

try to infer linker flavor from linker name and vice versa

This is a second take on PR #50359 that implements the logic proposed in https://github.com/rust-lang/rust/pull/50359#pullrequestreview-116663121

With this change it would become possible to link `thumb*` binaries using GNU's LD on stable as `-C linker=arm-none-eabi-ld` would be enough to change both the linker and the linker flavor from their default values of `arm-none-eabi-gcc` and `gcc`.

To link `thumb*` binaries using rustc's LLD on stable `-Z linker-flavor` would need to be stabilized as `-C linker=rust-lld -Z linker-flavor=ld.lld` are both required to change the linker and the linker flavor, but this PR doesn't propose that. We would probably need some sort of stability guarantee around `rust-lld`'s name and availability to make linking with rustc's LLD truly stable.

With this change it would also be possible to link `thumb*` binaries using a system installed LLD on stable using the `-C linker=ld.lld` flag (provided that `ld.lld` is a symlink to the system installed LLD).

r? @alexcrichton

�[33mcommit 6bf6d50�[m
Merge: f28f648 6138c82
Author: bors [email protected]
Date: Sun Aug 19 23:08:26 2018 +0000

Auto merge of #52953 - dsciarra:mv-codemap-sourcemap, r=petrochenkov

Rename CodeMap/FileMap to SourceMap/SourceFile

A first renaming for #51574

�[33mcommit f28f648�[m
Merge: 3ac79c7 8895e3b
Author: bors [email protected]
Date: Sun Aug 19 21:03:12 2018 +0000

Auto merge of #53316 - tristanburgess:52895_existential_type_ICE, r=oli-obk

52985: cause cycle err on inf trait normalization

Issue: #52985
 - If an existential type is defined, but no user code infers the
concrete type behind the existential type, normalization would
infinitely recurse on this existential type which is only defined in
terms of itself.
  - Instead of raising an inf recurse error, we cause a cycle error to
help highlight that the issue is that the type is only defined in terms
of itself.
  - Three known potential improvements:
    - If type folding itself was exposed as a query, used by
normalization and other mechanisms, cases that would cause infinite recursion would
automatically cause a cycle error.
    - The span for the cycle error should be improved to point to user
code that fails to allow inference of the concrete type of the existential type,
assuming that this error occurs because no user code can allow inference the
concrete type.
    - A mechanism to extend the cycle error with a helpful note would be nice. Currently,
the error is built and maintained by src/librustc/ty/query/plumbing,
with no known way to extend the information that the error gets built
with.

r? @oli-obk

�[33mcommit 3ac79c7�[m
Merge: bfc3b20 58e4b54
Author: bors [email protected]
Date: Sun Aug 19 17:44:43 2018 +0000

Auto merge of #53258 - nikomatsakis:issue-53189-optimize-reassignment-immutable-state, r=pnkfelix

optimize reassignment immutable state

This is the "simple fix" when it comes to checking for reassignment. We just shoot for compatibility with the AST-based checker. Makes no attempt to solve #21232.

I opted for this simpler fix because I didn't want to think about complications [like the ones described here](https://github.com/rust-lang/rust/issues/21232#issuecomment-412219247).

Let's do some profiling measurements.

Fixes #53189

r? @pnkfelix

�[33mcommit bfc3b20�[m
Merge: b355906 1341e66
Author: bors [email protected]
Date: Sun Aug 19 15:22:18 2018 +0000

Auto merge of #53248 - nikomatsakis:nll-trivial-sized-predicate, r=eddyb

skip trivial `Sized` predicates

This came to about a 2% win for me in cargo. Small, but hey.

r? @eddyb

�[33mcommit b355906�[m
Merge: 8928de7 c488d59
Author: bors [email protected]
Date: Sun Aug 19 12:21:56 2018 +0000

Auto merge of #51131 - qnighy:unsized-locals, r=eddyb

Implement Unsized Rvalues

This PR is the first step to implement RFC1909: unsized rvalues (#48055).

## Implemented

- `Sized` is removed for arguments and local bindings. (under `#![feature(unsized_locals)]`)
- Unsized locations are allowed in MIR
- Unsized places and operands are correctly translated at codegen

## Not implemented in this PR

- Additional `Sized` checks:
  - tuple struct constructor (accidentally compiles now)
  - closure arguments at closure generation (accidentally compiles now)
  - upvars (ICEs now)
- Generating vtable for `fn method(self)` (ICEs now)
- VLAs: `[e; n]` where `n` isn't const
- Reduce unnecessary allocations

## Current status

- [x] Fix `__rust_probestack` (rust-lang-nursery/compiler-builtins#244)
  - [x] Get the fix merged
- [x] `#![feature(unsized_locals)]`
  - [x] Give it a tracking issue number
- [x] Lift sized checks in typeck and MIR-borrowck
  - [ ] <del>Forbid `A(unsized-expr)`</del> will be another PR
- [x] Minimum working codegen
- [x] Add more examples and fill in unimplemented codegen paths
- [ ] <del>Loosen object-safety rules (will be another PR)</del>
- [ ] <del>Implement `Box<FnOnce>` (will be another PR)</del>
- [ ] <del>Reduce temporaries (will be another PR)</del>

�[33mcommit 8928de7�[m
Merge: a9fe312 1001b2b
Author: bors [email protected]
Date: Sun Aug 19 09:40:36 2018 +0000

Auto merge of #52972 - RalfJung:from_raw_parts_align, r=alexcrichton

debug_assert to ensure that from_raw_parts is only used properly aligned

This does not help nearly as much as I would hope because everybody uses the distributed libstd which is compiled without debug assertions. For this reason, I am not sure if this is even worth it. OTOH, this would have caught the misalignment fixed by https://github.com/rust-lang/rust/issues/42789 *if* there had been any tests actually using ZSTs with alignment >1 (we have a CI runner which has debug assertions in libstd enabled), and it seems to currently [fail in the rg testsuite](https://ci.appveyor.com/project/rust-lang/rust/build/1.0.8403/job/v7dfdcgn8ay5j6sb). So maybe it is worth it, after all.

I have seen the attribute `#[rustc_inherit_overflow_checks]` in some places, does that make it so that the *caller's* debug status is relevant? Is there a similar attribute for `debug_assert!`? That could even subsume `rustc_inherit_overflow_checks`: Something like `rustc_inherit_debug_flag` could affect *all* places that change the generated code depending on whether we are in debug or release mode. In fact, given that we have to keep around the MIR for generic functions anyway, is there ever a reason *not* to handle the debug flag that way? I guess currently we apply debug flags like `cfg` so this is dropped early during the MIR pipeline?

EDIT: I learned from @eddyb that because of how `debug_assert!` works, this is not realistic. Well, we could still have it for the rustc CI runs and then maybe, eventually, when libstd gets compiled client-side and there is both a debug and a release build... then this will also benefit users.^^

�[33mcommit a9fe312�[m
Merge: 33b923f 14aed81
Author: bors [email protected]
Date: Sat Aug 18 21:58:37 2018 +0000

Auto merge of #52592 - eddyb:or-default, r=Mark-Simulacrum

Use the new Entry::or_default method where possible.

@pnkfelix
Copy link
Member

Based on skimming over the log in the previous comment, the most likely contender for which commit fixed this bug is most likely f28f648 aka PR #53316

@pnkfelix
Copy link
Member

I guess I'll nominate PR #53316 for potential backporting (with the condition that any hypothetical backport should be accompanied by validation that the backported PR actually is fixing this bug).

@pnkfelix
Copy link
Member

Hmm. It is also worth noting that the issue fixed by PR #53316, namely Issue #52985, explicitly refers to this one, saying that the message is similar but the code is "very different"

Nonetheless, from reading over PR #53316, it seems to me like it really did end up explicitly covering cases like this one here on Issue #52701, and it was just an oversight that it wasn't tagged as fixing it...?

In any case, I threw a beta- and stable-nomination tag onto PR #53316.

@nikomatsakis
Copy link
Contributor

Is this affecting any crates on crates.io etc?

@pnkfelix
Copy link
Member

discussed at T-compiler meeting. I'll take on the task of seeing if a backport of PR #53316 actually fixes #52701 on beta (+ stable)

@oli-obk
Copy link
Contributor

oli-obk commented Oct 2, 2018

As commented in #53316 (comment) this is just a diagnostics issue. The code never compiled successfully. It is supposed to be an error and is so on nightly and beta.

@oli-obk oli-obk added A-diagnostics Area: Messages for errors, warnings, and lints and removed P-high High priority labels Oct 2, 2018
@pnkfelix
Copy link
Member

pnkfelix commented Oct 4, 2018

Okay. As noted above, the bug is fixed in nightly and beta, and in #53316 (comment) it was decided that we would not risk doing a stable backport.

So I am closing this as "fixed in beta/nightly and wontfix for current stable."

@pnkfelix pnkfelix closed this as completed Oct 4, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-diagnostics Area: Messages for errors, warnings, and lints A-impl-trait Area: `impl Trait`. Universally / existentially quantified anonymous types with static dispatch. C-bug Category: This is a bug. I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️ regression-from-stable-to-stable Performance or correctness regression from one stable version to another. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.
Projects
None yet
Development

No branches or pull requests

8 participants