]> git.lizzy.rs Git - rust.git/log
rust.git
5 years agoborrowck=migrate mode needs to check parent(s) when its given a closure.
Felix S. Klock II [Mon, 29 Oct 2018 23:16:28 +0000 (00:16 +0100)]
borrowck=migrate mode needs to check parent(s) when its given a closure.

5 years agoAuto merge of #55462 - pietroalbini:rollup, r=pietroalbini
bors [Mon, 29 Oct 2018 10:19:17 +0000 (10:19 +0000)]
Auto merge of #55462 - pietroalbini:rollup, r=pietroalbini

Rollup of 9 pull requests

Successful merges:

 - #54965 (update tcp stream documentation)
 - #55269 (fix typos in various places)
 - #55384 (Avoid unnecessary allocations in `float_lit` and `integer_lit`.)
 - #55423 (back out bogus `Ok`-wrapping suggestion on `?` arm type mismatch)
 - #55426 (Make a bunch of trivial methods of NonNull be `#[inline]`)
 - #55438 (Avoid directly catching BaseException in bootstrap configure script)
 - #55439 (Remove unused sys import from generate-deriving-span-tests)
 - #55440 (Remove unreachable code in hasClass function in Rustdoc)
 - #55447 (Fix invalid path in generate-deriving-span-tests.py.)

Failed merges:

r? @ghost

5 years agoRollup merge of #55447 - frewsxcv:frewsxcv-rename, r=Mark-Simulacrum
Pietro Albini [Mon, 29 Oct 2018 08:47:52 +0000 (09:47 +0100)]
Rollup merge of #55447 - frewsxcv:frewsxcv-rename, r=Mark-Simulacrum

Fix invalid path in generate-deriving-span-tests.py.

This script broke after #53196 – the tests were moved.

5 years agoRollup merge of #55440 - xfix:patch-11, r=GuillaumeGomez
Pietro Albini [Mon, 29 Oct 2018 08:47:51 +0000 (09:47 +0100)]
Rollup merge of #55440 - xfix:patch-11, r=GuillaumeGomez

Remove unreachable code in hasClass function in Rustdoc

5 years agoRollup merge of #55439 - xfix:patch-10, r=frewsxcv
Pietro Albini [Mon, 29 Oct 2018 08:47:50 +0000 (09:47 +0100)]
Rollup merge of #55439 - xfix:patch-10, r=frewsxcv

Remove unused sys import from generate-deriving-span-tests

5 years agoRollup merge of #55438 - xfix:patch-9, r=frewsxcv
Pietro Albini [Mon, 29 Oct 2018 08:47:49 +0000 (09:47 +0100)]
Rollup merge of #55438 - xfix:patch-9, r=frewsxcv

Avoid directly catching BaseException in bootstrap configure script

It includes stuff like pressing CTRL+C, which likely isn't intended.

5 years agoRollup merge of #55426 - fitzgen:nonnull-inline, r=SimonSapin
Pietro Albini [Mon, 29 Oct 2018 08:47:48 +0000 (09:47 +0100)]
Rollup merge of #55426 - fitzgen:nonnull-inline, r=SimonSapin

Make a bunch of trivial methods of NonNull be `#[inline]`

I was seeing super trivial methods not getting inlined in some of my builds, so I went ahead and just marked all the methods inline where it seemed appropriate.

r? @SimonSapin

5 years agoRollup merge of #55423 - zackmdavis:back_out_bogus_ok_wrapping_suggestion, r=estebank
Pietro Albini [Mon, 29 Oct 2018 08:47:46 +0000 (09:47 +0100)]
Rollup merge of #55423 - zackmdavis:back_out_bogus_ok_wrapping_suggestion, r=estebank

back out bogus `Ok`-wrapping suggestion on `?` arm type mismatch

This suggestion was introduced in #51938 / 6cc78bf8d7 (while introducing different language for type errors coming from `?` rather than a `match`), but it has a lot of false-positives, and incorrect suggestions carry more badness than marginal good suggestions do goodness. I regret not doing this earlier. :disappointed:

Resolves #52537, resolves #54578.

r? @estebank

5 years agoRollup merge of #55384 - nnethercote:better-integer_lit-float_lit, r=michaelwoerister
Pietro Albini [Mon, 29 Oct 2018 08:47:45 +0000 (09:47 +0100)]
Rollup merge of #55384 - nnethercote:better-integer_lit-float_lit, r=michaelwoerister

Avoid unnecessary allocations in `float_lit` and `integer_lit`.

This commit avoids an allocation when parsing any float and integer
literals that don't involved underscores.

This reduces the number of allocations done for the `tuple-stress`
benchmark by 10%, reducing its instruction count by just under 1%.

5 years agoAuto merge of #55270 - RalfJung:stacked-borrows-ng, r=oli-obk
bors [Mon, 29 Oct 2018 03:28:31 +0000 (03:28 +0000)]
Auto merge of #55270 - RalfJung:stacked-borrows-ng, r=oli-obk

miri engine: Stacked Borrows NG

For more refined tracking in miri, we do return untagged pointers from the memory abstraction after allocations and let the caller decide how to tag these.

Also refactor the `tag_(de)reference` hooks so they can be more easily called in the ref-to-place and place-to-ref methods, and reorder things in validation: validation calls ref-to-place which (when running in miri) triggers some checks, so we want to run it rather late and catch other problems first. We also do not need to redundantly check the ref to be allocated any more, the checks miri does anyway imply thath.

r? @oli-obk

5 years agoAuto merge of #55043 - oliver-giersch:unchecked_thread_spawning, r=alexcrichton
bors [Sun, 28 Oct 2018 21:34:12 +0000 (21:34 +0000)]
Auto merge of #55043 - oliver-giersch:unchecked_thread_spawning, r=alexcrichton

Unchecked thread spawning

# Summary

Add an unsafe interface for spawning lifetime-unrestricted threads for
library authors to build less-contrived, less-hacky safe abstractions
on.

# Motivation

