Commit Graph

58694 Commits

Author SHA1 Message Date
Steve Smith
5a76fe4225 Remove thread-per-CPU bit as it may not be accurate. 2016-11-14 16:43:25 +00:00
Steve Smith
b9e17fa58a Typo in new section 2016-11-14 14:21:35 +00:00
Steve Smith
67df9b9ac6 Add sections about concurrency and stdout/err capture to the Testing chapter of the book. 2016-11-14 13:52:43 +00:00
bors
7bef60a648 Auto merge of #37754 - frewsxcv:path-push, r=GuillaumeGomez
Minor rewriting of `std::path::Path::push` doc example.

None
2016-11-13 23:31:54 -08:00
bors
435246bb49 Auto merge of #37640 - michaelwoerister:llvm-type-names, r=brson
trans: Make type names in LLVM IR independent of crate-nums and source locations.

UPDATE:
This PR makes the type names we assign in LLVM IR independent of the type definition's location in the source code and the order in which extern crates are loaded. The new type names look like the old ones, except for closures and the `<crate-num>.` prefix being gone. Resolution of name clashes (e.g. of the same type in different crate versions) is left to LLVM (which will just append `.<counter>` to the name).

ORIGINAL TEXT:
This PR makes the type names we assign in LLVM IR independent of the type definition's location in the source code. Before, the type of closures contained the closures definition location. The new naming scheme follows the same pattern that we already use for symbol names: We have a human readable prefix followed by a hash that makes sure we don't have any collisions. Here is an example of what the new names look like:

```rust
// prog.rs - example program

mod mod1
{
    pub struct Struct<T>(pub T);
}

fn main() {
    use mod1::Struct;

    let _s = Struct(0u32);
    let _t = Struct('h');
    let _x = Struct(Struct(0i32));
}
```
Old:
```llvm
%"mod1::Struct<u32>" = type { i32 }
%"mod1::Struct<char>" = type { i32 }
%"mod1::Struct<mod1::Struct<i32>>" = type { %"mod1::Struct<i32>" }
%"mod1::Struct<i32>" = type { i32 }
```
New:
```llvm
%"prog::mod1::Struct<u32>::ejDrT" = type { i32 }
%"prog::mod1::Struct<char>::2eEAU" = type { i32 }
%"prog::mod1::Struct<prog::mod1::Struct<i32>>::ehCqR" = type { %"prog::mod1::Struct<i32>::$fAo2" }
%"prog::mod1::Struct<i32>::$fAo2" = type { i32 }
```

As you can see, the new names are slightly more verbose, but also more consistent. There is no difference now between a local type and one from another crate (before, non-local types where prefixed with `<crate-num>.` as in `2.std::mod1::Type1`).

There is a bit of design space here. For example, we could leave off the crate name for local definitions (making names shorter but less consistent):
```llvm
%"mod1::Struct<u32>::ejDrT" = type { i32 }
%"mod1::Struct<char>::2eEAU" = type { i32 }
%"mod1::Struct<mod1::Struct<i32>>::ehCqR" = type { %"mod1::Struct<i32>::$fAo2" }
%"mod1::Struct<i32>::$fAo2" = type { i32 }
```

We could also put the hash in front, which might be more readable:
```llvm
%"ejDrT.mod1::Struct<u32>" = type { i32 }
%"2eEAU.mod1::Struct<char>" = type { i32 }
%"ehCqR.mod1::Struct<mod1::Struct<i32>>" = type { %"$fAo2.mod1::Struct<i32>" }
%"$fAo2.mod1::Struct<i32>" = type { i32 }
```

