Commit Graph

58675 Commits

Author SHA1 Message Date
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
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
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
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
Eduard-Mihai Burtescu
5439cb5bdc Rollup merge of #37694 - michaelwoerister:test-if-ich, r=brson
ICH: Add test case for if- and if-let-expressions.

r? @nikomatsakis
2016-11-12 10:38:42 +02:00
Eduard-Mihai Burtescu
5f9fe7c120 Rollup merge of #37693 - michaelwoerister:ich-tests, r=brson
ICH: Add test case for call expressions.

r? @nikomatsakis
2016-11-12 10:38:42 +02:00
Eduard-Mihai Burtescu
fb92277291 Rollup merge of #37692 - nbp:debug-lvalue-subslice, r=eddyb
Balance the debug output of Lvalue Subslice

The current debug output for Lvalue Subslice is not balanced and does not respect the comment[1], which indicates that we use `slice[from:-to] in Python terms.`.  In python terms slices which have a start but no end are written as `a[start:]`, so following the comment, I fixed the output accordingly.

Grep-ing over the sources, I did not found any test cases checking this subslice debug output.
Note, I have not yet tested this change yet, as I am still waiting for the end of LLVM compilation.

[1] https://manishearth.github.io/rust-internals-docs/rustc/mir/enum.ProjectionElem.html
2016-11-12 10:38:42 +02:00
Eduard-Mihai Burtescu
220ff76e0b Rollup merge of #37690 - TimNN:llvm-rel-dbg, r=alexcrichton
rustbuild: support RelWithDebInfo for llvm

r? @alexcrichton
2016-11-12 10:38:41 +02:00
Eduard-Mihai Burtescu
6dd4ee6d08 Rollup merge of #37688 - eddyb:lazy-8, r=petrochenkov
[8/n] rustc: clean up lookup_item_type and remove TypeScheme.