So a few years back scoped threads were entirely removed from the Rust
stdlib, the reason being that it was possible to leak the scoped thread's
join guards without resorting to unsafe code, which meant the concept
was not completely safe, either.
Only a maximally-restrictive safe API for thread spawning was kept in the
stdlib, that requires `'static` lifetime bounds on both the thread closure
and its return type.
A number of 3rd party libraries sprung up to offer their implementations
for safe scoped threads implementations.
These work by essentially hiding the join guards from the user, thus
forcing them to join at the end of an (internal) function scope.

However, since these libraries have to use the maximally restrictive
thread spawning API, they have to resort to some very contrived manipulations
and subversions of Rust's type system to basically achieve what this commit does
with some minimal restructuring of the current code and exposing a new unsafe
function signature for spawning threads without lifetime restrictions.
Obviously this is unsafe, but its main use would be to allow library authors
to write safe abstractions with and around it.
To further illustrate my point, here's a quick summary of the hoops that,
for instance `crossbeam`, has to jump through to spawn a lifetime unrestricted
thread, all of which would not be necessary if an unsafe API existed as part
of the stdlib:

1. Allocate an `Arc<Option<T>>` on the heap where the result with type
`T: 'a` will go (in practice requires `Mutex` or `UnsafeCell` as well).

2. Wrap the desired thread closure with lifetime bound `'a` into another
closure (also `..: 'a`) that returns `()`, executes the inner closure and
writes its result into the pre-allocated `Option<T>`.

3. Box the wrapping closure, cast it to a trait object (`FnBox`) and
(unsafely) transmute its lifetime bound from `'a` to `'static`.

So while this new `spawn_unchecked` function is certainly not very relevant
for general use, since scoped threads are so common I think it makes sense
to expose an interface for libraries implementing these to build on.
The changes implemented are also very minimal: The current `spawn` function
(which internally contains unsafe code) is moved into an unsafe `spawn_unchecked`
function, which the safe function then wraps around.

# Issues

- ~~so far, no documentation for the new function (yet)~~
- the name of the function might be controversial, as `*_unchecked` more commonly
indicates that some sort of runtime check is omitted (`unrestricted` may be
more fitting)
- if accepted, it might make sense to add a freestanding `thread::spawn_unchecked`
function similar to the current `thread::spawn` for convenience.

5 years agoAuto merge of #54487 - RalfJung:ctfe-backtrace, r=oli-obk
bors [Sun, 28 Oct 2018 18:49:46 +0000 (18:49 +0000)]
Auto merge of #54487 - RalfJung:ctfe-backtrace, r=oli-obk

Delayed CTFE backtraces

This renames the env var that controls CTFE backtraces from `MIRI_BACKTRACE` to `RUST_CTFE_BACKTRACE` so that we can use `MIRI_BACKTRACE` in the miri tool to only show backtraces of the main miri execution.

It also makes `RUST_CTFE_BACKTRACE` only show backtraces that actually get rendered as errors, instead of showing them eagerly when the `Err` happens. The current behavior is near useless in miri because it shows about one gazillion backtraces for errors that we later catch and do not care about. However, @oli-obk likes the current behavior for rustc CTFE work so it is still available via `RUST_CTFE_BACKTRACE=immediate`.

NOTE: This is based on top of https://github.com/rust-lang/rust/pull/53821. Only [the last three commits](https://github.com/oli-obk/rust/compare/sanity_query...RalfJung:ctfe-backtrace) are new.

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

5 years agoFix invalid path in generate-deriving-span-tests.py.
Corey Farwell [Sun, 28 Oct 2018 16:12:00 +0000 (12:12 -0400)]
Fix invalid path in generate-deriving-span-tests.py.

This script broke after #53196 after the tests were moved.

5 years agoAuto merge of #55433 - kennytm:rollup, r=kennytm
bors [Sun, 28 Oct 2018 16:00:00 +0000 (16:00 +0000)]
Auto merge of #55433 - kennytm:rollup, r=kennytm

Rollup of 11 pull requests

Successful merges:

 - #55148 (Implement FromStr for PathBuf)
 - #55185 (path suggestions in Rust 2018 should point out the change in semantics)
 - #55191 (Fix sub-variant doc display)
 - #55199 (Impl items have generics)
 - #55244 (Don't rerun MIR passes when inlining)
 - #55252 (Add MaybeUninit::new)
 - #55257 (Allow extern statics with an extern type)
 - #55389 (Remove unnecessary mut in iterator.find_map documentation example, R…)
 - #55406 (Update string.rs)
 - #55412 (Fix an ICE in the min_const_fn analysis)
 - #55421 (Add ManuallyDrop::take)

5 years agoRollup merge of #55199 - oli-obk:instance_printing, r=davidtwco
kennytm [Sun, 28 Oct 2018 13:38:53 +0000 (21:38 +0800)]
Rollup merge of #55199 - oli-obk:instance_printing, r=davidtwco

Impl items have generics

5 years agoRollup merge of #55257 - mjbshaw:static, r=oli-obk
kennytm [Sun, 28 Oct 2018 13:38:12 +0000 (21:38 +0800)]
Rollup merge of #55257 - mjbshaw:static, r=oli-obk

Allow extern statics with an extern type

Fixes #55239

5 years agoRollup merge of #55185 - davidtwco:issue-55130, r=nikomatsakis
kennytm [Sun, 28 Oct 2018 13:37:26 +0000 (21:37 +0800)]
Rollup merge of #55185 - davidtwco:issue-55130, r=nikomatsakis

path suggestions in Rust 2018 should point out the change in semantics

Fixes #55130.

This commit extends existing path suggestions to link to documentation
on the changed semantics of `use` in Rust 2018.

5 years agoRollup merge of #55421 - CAD97:patch-1, r=kennytm
kennytm [Sun, 28 Oct 2018 13:32:03 +0000 (21:32 +0800)]
Rollup merge of #55421 - CAD97:patch-1, r=kennytm

Add ManuallyDrop::take

Tracking issue: #55422