We could probably also get rid of the hash if we used full DefPaths and crate-nums (though I'm not yet a 100% sure if crate-nums could mess with incremental compilation).

```llvm
%"mod1::Struct<u32>" = type { i32 }
%"mod1::Struct<char>" = type { i32 }
%"mod1::Struct<mod1::Struct<i32>>" = type { %"mod1::Struct<i32>" }
%"mod1::Struct<i32>" = type { i32 }
%"2.std::mod1::Type1" = type { ... }
```
I would prefer the solution with the hashes because it is nice and consistent conceptually, but visually it's admittedly a bit uglier. Maybe @rust-lang/compiler would like to bikeshed a little about this.

On a related note: Has anyone ever tried if the LTO-linker will merge equal types with different names?
(^ @brson, @alexcrichton ^)
If not, that would be a reason to make type names more consistent.
2016-11-13 19:46:34 -08:00
Michael Woerister
276f052a80 Remove unused method CrateContext::rotate(). 2016-11-13 19:49:57 -05:00
Michael Woerister
790a2f9b00 Adapt accidentally fixed test case. 2016-11-13 19:49:57 -05:00
Michael Woerister
fd4ee0021e Fix codegen test after change of llvm type naming scheme 2016-11-13 19:49:56 -05:00
Michael Woerister
5b093ebab2 Make names of types used in LLVM IR stable.
Before this PR, type names could depend on the cratenum being used
for a given crate and also on the source location of closures.
Both are undesirable for incremental compilation where we cache
LLVM IR and don't want it to depend on formatting or in which
order crates are loaded.
2016-11-13 19:49:46 -05:00
bors
87b76a521d Auto merge of #37701 - Mark-Simulacrum:macro-parser-impvement, r=jseyfried
Macro parser performance improvements and refactoring

This PR locally increased performance of https://github.com/rust-lang/rust/issues/37074 by ~6.6 minutes.

Follow up to https://github.com/rust-lang/rust/pull/37569, but doesn't focus explicitly on expansion performance.

History is relatively clean, but I can/will do some more polishing if this is deemed mergeable. Partially posting this now so I can get Travis to run tests for me.

r? @jseyfried
2016-11-13 16:23:57 -08:00
bors
3316ef7f36 Auto merge of #37743 - jedireza:patch-2, r=bluss
Minor grammar fix to ffi.md
2016-11-13 13:09:27 -08:00
Corey Farwell
f53d062d42 Minor rewriting of std::path::Path::push doc example. 2016-11-13 12:58:55 -05:00
bors
876b761010 Auto merge of #37753 - est31:master, r=petrochenkov
Fix empty lifetime list or one with trailing comma being rejected

Fixes #37733
2016-11-13 09:53:30 -08:00
est31
34f33ec789 Fix empty lifetime list or one with trailing comma being rejected
Fixes #37733
2016-11-13 17:55:17 +01:00
bors
ea02f87daa Auto merge of #37735 - Mark-Simulacrum:remove-e-macro, r=bluss
Remove macro work-around

`--stage 2` build succeeded.
2016-11-13 05:22:09 -08:00
bors
b6b98eaa40 Auto merge of #37728 - QuietMisdreavus:rustdoc-enum-struct, r=GuillaumeGomez
rustdoc: fold fields for enum struct variants into a docblock

Per discussion in #37500, this PR updates the enum rendering code to wrap variants with named struct fields in a `docblock` span that is hidden automatically upon load of the page. This gives struct variant fields a clean separation from other enum variants, giving a boost to the readability of such documentation. Preview output is available [on the issue page](https://github.com/rust-lang/rust/issues/37500#issuecomment-260069269), but for the sake of completeness I'll include the images here again.

![rustdoc struct enum variant 4 part 1](https://cloud.githubusercontent.com/assets/5217170/20231925/96160b7e-a82a-11e6-945b-bbba95c5e4bc.PNG)

When you initially load the page, there's a line under variants with struct fields letting you know you can click to expand the listing.

![rustdoc struct enum variant 4 part 2](https://cloud.githubusercontent.com/assets/3050060/20232067/1dc63266-a866-11e6-9555-8fb1c8afdcec.png)

If you click to expand, the header and table unfold into a nicely-indented listing.

If you want to take a look in your own browser and screen size, [I've got this version hosted on my server](https://shiva.icesoldier.me/doctest/doctest/enum.OldTopicRemoval.html).

Fixes #37500

r? @GuillaumeGomez
2016-11-12 22:36:49 -08:00
bors
8c2b0e6347 Auto merge of #37689 - eddyb:bktrc-pls, r=alexcrichton
Set `RUST_BACKTRACE=1` on travis to be more helpful.
2016-11-12 18:53:51 -08:00
Reza Akhavan
48b5192cf7 Minor grammar fix to ffi.md 2016-11-12 18:24:16 -08:00
bors
a277f9deb0 Auto merge of #37675 - arielb1:trans-closure, r=eddyb
Translate closures through the collector

Now that old trans is gone, there is no need for the hack of translating closures when they are instantiated. We can translate them like regular items.

r? @eddyb
2016-11-12 15:29:13 -08:00
Ariel Ben-Yehuda
d394e75ef6 address review comments 2016-11-12 23:20:25 +02:00
bors
fd983d02e1 Auto merge of #37611 - Mark-Simulacrum:tari-nodejs-runner-detect, r=alexcrichton
compile-test: allow overriding nodejs binary location

Add a command-line argument to manually specify which nodejs binary should be used,
which disables the default search.

Original work done by @tari.

Fixes #34188.
2016-11-12 12:02:40 -08:00
QuietMisdreavus
fff921672f rustdoc: fold fields for enum struct variants into a docblock 2016-11-12 13:59:17 -06:00
Mark-Simulacrum
8a06740a10 Remove macro work-around. 2016-11-12 12:47:13 -07:00
Ariel Ben-Yehuda
57950982b2 rustc_trans: translate closures using the collector
Translate closures like normal functions, using the trans::collector
interface.
2016-11-12 20:08:03 +02:00
Ariel Ben-Yehuda
b6828fd1ac rustc_typeck: register item types for closures
This makes them closer to actual items and allows for more
transparent treatment.
2016-11-12 19:57:23 +02:00
Ariel Ben-Yehuda
ca9b5664c3 rustc: move closure upvar types to the closure substs
This moves closures to the (DefId, Substs) scheme like all other items,
and saves a word from the size of TyS now that Substs is 2 words.
2016-11-12 19:00:50 +02:00
bors
026add5f06 Auto merge of #37531 - estebank:fix-ref-mut-mut, r=jonathandturner
Fix invalid "ref mut mut" sugestion

Change output from:

```nocode
error: cannot borrow immutable local variable `x` as mutable
  --> <anon>:12:23
   |
11 |         TestEnum::Item(ref mut x) => {
   |                        --------- use `ref mut mut x` here to make mutable
12 |             test(&mut x);
   |                       ^ cannot borrow mutably
```

to

```nocode
error: cannot borrow immutable local variable `x` as mutable
  --> <anon>:12:23
   |
12 |             test(&mut x);
   |                       ^
   |                       |
   |                       cannot reborrow mutably
   |                       try removing `&mut` here
```
Fixes #37139, #34337, #34126
2016-11-12 08:41:30 -08:00
Mark-Simulacrum
2189f573ca Remove extra level of nesting. 2016-11-12 07:41:47 -07:00
Mark-Simulacrum
38912ee3d4 Move next_eis out of main loop to avoid re-allocating and dropping it. 2016-11-12 07:41:26 -07:00
Mark-Simulacrum
6046595e34 Use SmallVector for eof and bb eis. 2016-11-12 06:45:06 -07:00
Mark-Simulacrum
b8d6686ef3 Factor out inner current Earley item loop.
Change multiple functions to be non-public.
Change nameize to accept an iterator so as to avoid an allocation.
2016-11-12 06:42:40 -07:00
Mark-Simulacrum
27c09864bd Refactor parse_nt. 2016-11-12 06:42:40 -07:00
Mark-Simulacrum
68abb24e8d Factor out NamedParseResult. 2016-11-12 06:42:40 -07:00
Mark-Simulacrum
eef10d0b5b Clean up extraneous &mut. 2016-11-12 06:42:40 -07:00
Mark-Simulacrum
c9e6089d29 Refactor to extending from a drain instead of while looping. 2016-11-12 06:42:40 -07:00
Mark-Simulacrum
7221b07a07 Remove unused argument from nameize.
Also makes nameize non-public since it's only locally used.
2016-11-12 06:42:40 -07:00
Mark-Simulacrum
568874bc10 Cleanup macro_parser::parse, removing a few clones. 2016-11-12 06:42:40 -07:00
bors
acce384c22 Auto merge of #37554 - mikhail-m1:dnlle, r=jonathandturner
Improve "Doesn't live long enough" error

case with temporary variable

issue #36279 part of #35233

r? @jonathandturner
2016-11-12 05:20:56 -08:00
Eduard Burtescu
0268cfaa1f Set RUST_BACKTRACE=1 on travis to be more helpful. 2016-11-12 14:30:28 +02:00
bors
f3af8c8505 Auto merge of #37730 - eddyb:rollup, r=eddyb
Rollup of 30 pull requests

- Successful merges: #37190, #37368, #37481, #37503, #37527, #37535, #37551, #37584, #37600, #37613, #37615, #37659, #37662, #37669, #37682, #37688, #37690, #37692, #37693, #37694, #37695, #37696, #37698, #37699, #37705, #37708, #37709, #37716, #37724, #37727
- Failed merges: #37640, #37689, #37717
2016-11-12 00:39:50 -08:00
Eduard-Mihai Burtescu
5dcf0e87c8 Rollup merge of #37727 - GuillaumeGomez:invalid_src, r=eddyb
Fix invalid src url

Fixes #37684.

Thanks to @eddyb's help.

r? @eddyb
2016-11-12 10:38:45 +02:00
Eduard-Mihai Burtescu
79b8bb8179 Rollup merge of #37724 - brson:bump, r=alexcrichton
Bump verison to 1.15.0

The bootstrap compiler still needs to be updated, but that's waiting on new betas.
2016-11-12 10:38:45 +02:00
Eduard-Mihai Burtescu
31ee2948e5 Rollup merge of #37716 - GuillaumeGomez:mem_urls, r=@frewsxcv
Mem urls

r? @steveklabnik
2016-11-12 10:38:44 +02:00
Eduard-Mihai Burtescu
6e436be917 Rollup merge of #37709 - bluss:cleaner-vec-extend, r=alexcrichton
vec: Write the .extend() specialization in cleaner style

As far as possible, use regular `default fn` specialization in favour of
ad-hoc conditionals.

No intentional functional change. Code quality was validated against the same
benchmarks that were used in initial trusted len development.

This change is prompted by taking impressions from
https://github.com/rust-lang/rust/issues/27749#issuecomment-244498705
2016-11-12 10:38:44 +02:00
Eduard-Mihai Burtescu
69717bbded Rollup merge of #37708 - oli-obk:box_free, r=eddyb
change the `box_free` lang item to accept pointers to unsized types

in miri we use the `box_free` lang item as the destructor for `Box` objects, since the function's api matches that of an `fn drop(&mut self)` in a hypothetical `impl<T: ?Sized> Drop for Box<T>` exactly.

This works fine except if we insert a check in the `size_of` intrinsic to ensure that it is only called with sized types, since the `box_free` lang item calls that intrinsic.

cc @eddyb

no clue who to r? here, probably lang team?
2016-11-12 10:38:44 +02:00
Eduard-Mihai Burtescu
afbb675f2e Rollup merge of #37705 - nnethercote:fewer-mk_ty-calls, r=brson
Avoid unnecessary mk_ty calls in Ty::super_fold_with.

This speeds up compilation of several rustc-benchmarks by 1--2% and the workload in #36799 by 5%.

r? @eddyb
2016-11-12 10:38:44 +02:00
Eduard-Mihai Burtescu
75f2c21124 Rollup merge of #37699 - alexcrichton:default-for-duration, r=brson
std: Derive `Default` for `Duration`.

Discussed in #37546 the libs team reached the conclusion that a default zero
duration seems like a reasonable implementation of the `Default` trait.

Closes #37546
2016-11-12 10:38:43 +02:00
Eduard-Mihai Burtescu
35b0cf6bd8 Rollup merge of #37698 - GuillaumeGomez:marker_urls, r=brson
Add missing urls for marker's traits

r? @steveklabnik
2016-11-12 10:38:43 +02:00
Eduard-Mihai Burtescu
8886eccdf7 Rollup merge of #37696 - arthurprs:patch-1, r=alexcrichton
Remove one bounds check from BufReader

Very minor thing. Otherwise the optimizer can't be sure that pos <= cap. Added a paranoid debug_assert to ensure correctness instead.

CC #37573
2016-11-12 10:38:42 +02:00
Eduard-Mihai Burtescu
048daa6224 Rollup merge of #37695 - estebank:unescaped-curly, r=alexcrichton
On fmt string with unescaped `{` note how to escape

On cases of malformed format strings where a `{` hasn't been properly escaped, like `println!("{");`, present a NOTE explaining how to escape the `{` char.

Fix #34300.
2016-11-12 10:38:42 +02:00