Commit graph

86027 commits

Author SHA1 Message Date
Pietro Albini
12556a4b8f
Rollup merge of #55926 - cynecx:fix-rustdoc-mobile-css, r=GuillaumeGomez
Change sidebar selector to fix compatibility with docs.rs

Fix for #55883.
2018-11-15 11:04:43 +01:00
Pietro Albini
66fcb3ceb2
Rollup merge of #55901 - euclio:speling, r=petrochenkov
fix various typos in doc comments
2018-11-15 11:04:42 +01:00
Pietro Albini
fb4553299c
Rollup merge of #55865 - RalfJung:unix-rwlock, r=alexcrichton
Unix RwLock: avoid racy access to write_locked

We should only access `write_locked` if we really got the lock.
2018-11-15 11:04:41 +01:00
Pietro Albini
3c7acc7878
Rollup merge of #55852 - varkor:dotdotequals-lint, r=zackmdavis
Rewrite `...` as `..=` as a `MachineApplicable` 2018 idiom lint

Fixes https://github.com/rust-lang/rust/issues/51043.
2018-11-15 11:04:40 +01:00
Pietro Albini
202724cddc
Rollup merge of #55785 - stjepang:unsized-drop-forget, r=alexcrichton
Add mem::forget_unsized() for forgetting unsized values

~~Allows passing values of `T: ?Sized` types to `mem::drop` and `mem::forget`.~~

Adds `mem::forget_unsized()` that accepts `T: ?Sized`.

I had to revert the PR that removed the `forget` intrinsic and replaced it with `ManuallyDrop`: https://github.com/rust-lang/rust/pull/40559
We can't use `ManuallyDrop::new()` here because it needs `T: Sized` and we don't have support for unsized return values yet (will we ever?).

r? @eddyb
2018-11-15 11:04:38 +01:00
Pietro Albini
6ca7bc0eb8
Rollup merge of #55781 - pnkfelix:issue-54382-more-precise-spans-for-temps-and-their-drops, r=davidtwco
More precise spans for temps and their drops

This PR has two main enhancements:

 1. when possible during code generation for a statement (like `expr();`), pass along the span of a statement, and then attribute the drops of temporaries from that statement to the statement's end-point (which will be the semicolon if it is a statement that is terminating by a semicolon).
 2. when evaluating a block expression into a MIR temp, use the span of the block's tail expression (rather than the span of whole block including its statements and curly-braces) for the span of the temp.

Each of these individually increases the precision of our diagnostic output; together they combine to make a much clearer picture about the control flow through the spans.

Fix #54382
2018-11-15 11:04:37 +01:00
Pietro Albini
97d0d8964e
Rollup merge of #55778 - nnethercote:LrcPreds, r=eddyb
Wrap some query results in `Lrc`.

So that the frequent clones in `try_get` are cheaper.
2018-11-15 11:04:36 +01:00
Pietro Albini
1d5829d87f
Rollup merge of #55750 - oli-obk:node_id_x, r=michaelwoerister
Make `NodeId` and `HirLocalId` `newtype_index`
2018-11-15 11:04:35 +01:00
Pietro Albini
756870a2ff
Rollup merge of #55622 - jakllsch:netbsd-librt, r=alexcrichton
NetBSD: link libstd with librt in addition to libpthread

Some aio(3) and mq(3) functions in the libc crate actually come from NetBSD librt, not libc or libpthread.
2018-11-15 11:04:34 +01:00
Pietro Albini
9c5b8aad1d
Rollup merge of #55556 - nnethercote:MmapMeta, r=eddyb
Use `Mmap` to open the rmeta file.

Because those files are quite large, contribute significantly to peak
memory usage, but only a small fraction of the data is ever read.

r? @eddyb
2018-11-15 11:04:32 +01:00
Pietro Albini
3b40434940
Rollup merge of #55530 - ljedrz:speed_up_String_from_utf16, r=SimonSapin
Speed up String::from_utf16

Collecting into a `Result` is idiomatic, but not necessarily fast due to rustc not being able to preallocate for the resulting collection. This is fine in case of an error, but IMO we should optimize for the common case, i.e. a successful conversion.

This changes the behavior of `String::from_utf16` from collecting into a `Result` to pushing to a preallocated `String` in a loop.