Proposed in this form in https://internals.rust-lang.org/t/mini-rfc-manuallydrop-take/8679,
see that thread for some history.

A small convenience wrapper for `ManuallyDrop` that makes a pattern (taking ownership of the contained data in drop) more obvious.

5 years agoRollup merge of #55412 - oli-obk:min_const_fn_ice, r=estebank
kennytm [Sun, 28 Oct 2018 08:38:54 +0000 (16:38 +0800)]
Rollup merge of #55412 - oli-obk:min_const_fn_ice, r=estebank

Fix an ICE in the min_const_fn analysis

fixes https://github.com/rust-lang/rust/issues/55395

cc @Centril

5 years agoRollup merge of #55406 - rick68:patch-16, r=varkor
kennytm [Sun, 28 Oct 2018 08:38:53 +0000 (16:38 +0800)]
Rollup merge of #55406 - rick68:patch-16, r=varkor

Update string.rs

remove unused variable i in example String::with_capacity()

5 years agoRollup merge of #55389 - meven:master, r=shepmaster
kennytm [Sun, 28 Oct 2018 08:38:52 +0000 (16:38 +0800)]
Rollup merge of #55389 - meven:master, r=shepmaster

Remove unnecessary mut in iterator.find_map documentation example, R…

Relates to #49098

Removes a mut that could induce newcomers to put a mut in their code that the compiler would comply about.

https://github.com/rust-lang/rust/pull/49098/files#r227422388

5 years agoAuto merge of #55192 - cramertj:nested-mod, r=petrochenkov
bors [Sun, 28 Oct 2018 13:13:55 +0000 (13:13 +0000)]
Auto merge of #55192 - cramertj:nested-mod, r=petrochenkov

Fix ordering of nested modules in non-mod.rs mods

Flatten relative offset into directory path before adding inline
(mod x { ... }) module names to the current directory path.

Fix #55094

5 years agoRemove unreachable code in hasClass function in Rustdoc
Konrad Borowski [Sun, 28 Oct 2018 11:12:29 +0000 (12:12 +0100)]
Remove unreachable code in hasClass function in Rustdoc

5 years agoRemove unused sys import from generate-deriving-span-tests
Konrad Borowski [Sun, 28 Oct 2018 11:06:28 +0000 (12:06 +0100)]
Remove unused sys import from generate-deriving-span-tests

5 years agoAvoid directly catching BaseException in bootstrap configure script
Konrad Borowski [Sun, 28 Oct 2018 11:03:29 +0000 (12:03 +0100)]
Avoid directly catching BaseException in bootstrap configure script

It includes stuff like pressing CTRL+C, which likely isn't intended.

5 years agodon't be too perf-greedy
Ralf Jung [Mon, 22 Oct 2018 17:17:37 +0000 (19:17 +0200)]
don't be too perf-greedy

5 years agodon't tag new memory inside memory.rs; add machine hook to tag new memory
Ralf Jung [Mon, 22 Oct 2018 15:15:42 +0000 (17:15 +0200)]
don't tag new memory inside memory.rs; add machine hook to tag new memory

5 years agoalways print backtrace when CTFE_BACKTRACE is set
Ralf Jung [Tue, 9 Oct 2018 20:02:15 +0000 (22:02 +0200)]
always print backtrace when CTFE_BACKTRACE is set

No point in making the user also enable RUST_LOG

5 years agoremove some unused CTFE error variants
Ralf Jung [Thu, 20 Sep 2018 06:26:02 +0000 (08:26 +0200)]
remove some unused CTFE error variants

5 years agorename env var to control ctfe backtraces, and make it usually show the backtrace...
Ralf Jung [Tue, 18 Sep 2018 09:01:13 +0000 (11:01 +0200)]
rename env var to control ctfe backtraces, and make it usually show the backtrace delayed

The env var is now RUST_CTFE_BACKTRACE.  Similar to RUST_BACKTRACE, it usually
only prints a backtrace when the error actually surfaces, not when it happens.
This makes a difference when we catch errors.

As per @oli-obk's request, one can set RUST_CTFE_BACKTRACE=immediate to get the
backtrace shown immediately.

5 years agomake memory private; that's what we have `memory_mut` for
Ralf Jung [Fri, 19 Oct 2018 17:39:52 +0000 (19:39 +0200)]
make memory private; that's what we have `memory_mut` for

5 years agovalidity in non-const mode relies on ref_to_mplace checking bounds; (de)reference...
Ralf Jung [Fri, 19 Oct 2018 15:11:23 +0000 (17:11 +0200)]
validity in non-const mode relies on ref_to_mplace checking bounds; (de)reference hooks work on places

5 years agomake (de)reference hooks more consistent
Ralf Jung [Thu, 18 Oct 2018 16:01:42 +0000 (18:01 +0200)]
make (de)reference hooks more consistent

5 years agoRollup merge of #55252 - SimonSapin:maybeuninit-new, r=bluss
kennytm [Sun, 28 Oct 2018 08:38:48 +0000 (16:38 +0800)]
Rollup merge of #55252 - SimonSapin:maybeuninit-new, r=bluss

Add MaybeUninit::new

Sometimes it *is* initialized!

5 years agoRollup merge of #55244 - wesleywiser:issue-50411, r=nikomatsakis
kennytm [Sun, 28 Oct 2018 08:38:47 +0000 (16:38 +0800)]
Rollup merge of #55244 - wesleywiser:issue-50411, r=nikomatsakis

Don't rerun MIR passes when inlining

Fixes #50411

r? @nikomatsakis

I updated your commit message with additional details. Let me know if any of that is incorrect. I also added the appropriate `compile-flags` directive to the test.

Thanks for you help on this!

cc @RalfJung related to your PR #55086

5 years agoRollup merge of #55191 - GuillaumeGomez:fix-sub-variant, r=QuietMisdreavus
kennytm [Sun, 28 Oct 2018 08:38:46 +0000 (16:38 +0800)]
Rollup merge of #55191 - GuillaumeGomez:fix-sub-variant, r=QuietMisdreavus