_This is part of a series ([prev](https://github.com/rust-lang/rust/pull/37676) | [next]()) of patches designed to rework rustc into an out-of-order on-demand pipeline model for both better feature support (e.g. [MIR-based](https://github.com/solson/miri) early constant evaluation) and incremental execution of compiler passes (e.g. type-checking), with beneficial consequences to IDE support as well.
If any motivation is unclear, please ask for additional PR description clarifications or code comments._

<hr>

* `tcx.tcache` -> `tcx.item_types`
* `TypeScheme` (grouping `Ty` and `ty::Generics`) is removed
* `tcx.item_types` entries no longer duplicated in `tcx.tables.node_types`
* `tcx.lookup_item_type(def_id).ty` -> `tcx.item_type(def_id)`
* `tcx.lookup_item_type(def_id).generics` -> `tcx.item_generics(def_id)`
* `tcx.lookup_generics(def_id)` -> `tcx.item_generics(def_id)`
* `tcx.lookup_{super_,}predicates(def_id)` -> `tcx.item_{super_,}predicates(def_id)`
2016-11-12 10:38:41 +02:00
Eduard-Mihai Burtescu
f80affac44 Rollup merge of #37682 - cuviper:local-cargo, r=alexcrichton
rustbuild: enable an initial local cargo

This allows the initial build of src/bootstrap itself to use a local
cargo taken from `configure --local-rust-root`.  It was already finding
rustc this way, but was always downloading cargo since it didn't know
where to find it.

It now matches the same logic that `config.rs` will use for stage0,
where both rustc and cargo are taken from `CFG_LOCAL_RUST_ROOT`.
2016-11-12 10:38:41 +02:00
Eduard-Mihai Burtescu
67ef819c09 Rollup merge of #37669 - GuillaumeGomez:always_urls, r=brson
Add missing urls for FusedIterator and TrustedLen traits

r? @steveklabnik
2016-11-12 10:38:41 +02:00
Eduard-Mihai Burtescu
1187ecf572 Rollup merge of #37662 - wesleywiser:intrinsics_docs, r=aturon
Add documentation to some of the unstable intrinsics

Part of #34338
2016-11-12 10:38:41 +02:00
Eduard-Mihai Burtescu
7dd4d19d49 Rollup merge of #37659 - nikomatsakis:sfackler-36340-fix, r=eddyb
introduce a `fudge_regions_if_ok` to address false region edges

Fixes #37655.

r? @eddyb
cc @sfackler
2016-11-12 10:38:40 +02:00
Eduard-Mihai Burtescu
8d2da2bc7e Rollup merge of #37615 - atilag:armv5te-support, r=alexcrichton
Add support for ARMv5TE architecture
2016-11-12 10:38:40 +02:00
Eduard-Mihai Burtescu
b619dcdaeb Rollup merge of #37613 - DanielKeep:eww-you-got-printf-in-your-format, r=alexcrichton
Add foreign formatting directive detection.

This teaches `format_args!` how to interpret format printf- and
shell-style format directives.  This is used in cases where there are
unused formatting arguments, and the reason for that *might* be because
the programmer is trying to use the wrong kind of formatting string.

This was prompted by an issue encountered by simulacrum on the #rust IRC
channel.  In short: although `println!` told them that they weren't using
all of the conversion arguments, the problem was in using printf-syle
directives rather than ones `println!` would undertand.

Where possible, `format_args!` will tell the programmer what they should
use instead.  For example, it will suggest replacing `%05d` with `{:0>5}`,
or `%2$.*3$s` with `{1:.3$}`.  Even if it cannot suggest a replacement,
it will explicitly note that Rust does not support that style of directive,
and direct the user to the `std::fmt` documentation.

-----

**Example**: given:

```rust
fn main() {
    println!("%.*3$s %s!\n", "Hello,", "World", 4);
    println!("%1$*2$.*3$f", 123.456);
}
```

The compiler outputs the following:

```text
error: multiple unused formatting arguments
 --> local/fmt.rs:2:5
  |
2 |     println!("%.*3$s %s!\n", "Hello,", "World", 4);
  |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  |
note: argument never used
 --> local/fmt.rs:2:30
  |
2 |     println!("%.*3$s %s!\n", "Hello,", "World", 4);
  |                              ^^^^^^^^
note: argument never used
 --> local/fmt.rs:2:40
  |
2 |     println!("%.*3$s %s!\n", "Hello,", "World", 4);
  |                                        ^^^^^^^
note: argument never used
 --> local/fmt.rs:2:49
  |
2 |     println!("%.*3$s %s!\n", "Hello,", "World", 4);
  |                                                 ^
  = help: `%.*3$s` should be written as `{:.2$}`
  = help: `%s` should be written as `{}`
  = note: printf formatting not supported; see the documentation for `std::fmt`
  = note: this error originates in a macro outside of the current crate

error: argument never used
 --> local/fmt.rs:6:29
  |
6 |     println!("%1$*2$.*3$f", 123.456);
  |                             ^^^^^^^
  |
  = help: `%1$*2$.*3$f` should be written as `{0:1$.2$}`
  = note: printf formatting not supported; see the documentation for `std::fmt`
```
2016-11-12 10:38:40 +02:00
Eduard-Mihai Burtescu
25f1deee52 Rollup merge of #37600 - brson:relnotes-1.13, r=alexcrichton
Add changelog for 1.13.0

The diagnostics PRs are excellent and some have excellent examples thanks @jonathandturner @estebank.

[Here are some notes about the performance changes during the release.
Compile times are improved %40 in some cases](https://gist.github.com/brson/1404c4bf4868d7d108f240a6ecba7f31).

This desires to be backported to beta for 1.13.

Sadly, the [1.12.1 changelog PR](https://github.com/rust-lang/rust/pull/37317) has not merged to master yet, and is sitting in a [rollup PR](https://github.com/rust-lang/rust/pull/37597).

r? @rust-lang/lang @rust-lang/compiler @rust-lang/libs @rust-lang/core
2016-11-12 10:38:39 +02:00
Eduard-Mihai Burtescu
02312b1fdb Rollup merge of #37584 - alexcrichton:travis, r=brson
Move all Linux/OSX CI infastructure to Travis

This commit configures our `.travis.yml` to test the full suite of tests we have
on Buildbot right now. A whole mess of docker images are added to the `src/ci`
directory which represent all the build environments for each configuration.
Each of these environments is then configured in `.travis.yml` to run on the
auto branch.

Note that the full matrix of tests aren't intended to be run on all PRs.
Instead, we continue to run only one entry in the matrix, forcing all others to
finish quickly. Only the `auto` branch should run the full matrix of builds.

Also note that the infrastructure hasn't quite been allocated yet to the
rust-lang/rust repository, so everything is disabled for now except for the one
build that happens on PRs. Once that infrastructure is allocated though we can
enable this and let it fly!

Notable modifications from the current test suite today:

* Android tests are run in rustbuild instead of the makefiles, for whatever
  reason I couldn't get the makefiles to work on Travis.
* A debuginfo test was updated to work with the current version of the Android
  NDK.
* Some dependencies in `mk/tests.mk` were fixed to allow running tests in
  parallel.
2016-11-12 10:38:38 +02:00
Eduard-Mihai Burtescu
f19f939994 Rollup merge of #37551 - Mark-Simulacrum:upgrade-accvec, r=eddyb
Replace syntax's SmallVector with AccumulateVec

This adds a new type to data_structures, `SmallVec`, which wraps `AccumulateVec` with support for re-allocating onto the heap (`SmallVec::reserve`). `SmallVec` is then used to replace the implementation of `SmallVector` in libsyntax.

r? @eddyb

Fixes #37371. Using `SmallVec` instead of libsyntax's `SmallVector` will provide the `N = 2/4` case easily (just needs a few more `Array` impls).

cc @nnethercote, probably interested in this area
2016-11-12 10:38:38 +02:00
Eduard-Mihai Burtescu
c3ab57c99e Rollup merge of #37535 - Havvy:graph, r=eddyb
Graph Changes

General cleanup and adding a few methods that I want to use in Clippy.

Need somebody to bikeshed names.
2016-11-12 10:38:38 +02:00
Eduard-Mihai Burtescu
29195e26d2 Rollup merge of #37527 - Mark-Simulacrum:mpsc-recvtimeouterror-error-impl, r=alexcrichton
Add Error implementation for std::sync::mpsc::RecvTimeoutError.

Fixes https://github.com/rust-lang/rust/issues/37525.
2016-11-12 10:38:37 +02:00
Eduard-Mihai Burtescu
16ae078fe9 Rollup merge of #37503 - nwin:patch-3, r=steveklabnik
Remove remark about poor code style

The current wording [seems to be confusing](https://www.reddit.com/r/rust/comments/5aat03/why_is_implementing_traits_on_primitive_types/). As an explanation when and why this could be considered as poor style would go beyond of the scope of this chapter I suggest to remove this remark.
2016-11-12 10:38:37 +02:00
Eduard-Mihai Burtescu
7894d2aad6 Rollup merge of #37481 - estebank:lifetime-help-removal-for-impl, r=eddyb
Don't provide hint to add lifetime on impl items

``` rust
use std::str::FromStr;

pub struct Foo<'a> {
    field: &'a str,
}

impl<'a> FromStr for Foo<'a> {
    type Err = ();
    fn from_str(path: &str) -> Result<Self, ()> {
        Ok(Foo { field: path })
    }
}
```

would give the following hint:

``` nocode
help: consider using an explicit lifetime parameter as shown: fn from_str(path: &'a str) -> Result<Self, ()>
  --> <anon>:9:5
   |
9  |     fn from_str(path: &str) -> Result<Self, ()> {
   |     ^
```

which is never correct, since then there will be a lifetime mismatch between the `impl` and the trait.

Remove this hint for all `impl` items.

Re: #37363.
2016-11-12 10:38:37 +02:00
Eduard-Mihai Burtescu
66da9a2911 Rollup merge of #37368 - trotter:patch-1, r=steveklabnik
Update testing.md to reflect changes to cargo new

`cargo new` now creates a `src/lib.rs` with a `tests` module by default. I've updated the earlier examples in this doc to reflect this. However, I don't know how we want to approach the "introduction" to idiomatic testing that follows in "the tests module" section. I _think_ it should be broken apart, with the module concept being introduced early on, and the `super` concept being addressed when we hit the `add_two` example. I'd like to get agreement on that being the right approach before I do it though.

I _also_ removed the `#fn main() {}` hidden at the beginning of each example, as these cause Rust Playground to not treat the file as a set of tests that it can run. Removing it _should_ cause Rust Playground to display a "Test >" button in the top left when a user runs the code, which will allow them to see the test runner output.
2016-11-12 10:38:37 +02:00