According to [my simple benchmark](https://gist.github.com/ljedrz/953a3fb74058806519bd4d640d6f65ae) this change makes `String::from_utf16` around **twice** as fast.
2018-11-15 11:04:31 +01:00
Pietro Albini
d7c833b7ef
Rollup merge of #55507 - fhartwig:size_of_intrinsic_docs, r=frewsxcv
Add link to std::mem::size_of to size_of intrinsic documentation

The other intrinsics with safe/stable alternatives already have documentation to this effect.
2018-11-15 11:04:30 +01:00
Pietro Albini
b20bba4f37
Rollup merge of #55211 - fintelia:bufwriter-buffer, r=shepmaster
Add BufWriter::buffer method

CC #45323
2018-11-15 11:04:28 +01:00
Pietro Albini
f4ecc1f521
Rollup merge of #55182 - jD91mZM2:rebased, r=alexcrichton
Redox: Update to new changes

These are all cherry-picked from our fork:

 - Remove the `env:` scheme
 - Update `execve` system call to `fexec`
 - Interpret shebangs: these are no longer handled by the kernel, which like usual tries to be as minimal as possible
2018-11-15 11:04:27 +01:00
bors
4ec0ba9545 Auto merge of #55716 - RalfJung:escape-to-raw, r=oli-obk
Add escape-to-raw MIR statement

Add a new MIR "ghost state statement": Escaping a ptr to permit raw accesses.

~~This includes #55549, [click here](https://github.com/RalfJung/rust/compare/miri-visitor...RalfJung:escape-to-raw) for just the new commits.~~
2018-11-15 01:12:01 +00:00
bors
7d3b9b1640 Auto merge of #55939 - alexcrichton:path-regression-again, r=sfackler
std: Synchronize access to global env during `exec`

This commit, after reverting #55359, applies a different fix for #46775
while also fixing #55775. The basic idea was to go back to pre-#55359
libstd, and then fix #46775 in a way that doesn't expose #55775.

The issue described in #46775 boils down to two problems:

* First, the global environment is reset during `exec` but, but if the
  `exec` call fails then the global environment was a dangling pointer
  into free'd memory as the block of memory was deallocated when
  `Command` is dropped. This is fixed in this commit by installing a
  `Drop` stack object which ensures that the `environ` pointer is
  preserved on a failing `exec`.

* Second, the global environment was accessed in an unsynchronized
  fashion during `exec`. This was fixed by ensuring that the
  Rust-specific environment lock is acquired for these system-level
  operations.

Thanks to Alex Gaynor for pioneering the solution here!

Closes #55775
2018-11-14 22:15:35 +00:00
Alex Crichton
4032b7a429 std: Synchronize access to global env during exec
This commit, after reverting #55359, applies a different fix for #46775
while also fixing #55775. The basic idea was to go back to pre-#55359
libstd, and then fix #46775 in a way that doesn't expose #55775.

The issue described in #46775 boils down to two problems:

* First, the global environment is reset during `exec` but, but if the
  `exec` call fails then the global environment was a dangling pointer
  into free'd memory as the block of memory was deallocated when
  `Command` is dropped. This is fixed in this commit by installing a
  `Drop` stack object which ensures that the `environ` pointer is
  preserved on a failing `exec`.

* Second, the global environment was accessed in an unsynchronized
  fashion during `exec`. This was fixed by ensuring that the
  Rust-specific environment lock is acquired for these system-level
  operations.

Thanks to Alex Gaynor for pioneering the solution here!

Closes #55775

Co-authored-by: Alex Gaynor <alex.gaynor@gmail.com>
2018-11-14 12:46:57 -08:00
bors
6f93e93af6 Auto merge of #55947 - michaelwoerister:xlto-fix-lld-opt, r=Mark-Simulacrum
xLTO: Don't pass --plugin-opt=thin to LLD. That's not supported anymore.

It seems that `-plugin-opt=thin` is not needed anymore when invoking LLD for ThinLTO. Unfortunately, still passing the option makes LLD crash instead of giving a deprecation warning or something.
2018-11-14 19:25:54 +00:00
Alex Crichton
5856797bda Revert "Fixes #46775 -- don't mutate the process's environment in Command::exec"
This reverts commit 36fe3b605a.
2018-11-14 07:21:01 -08:00
Michael Woerister
4cfc97924f xLTO: Don't pass --plugin-opt=thin to LLD. That's not supported anymore. 2018-11-14 14:42:49 +01:00
bors
6f244c9011 Auto merge of #55934 - alexcrichton:appveyor-gce, r=Mark-Simulacrum
Switch AppVeyor builds to the GCE cloud

[Recommended by AppVeyor][1] this isn't done by default for all builds
due to the high startup overhead (3-4 minutes for a VM), but that's
paltry compared to our overall build times so should be more than
applicable!

[1]: https://help.appveyor.com/discussions/questions/29832-did-recent-changes-apply-to-possibly-slow-down-builds#comment_46494058
2018-11-14 11:54:14 +00:00
Nicholas Nethercote
818257e702 Use Mmap to open the rmeta file.
Because those files are quite large, contribute significantly to peak
memory usage, but only a small fraction of the data is ever read.
2018-11-14 05:55:10 +02:00
bors
126a0e2aad Auto merge of #52153 - csmoe:projeq_normal, r=scalexm
chalk lowering rule: ProjectionEq-Normalize

cc #49177
r? @scalexm
2018-11-14 02:46:24 +00:00
Corey Farwell
15e7df8b51
Remove unneeded newline. 2018-11-13 21:34:44 -05:00
Nicholas Nethercote
98dab3335f Wrap some query results in Lrc.
So that the frequent clones in `try_get` are cheaper.

Fixes #54274.
2018-11-14 12:31:27 +11:00
bors
f1d61837d1 Auto merge of #55912 - kennytm:rollup, r=kennytm
Rollup of 20 pull requests

Successful merges:

 - #55136 (Remove short doc where it starts with a codeblock)
 - #55711 (Format BtreeMap::range_mut example)
 - #55722 (impl_stable_hash_for: support enums and tuple structs with generic parameters)
 - #55754 (Avoid converting bytes to UTF-8 strings to print, just pass bytes to stdout/err)
 - #55804 (rustdoc: don't inline `pub use some_crate` unless directly asked to)
 - #55805 (Move `static_assert!` into librustc_data_structures)
 - #55837 (Make PhantomData #[structural_match])
 - #55840 (Fix TLS errors when downloading stage0)
 - #55843 (add FromIterator<A> to Box<[A]>)
 - #55858 (Small fixes on code blocks in rustdoc)
 - #55863 (Fix a typo in std::panic)
 - #55870 (Fix typos.)
 - #55874 (string: Add documentation for `From` impls)
 - #55879 (save-analysis: Don't panic for macro-generated use globs)
 - #55882 (Reference count `crate_inherent_impls`s return value.)
 - #55888 (miri: for uniformity, also move memory_deallocated to AllocationExtra)
 - #55889 (global allocators: add a few comments)
 - #55896 (Document optimizations enabled by FusedIterator)
 - #55905 (Change `Lit::short_name` to `Lit::literal_name`.)
 - #55908 (Fix their/there grammar nit)
2018-11-13 22:17:46 +00:00
Alex Crichton
0d990c7d54 Switch AppVeyor builds to the GCE cloud
[Recommended by AppVeyor][1] this isn't done by default for all builds
due to the high startup overhead (3-4 minutes for a VM), but that's
paltry compared to our overall build times so should be more than
applicable!

[1]: https://help.appveyor.com/discussions/questions/29832-did-recent-changes-apply-to-possibly-slow-down-builds#comment_46494058
2018-11-13 13:38:04 -08:00
Andy Russell
4e35cbb22e
fix various typos in doc comments 2018-11-13 14:45:31 -05:00
csmoe
e853d6c5b6 Implement ProjectionEq-Normalize 2018-11-13 20:33:21 +01:00
bors
9fefb67669 Auto merge of #55356 - Aaron1011:fix/rustdoc-negative-auto, r=nikomatsakis
Check for negative impls when finding auto traits

Fixes #55321

When AutoTraitFinder begins examining a type, it checks for an explicit
negative impl. However, it wasn't checking for negative impls found when
calling 'select' on predicates found from nested obligations.

This commit makes AutoTraitFinder check for negative impls whenever it
makes a call to 'select'. If a negative impl is found, it immediately
bails out.

Normal users of SelectioContext don't need to worry about this, since
they stop as soon as an Unimplemented error is encountered. However, we
add predicates to our ParamEnv when we encounter this error, so we need
to handle negative impls specially (so that we don't try adding them to
our ParamEnv).
2018-11-13 19:16:18 +00:00
cynecx
2f7b95d932 Change sidebar selector to fix compatibility with docs.rs 2018-11-13 17:23:30 +01:00
bors
5c9f7dcd83 Auto merge of #55649 - scalexm:chalk-bound-ty, r=nikomatsakis
Use bound types in `librustc_traits`

r? @nikomatsakis
see the tests which now move the higher-ranked binders to the left in implied bound rules!
2018-11-13 12:22:30 +00:00
scalexm
8d0b9697b5 Fix ui tests 2018-11-13 12:28:43 +01:00
scalexm
afa884c03a Instantiate all bound vars existentially 2018-11-13 12:28:43 +01:00
scalexm
79b6c41bc2 Use a dummy outlives requirement for where Type:, (see #53696)
A `WF(Type)` predicate was used previously, which did not play
well with implied bounds in chalk.
2018-11-13 12:28:43 +01:00
scalexm
156a932eef Reorder code in rustc::traits::structural_impls 2018-11-13 12:28:43 +01:00
scalexm
239df7be37 Bypass ppaux for Outlives predicates 2018-11-13 12:28:43 +01:00
scalexm
3510805f7e Provide program clauses for builtin types 2018-11-13 12:28:43 +01:00
scalexm
79ba84fa79 Adjust documentation 2018-11-13 12:28:43 +01:00
scalexm
eacebf24b0 Pretty print quantified goals and clauses 2018-11-13 12:28:43 +01:00
scalexm
64aac8d4c1 Replace type params with bound vars in rustc_traits::lowering 2018-11-13 12:28:43 +01:00
kennytm
7921572acf
Rollup merge of #55722 - RalfJung:impl-stable-hash, r=varkor
impl_stable_hash_for: support enums and tuple structs with generic parameters

Port a bunch of implementations over to the macro, now that that is possible.
2018-11-13 19:22:53 +08:00
kennytm
2173681647
Rollup merge of #55136 - GuillaumeGomez:short-doc, r=QuietMisdreavus
Remove short doc where it starts with a codeblock

Fixes #54975.
2018-11-13 19:21:09 +08:00
kennytm
8a13ae5fce
Rollup merge of #55908 - KWierso:patch-1, r=wesleywiser
Fix their/there grammar nit
2018-11-13 19:21:06 +08:00
kennytm
64ea02a9dd
Rollup merge of #55905 - nnethercote:short_name-to-literal_name, r=Mark-Simulacrum
Change `Lit::short_name` to `Lit::literal_name`.

This avoids a moderately hot allocation in `parse_lit_token`.

r? @Mark-Simulacrum
2018-11-13 19:21:01 +08:00
kennytm
4d764407e9
Rollup merge of #55896 - rust-lang:opt-fuse, r=shepmaster
Document optimizations enabled by FusedIterator

When reading this I wondered what “some significant optimizations” referred to. As far as I can tell from reading code, the specialization of `.fuse()` is the only case where `FusedIterator` has any impact at all. Is this accurate @Stebalien?
2018-11-13 19:20:58 +08:00
kennytm
99986a5a05
Rollup merge of #55889 - RalfJung:global-alloc, r=alexcrichton
global allocators: add a few comments

These comments answer some questions that came up when I tried to understand how the control flow works for the global allocator, `Global` and `System`.

r? @alexcrichton
2018-11-13 19:20:57 +08:00
kennytm
c246a29813
Rollup merge of #55888 - RalfJung:alloc-extra, r=oli-obk
miri: for uniformity, also move memory_deallocated to AllocationExtra

r? @oli-obk
2018-11-13 19:20:55 +08:00
kennytm
675c95c7b8
Rollup merge of #55882 - hugwijst:rc_return_crate_inherent_impls, r=Mark-Simulacrum
Reference count `crate_inherent_impls`s return value.

The repeated cloning of the result in `inherent_impls` queries has quite
an impact on crates with many inherent trait implementations.

For instance on https://github.com/jmesmon/stm32f429, `cargo check` went from 75 seconds to 38 seconds on my machine.
2018-11-13 19:20:53 +08:00
kennytm
a2774354ee
Rollup merge of #55879 - Xanewok:dont-panic-with-globs, r=nrc
save-analysis: Don't panic for macro-generated use globs

Follow-up to c2bb7cadf2 - as before, ignore the use globs in macro expansions.

Fixes https://github.com/rust-lang-nursery/rls/issues/1117.
Closes #55480.

r? @nrc
2018-11-13 19:20:51 +08:00