Fix sub-variant doc display

Fixes #54758.

<img width="1440" alt="screen shot 2018-10-19 at 01 34 11" src="https://user-images.githubusercontent.com/3050060/47189939-43481d00-d33f-11e8-868f-cf479fc79e62.png">

r? @QuietMisdreavus

5 years agoRollup merge of #55148 - SimonSapin:path-fromstr, r=oli-obk
kennytm [Sun, 28 Oct 2018 08:38:45 +0000 (16:38 +0800)]
Rollup merge of #55148 - SimonSapin:path-fromstr, r=oli-obk

Implement FromStr for PathBuf

Initially landed in https://github.com/rust-lang/rust/pull/48292 and reverted in https://github.com/rust-lang/rust/pull/50401. This time, use `std::string::ParseError` as suggested in https://github.com/rust-lang/rust/issues/44431#issuecomment-428112632

5 years agoAdd ManuallyDrop::take
Christopher Durham [Sat, 27 Oct 2018 19:05:13 +0000 (15:05 -0400)]
Add ManuallyDrop::take

https://internals.rust-lang.org/t/mini-rfc-manuallydrop-take/8679

5 years agoAdd note linking to Rust 2018 path semantics docs.
David Wood [Thu, 18 Oct 2018 17:09:49 +0000 (19:09 +0200)]
Add note linking to Rust 2018 path semantics docs.

This commit extends existing path suggestions to link to documentation
on the changed semantics of `use` in Rust 2018.

5 years agoAuto merge of #55297 - petrochenkov:uni, r=Mark-Simulacrum
bors [Sun, 28 Oct 2018 03:07:37 +0000 (03:07 +0000)]
Auto merge of #55297 - petrochenkov:uni, r=Mark-Simulacrum

Partial implementation of uniform paths 2.0 to land before beta

Reimplementation of uniform paths using in-scope resolution rather than canaries is a minor breaking change due to stricter future-proofing, so it needs to be landed before beta or backported later.

I hope to implement at least something until beta so we have less to backport.
r? @Mark-Simulacrum

5 years agoAuto merge of #54683 - zackmdavis:critique_of_pure_lints, r=petrochenkov
bors [Sun, 28 Oct 2018 00:28:03 +0000 (00:28 +0000)]
Auto merge of #54683 - zackmdavis:critique_of_pure_lints, r=petrochenkov

lint reasons (RFC 2883, part 1)

This implements the `reason =` functionality described in [the RFC](https://github.com/rust-lang/rfcs/blob/master/text/2383-lint-reasons.md) under a `lint_reasons` feature gate.

![lint_reasons_pt_1](https://user-images.githubusercontent.com/1076988/46252097-eed51000-c418-11e8-8212-939d3f02f95d.png)

5 years agoresolve: Desugar empty import groups into synthetic dummy imports
Vadim Petrochenkov [Sat, 27 Oct 2018 20:38:09 +0000 (23:38 +0300)]
resolve: Desugar empty import groups into synthetic dummy imports

so that they are correctly resolved on 2018 edition

5 years agoresolve: Make sure macros and imports are resolved in full parent scope
Vadim Petrochenkov [Sat, 27 Oct 2018 17:23:54 +0000 (20:23 +0300)]
resolve: Make sure macros and imports are resolved in full parent scope

Slightly simplify `fn build_reduced_graph_for_use_tree`

5 years agoresolve: More precise spans for privacy errors
Vadim Petrochenkov [Sat, 27 Oct 2018 17:21:34 +0000 (20:21 +0300)]
resolve: More precise spans for privacy errors

5 years agoresolve: Absolute paths may be undetermined on 2018 edition
Vadim Petrochenkov [Sat, 27 Oct 2018 13:46:48 +0000 (16:46 +0300)]
resolve: Absolute paths may be undetermined on 2018 edition

due to macro-expanded `extern crate` items adding names to extern prelude.

5 years agoresolve: Refactor away `legacy_macro_imports`/`LegacyMacroImports`
Vadim Petrochenkov [Thu, 25 Oct 2018 22:15:51 +0000 (01:15 +0300)]
resolve: Refactor away `legacy_macro_imports`/`LegacyMacroImports`

5 years agoresolve: Record full parent scope data for imports
Vadim Petrochenkov [Sun, 21 Oct 2018 22:28:59 +0000 (01:28 +0300)]
resolve: Record full parent scope data for imports

5 years agoMake a bunch of trivial methods of NonNull be `#[inline]`
Nick Fitzgerald [Sat, 27 Oct 2018 22:59:04 +0000 (00:59 +0200)]
Make a bunch of trivial methods of NonNull be `#[inline]`

5 years agoback out bogus `Ok`-wrapping suggestion on `?` arm type mismatch
Zack M. Davis [Sat, 27 Oct 2018 21:55:07 +0000 (14:55 -0700)]
back out bogus `Ok`-wrapping suggestion on `?` arm type mismatch

This suggestion was introduced in #51938 / 6cc78bf8d7 (while
introducing different language for type errors coming from `?` rather
than a `match`), but it has a lot of false-positives (as repeatedly
reported in Issues #52537, #52598, #54578, #55336), and incorrect
suggestions carry more badness than marginal good suggestions do
goodness. Just get rid of it (unless and until someone figures out how
to do it correctly).

Resolves #52537, resolves #54578.

5 years agowherein the status of empty and reason-only lint attributes is clarified
Zack M. Davis [Tue, 16 Oct 2018 06:35:58 +0000 (23:35 -0700)]
wherein the status of empty and reason-only lint attributes is clarified

We avoid an ICE by checking for an empty meta-item list before we
index into the meta-items, and leave commentary about where we'd like
to issue unused-attributes lints in the future. Note that empty lint
attributes are already accepted by the stable compiler; generalizing
this to weird reason-only lint attributes seems like the
conservative/consilient generalization.

5 years agoin which lint reasons are restricted to come last in the attribute
Zack M. Davis [Fri, 12 Oct 2018 07:21:21 +0000 (00:21 -0700)]
in which lint reasons are restricted to come last in the attribute

Vadim Petrochenkov suggested this in review ("an error? just to be
conservative"), and it turns out to be convenient from the
implementer's perspective: in the initial proposed implementation (or
`HEAD~2`, as some might prefer to call it), we were doing an entire
whole iteration over the meta items just to find the reason (before
iterating over them to set the actual lint levels). This way, we can
just peek at the end rather than adding that extra loop (or
restructuring the existing code). The RFC doesn't seem to take a
position on this, and there's some precedent for restricting things to
be at the end of a sequence (we only allow `..` at the end of a struct
pattern, even if it would be possible to let it appear anywhere in the
sequence).

5 years agofeature-gate lint reasons
Zack M. Davis [Sun, 30 Sep 2018 01:00:50 +0000 (18:00 -0700)]
feature-gate lint reasons

We take stability seriously, so we shy away from making even seemingly
"trivial" features insta-stable.

5 years agoAuto merge of #54183 - qnighy:by-value-object-safety, r=oli-obk
bors [Sat, 27 Oct 2018 19:29:35 +0000 (19:29 +0000)]
Auto merge of #54183 - qnighy:by-value-object-safety, r=oli-obk

Implement by-value object safety

This PR implements **by-value object safety**, which is part of unsized rvalues #48055. That means, with `#![feature(unsized_locals)]`, you can call a method `fn foo(self, ...)` on trait objects. One aim of this is to enable `Box<FnOnce>`  in the near future.

The difficulty here is this: when constructing a vtable for a trait `Foo`, we can't just put the function `<T as Foo>::foo` into the table. If `T` is no larger than `usize`, `self` is usually passed directly. However, as the caller of the vtable doesn't know the concrete `Self` type, we want a variant of `<T as Foo>::foo` where `self` is always passed by reference.

Therefore, when the compiler encounters such a method to be generated as a vtable entry, it produces a newly introduced instance called `InstanceDef::VtableShim(def_id)` (that wraps the original instance). the shim just derefs the receiver and calls the original method. We give different symbol names for the shims by appending `::{{vtable-shim}}` to the symbol path (and also adding vtable-shimness as an ingredient to the symbol hash).

r? @eddyb

5 years agointroducing lint reason annotations (RFC 2383)
Zack M. Davis [Sun, 30 Sep 2018 00:25:26 +0000 (17:25 -0700)]
introducing lint reason annotations (RFC 2383)

This is just for the `reason =` name-value meta-item; the
`#[expect(lint)]` attribute also described in the RFC is a problem for
another day.

The place where we were directly calling `emit()` on a match block
(whose arms returned a mutable reference to a diagnostic-builder) was
admittedly cute, but no longer plausibly natural after adding the
if-let to the end of the `LintSource::Node` arm.

This regards #54503.

5 years agoAuto merge of #55385 - davidtwco:issue-55288, r=oli-obk
bors [Sat, 27 Oct 2018 16:50:41 +0000 (16:50 +0000)]
Auto merge of #55385 - davidtwco:issue-55288, r=oli-obk

NLL: cast causes failure to promote to static

Fixes #55288. See commit messages for more details.

r? @oli-obk
cc @nikomatsakis
cc @pnkfelix
cc @RalfJung

5 years agoFix sub-variant doc display
Guillaume Gomez [Thu, 18 Oct 2018 23:34:46 +0000 (01:34 +0200)]
Fix sub-variant doc display

5 years agoFix an ICE in the min_const_fn analysis
Oliver Scherer [Sat, 27 Oct 2018 11:34:35 +0000 (13:34 +0200)]
Fix an ICE in the min_const_fn analysis

5 years agoRefactor and add `PlaceContext::AscribeUserTy`.
David Wood [Fri, 26 Oct 2018 11:22:45 +0000 (13:22 +0200)]
Refactor and add `PlaceContext::AscribeUserTy`.

This commit refactors `PlaceContext` to split it into four different
smaller enums based on if the context represents a mutating use,
non-mutating use, maybe-mutating use or a non-use (this is based on the
recommendation from @oli-obk on Zulip[1]).

This commit then introduces a `PlaceContext::AscribeUserTy` variant.
`StatementKind::AscribeUserTy` is now correctly mapped to
`PlaceContext::AscribeUserTy` instead of `PlaceContext::Validate`.
`PlaceContext::AscribeUserTy` can also now be correctly categorized as a
non-use which fixes an issue with constant promotion in statics after a
cast introduces a `AscribeUserTy` statement.

[1]: https://rust-lang.zulipchat.com/#narrow/stream/122657-wg-nll/subject/.2355288.20cast.20fails.20to.20promote.20to.20'static/near/136536949

5 years agoTest for cast causing static promotion failure.
David Wood [Fri, 26 Oct 2018 11:21:29 +0000 (13:21 +0200)]
Test for cast causing static promotion failure.

This commit adds a test that ensures that a cast in a static doesn't
stop const promotion within the static.

5 years agoAdd helpful logging statements.
David Wood [Fri, 26 Oct 2018 10:11:19 +0000 (12:11 +0200)]
Add helpful logging statements.

This commit adds logging statements to `promote_consts` and
`qualify_consts` to make it easier to understand what it is doing.

5 years agoAuto merge of #55150 - pnkfelix:issues-47215-54797-fix-ice-from-moving-out-of-thread...
bors [Sat, 27 Oct 2018 09:56:37 +0000 (09:56 +0000)]
Auto merge of #55150 - pnkfelix:issues-47215-54797-fix-ice-from-moving-out-of-thread-local-under-ast-borrowck, r=nikomatsakis

Do not allow moving out of thread local under ast borrowck

AST borrowck failed to prevent moving out of a thread-local static.

This was broken. And it also (sometimes?) caused an ICE during drop elaboration.

Fix #47215
Fix #54797

5 years agoAdd more tests on unsized locals autoderef and borrowck.
Masaki Hara [Sat, 27 Oct 2018 08:17:24 +0000 (17:17 +0900)]
Add more tests on unsized locals autoderef and borrowck.

5 years agoAuto merge of #55053 - Emerentius:test_all_again, r=alexcrichton
bors [Sat, 27 Oct 2018 07:12:11 +0000 (07:12 +0000)]
Auto merge of #55053 - Emerentius:test_all_again, r=alexcrichton

Add option to run all tests, again

This is a repeat of https://github.com/rust-lang/rust/pull/53527, which had to be reverted to land https://github.com/rust-lang/rust/pull/54116. It will break clippy until `compiletest-rs` can be updated and I believe we're closing on a new release date, so this may need to be delayed again until after 1.30 is out (?)

Closes #50363 again

5 years agoUpdate string.rs
Hsiang-Cheng Yang [Sat, 27 Oct 2018 06:33:07 +0000 (14:33 +0800)]
Update string.rs

remove unused variable i in example String::with_capacity()

5 years agoAuto merge of #55274 - pnkfelix:issue-54570-proj-path-into-pats-with-type-take-2...
bors [Sat, 27 Oct 2018 00:39:11 +0000 (00:39 +0000)]
Auto merge of #55274 - pnkfelix:issue-54570-proj-path-into-pats-with-type-take-2, r=nikomatsakis

Handle bindings in substructure of patterns with type ascriptions

This attempts to follow the outline described by @nikomatsakis [here](https://github.com/rust-lang/rust/issues/47184#issuecomment-420041056). Its a bit more complicated than expected for two reasons:

 1. In general it handles sets of type ascriptions, because such ascriptions can be nested within patterns
 2.  It has a separate types in the HAIR, `PatternTypeProjections` and `PatternTypeProjection`, which are analogues to the corresponding types in the MIR.

The main reason I added the new HAIR types was because I am worried that the current implementation is inefficent, and asymptotically so: It makes copies of vectors as it descends the patterns, even when those accumulated vectors are never used.

Longer term, I would like to used a linked tree structure for the `PatternTypeProjections` and `PatternTypeProjection`, and save the construction of standalone vectors for the MIR types. I didn't want to block landing this on that hypoethetical revision; but I figured I could at least make the future change easier by differentiating between the two types now.

Oh, one more thing: This doesn't attempt to handle `ref x` (in terms of ensuring that any necessary types are ascribed to `x` in that scenario as well). We should open an issue to investigate supporting that as well. But I didn't want to block this PR on that future work.

Fix #54570

5 years agoadd user_ty.projs support to `AscribeUserType`.
Felix S. Klock II [Fri, 26 Oct 2018 12:00:07 +0000 (14:00 +0200)]
add user_ty.projs support to `AscribeUserType`.

5 years agoFurther foundational stuff on `ProjectionKind` before I add it to `AscribeUserType`.
Felix S. Klock II [Fri, 26 Oct 2018 11:32:45 +0000 (13:32 +0200)]
Further foundational stuff on `ProjectionKind` before I add it to `AscribeUserType`.

5 years agoAdd intern table for `List<ProjectionElem<'tcx, (), ()>>`.
Felix S. Klock II [Fri, 26 Oct 2018 09:28:40 +0000 (11:28 +0200)]
Add intern table for `List<ProjectionElem<'tcx, (), ()>>`.

Also added alias `ProjectionKind<'tcx>` for `ProjectionElem<'tcx, (), ()>`.

5 years agoAdd test for normalization during field-lookup on patterns with ascribed types.
Felix S. Klock II [Thu, 25 Oct 2018 13:45:41 +0000 (15:45 +0200)]
Add test for normalization during field-lookup on patterns with ascribed types.

As a drive-by, also added test analogous to existing
static_to_a_to_static_through_tuple, but now apply to a struct instead
of a tuple.

5 years agoregression test for ICE I encountered in my patch.
Felix S. Klock II [Tue, 23 Oct 2018 21:37:12 +0000 (23:37 +0200)]
regression test for ICE I encountered in my patch.

5 years agoUpdate mir-opt tests to reflect change to `AscribeUserType` to carry a `UserTypeProje...
Felix S. Klock II [Mon, 22 Oct 2018 22:59:39 +0000 (00:59 +0200)]
Update mir-opt tests to reflect change to `AscribeUserType` to carry a `UserTypeProjection`.

5 years agoAdd the actual chain of projections to `UserTypeProjection`.
Felix S. Klock II [Mon, 22 Oct 2018 20:50:10 +0000 (22:50 +0200)]
Add the actual chain of projections to `UserTypeProjection`.

Update the existing NLL `patterns.rs` test accordingly.

includes changes addressing review feedback:

 * Added example to docs for `UserTypeProjections` illustrating how we
   build up multiple projections when descending into a pattern with
   type ascriptions.

 * Adapted niko's suggested docs for `UserTypeProjection`.

 * Factored out `projection_ty` from more general `projection_ty_core`
   (as a drive-by, made its callback an `FnMut`, as I discovered later
   that I need that).

 * Add note to docs that `PlaceTy.field_ty(..)` does not normalize its result.

 * Normalize as we project out `field_ty`.

5 years agoCheckpoint: Added abstraction over collection of projections into user type.
Felix S. Klock II [Mon, 22 Oct 2018 12:23:44 +0000 (14:23 +0200)]
Checkpoint: Added abstraction over collection of projections into user type.

I did not think I would need this in the MIR, but in general local
decls are going to need to support this. (That, or we need to be able
define a least-upper-bound for a collection of types encountered via
the pattern compilation.)

5 years agoAuto merge of #54929 - csmoe:cfg_lint, r=petrochenkov
bors [Fri, 26 Oct 2018 21:46:13 +0000 (21:46 +0000)]
Auto merge of #54929 - csmoe:cfg_lint, r=petrochenkov

Suggest to remove prefix `b` in cfg attribute lint string

Closes #54926
r? @estebank

5 years agoAdded `mir::UserTypeProjection`, a stub for a structure that projects *into* a given...
Felix S. Klock II [Mon, 22 Oct 2018 09:58:06 +0000 (11:58 +0200)]
Added `mir::UserTypeProjection`, a stub for a structure that projects *into* a given UserTypeAnnotation.

(That is, it will pull out some component type held or referenced by
the type annotation.)

Note: this still needs to actually do projection itself. That comes in
a later commit

5 years agoRefactoring: added `PatternTypeAnnotation` wrapper around `UserTypeAnnotation` to...
Felix S. Klock II [Sun, 21 Oct 2018 19:52:38 +0000 (21:52 +0200)]
Refactoring: added `PatternTypeAnnotation` wrapper around `UserTypeAnnotation` to ease future changes.

5 years agorestrict scope of methods that are only called within mod tree of parent.
Felix S. Klock II [Fri, 19 Oct 2018 14:36:16 +0000 (16:36 +0200)]
restrict scope of methods that are only called within mod tree of parent.

5 years agoRemove `PlaceContext` from API of `mir::Visitor::visit_projection_elem`.
Felix S. Klock II [Wed, 17 Oct 2018 13:27:07 +0000 (15:27 +0200)]
Remove `PlaceContext` from API of `mir::Visitor::visit_projection_elem`.

It is unused, and would not make sense to maintain in the commits later in this PR.

5 years agoAuto merge of #55382 - kennytm:rollup, r=kennytm
bors [Fri, 26 Oct 2018 17:26:56 +0000 (17:26 +0000)]
Auto merge of #55382 - kennytm:rollup, r=kennytm

Rollup of 21 pull requests

Successful merges:

 - #54816 (Don't try to promote already promoted out temporaries)
 - #54824 (Cleanup rustdoc tests with `@!has` and `@!matches`)
 - #54921 (Add line numbers option to rustdoc)
 - #55167 (Add a "cheap" mode for `compute_missing_ctors`.)
 - #55258 (Fix Rustdoc ICE when checking blanket impls)
 - #55264 (Compile the libstd we distribute with -Ccodegen-unit=1)
 - #55271 (Unimplement ExactSizeIterator for MIR traversing iterators)
 - #55292 (Macro diagnostics tweaks)
 - #55298 (Point at macro definition when no rules expect token)
 - #55301 (List allowed tokens after macro fragments)
 - #55302 (Extend the impl_stable_hash_for! macro for miri.)
 - #55325 (Fix link to macros chapter)
 - #55343 (rustbuild: fix remap-debuginfo when building a release)
 - #55346 (Shrink `Statement`.)
 - #55358 (Remove redundant clone (2))
 - #55370 (Update mailmap for estebank)
 - #55375 (Typo fixes in configure_cmake comments)
 - #55378 (rustbuild: use configured linker to build boostrap)
 - #55379 (validity: assert that unions are non-empty)
 - #55383 (Use `SmallVec` for the queue in `coerce_unsized`.)
 - #55391 (bootstrap: clean up a few clippy findings)

5 years agoUpdate tests
Oliver Scherer [Fri, 19 Oct 2018 12:24:29 +0000 (14:24 +0200)]
Update tests

5 years agoImpl items have generics
Oliver Scherer [Fri, 19 Oct 2018 10:46:16 +0000 (12:46 +0200)]
Impl items have generics

5 years agoRollup merge of #55391 - matthiaskrgr:bootstrap_cleanup, r=oli-obk
kennytm [Fri, 26 Oct 2018 15:10:38 +0000 (23:10 +0800)]
Rollup merge of #55391 - matthiaskrgr:bootstrap_cleanup, r=oli-obk

bootstrap: clean up a few clippy findings

remove useless format!()s
remove redundant field names in a few struct initializations
pass slice instead of a vector to a function
use is_empty() instead of comparisons to .len()

No functional change intended.

5 years agoRollup merge of #55383 - nnethercote:coerce_unsized-SmallVec, r=davidtwco
kennytm [Fri, 26 Oct 2018 15:10:06 +0000 (23:10 +0800)]
Rollup merge of #55383 - nnethercote:coerce_unsized-SmallVec, r=davidtwco

Use `SmallVec` for the queue in `coerce_unsized`.

This reduces the number of allocations done for the `tuple-stress`
benchmark by 4%.

5 years agoRollup merge of #55264 - michaelwoerister:single-cgu-std, r=simulacrum
kennytm [Fri, 26 Oct 2018 15:09:31 +0000 (23:09 +0800)]
Rollup merge of #55264 - michaelwoerister:single-cgu-std, r=simulacrum

Compile the libstd we distribute with -Ccodegen-unit=1

This PR
 - adds the `single-codegen-unit-std` option to `config.toml` which allows for setting the CGU count for `libstd` and `libtest` independently of the one for the rest of the compiler, and
 - sets the new option to `true` for all dist jobs in CI.

Fixes #54872.

5 years agoRollup merge of #55379 - RalfJung:no-empty-union, r=oli-obk
kennytm [Fri, 26 Oct 2018 12:48:08 +0000 (20:48 +0800)]
Rollup merge of #55379 - RalfJung:no-empty-union, r=oli-obk

validity: assert that unions are non-empty

5 years agoRollup merge of #55378 - Keruspe:bootstrap-linker, r=petrochenkov
kennytm [Fri, 26 Oct 2018 10:25:17 +0000 (18:25 +0800)]
Rollup merge of #55378 - Keruspe:bootstrap-linker, r=petrochenkov

rustbuild: use configured linker to build boostrap

Currently, bootstrap uses it to compile everything, but x.py wasn't using it yet to build bootstrap itself.
This fixes the build for systems where the linker isn't called `cc`.

5 years agoRollup merge of #55375 - upstreaming:configure_cmake-comment-typo-fixes, r=alexcrichton
kennytm [Fri, 26 Oct 2018 10:25:16 +0000 (18:25 +0800)]
Rollup merge of #55375 - upstreaming:configure_cmake-comment-typo-fixes, r=alexcrichton

Typo fixes in configure_cmake comments

Signed-off-by: Eddy Petrișor <eddy.petrisor@gmail.com>
5 years agoRollup merge of #55370 - estebank:mailmap, r=alexcrichton
kennytm [Fri, 26 Oct 2018 10:25:15 +0000 (18:25 +0800)]
Rollup merge of #55370 - estebank:mailmap, r=alexcrichton

Update mailmap for estebank

5 years agoRollup merge of #55358 - sinkuu:redundant_clone2, r=estebank
kennytm [Fri, 26 Oct 2018 10:25:12 +0000 (18:25 +0800)]
Rollup merge of #55358 - sinkuu:redundant_clone2, r=estebank

Remove redundant clone (2)

5 years agoRollup merge of #55346 - nnethercote:shrink-StatementKind, r=nagisa
kennytm [Fri, 26 Oct 2018 10:25:11 +0000 (18:25 +0800)]
Rollup merge of #55346 - nnethercote:shrink-StatementKind, r=nagisa

Shrink `Statement`.

This commit reduces the size of `Statement` from 80 bytes to 56 bytes on
64-bit platforms, by boxing the `AscribeUserType` variant of
`StatementKind`.

This change reduces instruction counts on most benchmarks by 1--3%.

5 years agoRollup merge of #55343 - Keruspe:remap-debuginfo-release, r=alexcrichton
kennytm [Fri, 26 Oct 2018 10:25:10 +0000 (18:25 +0800)]
Rollup merge of #55343 - Keruspe:remap-debuginfo-release, r=alexcrichton

rustbuild: fix remap-debuginfo when building a release

Fallback to the release number as we can't get the git commit sha as we're not in a git repository.

Fixes #55341

5 years agoRollup merge of #55325 - rust-lang:steveklabnik-patch-1, r=frewsxcv
kennytm [Fri, 26 Oct 2018 10:25:08 +0000 (18:25 +0800)]
Rollup merge of #55325 - rust-lang:steveklabnik-patch-1, r=frewsxcv

Fix link to macros chapter

We're gonna link to nightly as this didn't make it into the corresponding stable.

r? @Mark-Simulacrum @Centril

5 years agoRollup merge of #55302 - goffrie:impl-stable-hash, r=varkor
kennytm [Fri, 26 Oct 2018 10:25:07 +0000 (18:25 +0800)]
Rollup merge of #55302 - goffrie:impl-stable-hash, r=varkor

Extend the impl_stable_hash_for! macro for miri.

Fixes #54075.

5 years agoRollup merge of #55301 - estebank:macro-allowed, r=petrochenkov
kennytm [Fri, 26 Oct 2018 10:25:06 +0000 (18:25 +0800)]
Rollup merge of #55301 - estebank:macro-allowed, r=petrochenkov

List allowed tokens after macro fragments

Fix #34069.

5 years agoRollup merge of #55298 - estebank:macro-def, r=pnkfelix
kennytm [Fri, 26 Oct 2018 10:25:05 +0000 (18:25 +0800)]
Rollup merge of #55298 - estebank:macro-def, r=pnkfelix

Point at macro definition when no rules expect token

Fix #35150.

5 years agoRollup merge of #55292 - estebank:macro-eof, r=pnkfelix
kennytm [Fri, 26 Oct 2018 10:25:03 +0000 (18:25 +0800)]
Rollup merge of #55292 - estebank:macro-eof, r=pnkfelix

Macro diagnostics tweaks

Fix #30128, fix #10951 by adding an appropriate span to the diagnostic.
Fix #26288 by suggesting adding semicolon to macro call.

5 years agoRollup merge of #55271 - sinkuu:traversal_iter, r=matthewjasper
kennytm [Fri, 26 Oct 2018 10:25:02 +0000 (18:25 +0800)]
Rollup merge of #55271 - sinkuu:traversal_iter, r=matthewjasper

Unimplement ExactSizeIterator for MIR traversing iterators

If `root` is not `START_BLOCK`, `basic_blocks().len() - visited` does not represent their exact size.

5 years agoRemove unnecessary mut in iterator.find_map documentation example, Relates to #49098
Méven Car [Tue, 23 Oct 2018 17:59:18 +0000 (19:59 +0200)]
Remove unnecessary mut in iterator.find_map documentation example, Relates to #49098

5 years agoAuto merge of #54626 - alexcrichton:dwarf-generics, r=michaelwoerister
bors [Fri, 26 Oct 2018 14:30:26 +0000 (14:30 +0000)]
Auto merge of #54626 - alexcrichton:dwarf-generics, r=michaelwoerister

rustc: Tweak filenames encoded into metadata

This commit is a fix for #54408 where on nightly right now whenever
generics are inlined the path name listed for the inlined function's
debuginfo is a relative path to the cwd, which surely doesn't exist!
Previously on beta/stable the debuginfo mentioned an absolute path which
still didn't exist, but more predictably didn't exist.

The change between stable/nightly is that nightly is now compiled with
`--remap-path-prefix` to give a deterministic prefix to all
rustc-generated paths in debuginfo. By using `--remap-path-prefix` the
previous logic would recognize that the cwd was remapped, causing the
original relative path name of the standard library to get emitted. If
`--remap-path-prefix` *wasn't* passed in then the logic would create an
absolute path name and then create a new source file entry.

The fix in this commit is to apply the "recreate the source file entry
with an absolute path" logic a bit more aggresively. If the source
file's name was remapped then we don't touch it, but otherwise we always
take the working dir (which may have been remapped) and then join it to
the file to ensure that we process all relative file names as well.

The end result is that the standard library should have an absolute path
for all file names in debuginfo (using our `--remap-path-prefix`
argument) as it does on stable after this patch.

Closes #54408

5 years agobootstrap: clean up a few clippy findings
Matthias Krüger [Fri, 26 Oct 2018 14:23:02 +0000 (16:23 +0200)]
bootstrap: clean up a few clippy findings

remove useless format!()s
remove redundant field names in a few struct initializations
pass slice instead of a vector to a function
use is_empty() instead of comparisons to .len()

No functional change intended.