]> git.lizzy.rs Git - rust.git/log
rust.git
7 years agoOptimise Chars::last()
Oliver Middleton [Sat, 19 Nov 2016 18:43:41 +0000 (18:43 +0000)]
Optimise Chars::last()

The default implementation of last() goes through the entire iterator
but that's not needed here.

7 years agoAuto merge of #37793 - jseyfried:fix_proc_macro_def_ids, r=nrc
bors [Thu, 17 Nov 2016 12:38:08 +0000 (04:38 -0800)]
Auto merge of #37793 - jseyfried:fix_proc_macro_def_ids, r=nrc

Fix proc macro def ids

Update some `CStore` methods to also work correctly with proc macro def ids.
Fixes #37788.
r? @nrc

7 years agoAuto merge of #37717 - nikomatsakis:region-obligations-pre, r=eddyb
bors [Thu, 17 Nov 2016 09:18:51 +0000 (01:18 -0800)]
Auto merge of #37717 - nikomatsakis:region-obligations-pre, r=eddyb

Refactoring towards region obligation

Two refactorings towards the intermediate goal of propagating region obligations through the `InferOk` structure (which in turn leads to the possibility of lazy normalization).

1. Remove `TypeOrigin` and add `ObligationCause`
    - as we converge subtyping and obligations and so forth, the ability to keep these types distinct gets harder
2. Propagate obligations from `InferOk` into the surrounding fulfillment context

After these land, I have a separate branch (which still needs a bit of work) that can make the actual change to stop directly adding subregion edges and instead propagate obligations. (This should also make it easier to fix the unsoundness in specialization around lifetimes.)

r? @eddyb

7 years agoAuto merge of #37607 - dns2utf8:doc_grammar, r=alexcrichton
bors [Thu, 17 Nov 2016 05:02:55 +0000 (21:02 -0800)]
Auto merge of #37607 - dns2utf8:doc_grammar, r=alexcrichton

Fix grammar verification

 * Use make check-lexer to verify the grammar.
 * Extend grammar/README
 * Add make clean-grammar rule
 * Add target check-build-lexer-verifier to make tidy, so it will build the verifier with every build and catch future errors

This is the continuation of #34994

r? @steveklabnik @jonathandturner @alexcrichton

7 years agoAuto merge of #37375 - GuillaumeGomez:cast_message, r=arielb1
bors [Thu, 17 Nov 2016 00:30:27 +0000 (16:30 -0800)]
Auto merge of #37375 - GuillaumeGomez:cast_message, r=arielb1

Improve reference cast help message

Fixes #37338.

7 years agoRevert "Bump the bootstrap cargo to match the one paired with 1.13"
Brian Anderson [Thu, 17 Nov 2016 00:11:10 +0000 (00:11 +0000)]
Revert "Bump the bootstrap cargo to match the one paired with 1.13"

This reverts commit 5ad235c8c0416ebab0b80e4750b84c061ef6cc6b.

7 years agoMerge pull request #37635 from brson/bootstrap
Brian Anderson [Thu, 17 Nov 2016 00:08:41 +0000 (16:08 -0800)]
Merge pull request #37635 from brson/bootstrap

Bump the bootstrap cargo to match the one paired with 1.13

7 years agoFix grammar verification
Stefan Schindler [Sat, 23 Jul 2016 11:51:54 +0000 (13:51 +0200)]
Fix grammar verification

 * Use `make check-lexer` to verify the grammar.
 * Extend grammar/README
 * Add make clean-grammar rule
 * Add target `check-build-lexer-verifier` to `make tidy`, so it will build the verifier with every build and catch future errors
 * Search for antlr4 with configure and find

7 years agoImprove reference cast help message
Guillaume Gomez [Mon, 24 Oct 2016 12:52:14 +0000 (14:52 +0200)]
Improve reference cast help message

7 years agoAdd regression test.
Jeffrey Seyfried [Wed, 16 Nov 2016 07:30:35 +0000 (07:30 +0000)]
Add regression test.

7 years agoAuto merge of #37545 - alexcrichton:crt-static, r=brson
bors [Wed, 16 Nov 2016 16:25:38 +0000 (08:25 -0800)]
Auto merge of #37545 - alexcrichton:crt-static, r=brson

rustc: Implement #[link(cfg(..))] and crt-static

This commit is an implementation of [RFC 1721] which adds a new target feature
to the compiler, `crt-static`, which can be used to select how the C runtime for
a target is linked. Most targets dynamically linke the C runtime by default with
the notable exception of some of the musl targets.

[RFC 1721]: https://github.com/rust-lang/rfcs/blob/master/text/1721-crt-static.md

This commit first adds the new target-feature, `crt-static`. If enabled, then
the `cfg(target_feature = "crt-static")` will be available. Targets like musl
will have this enabled by default. This feature can be controlled through the
standard target-feature interface, `-C target-feature=+crt-static` or
`-C target-feature=-crt-static`.

Next this adds an gated and unstable `#[link(cfg(..))]` feature to enable the
`crt-static` semantics we want with libc. The exact behavior of this attribute
is a little squishy, but it's intended to be a forever-unstable
implementation detail of the liblibc crate.

Specifically the `#[link(cfg(..))]` annotation means that the `#[link]`
directive is only active in a compilation unit if that `cfg` value is satisfied.
For example when compiling an rlib, these directives are just encoded and
ignored for dylibs, and all staticlibs are continued to be put into the rlib as
usual. When placing that rlib into a staticlib, executable, or dylib, however,
the `cfg` is evaluated *as if it were defined in the final artifact* and the
library is decided to be linked or not.

Essentially, what'll happen is:

* On MSVC with `-C target-feature=-crt-static`, the `msvcrt.lib` library will be
  linked to.
* On MSVC with `-C target-feature=+crt-static`, the `libcmt.lib` library will be
  linked to.
* On musl with `-C target-feature=-crt-static`, the object files in liblibc.rlib
  are removed and `-lc` is passed instead.
* On musl with `-C target-feature=+crt-static`, the object files in liblibc.rlib
  are used and `-lc` is not passed.

This commit does **not** include an update to the liblibc module to implement
these changes. I plan to do that just after the 1.14.0 beta release is cut to
ensure we get ample time to test this feature.

cc #37406

7 years agorustc: Implement #[link(cfg(..))] and crt-static
Alex Crichton [Mon, 31 Oct 2016 23:40:13 +0000 (16:40 -0700)]
rustc: Implement #[link(cfg(..))] and crt-static

This commit is an implementation of [RFC 1721] which adds a new target feature
to the compiler, `crt-static`, which can be used to select how the C runtime for
a target is linked. Most targets dynamically linke the C runtime by default with
the notable exception of some of the musl targets.

[RFC 1721]: https://github.com/rust-lang/rfcs/blob/master/text/1721-crt-static.md

This commit first adds the new target-feature, `crt-static`. If enabled, then
the `cfg(target_feature = "crt-static")` will be available. Targets like musl
will have this enabled by default. This feature can be controlled through the
standard target-feature interface, `-C target-feature=+crt-static` or
`-C target-feature=-crt-static`.

Next this adds an gated and unstable `#[link(cfg(..))]` feature to enable the
`crt-static` semantics we want with libc. The exact behavior of this attribute
is a little squishy, but it's intended to be a forever-unstable
implementation detail of the liblibc crate.

Specifically the `#[link(cfg(..))]` annotation means that the `#[link]`
directive is only active in a compilation unit if that `cfg` value is satisfied.
For example when compiling an rlib, these directives are just encoded and
ignored for dylibs, and all staticlibs are continued to be put into the rlib as
usual. When placing that rlib into a staticlib, executable, or dylib, however,
the `cfg` is evaluated *as if it were defined in the final artifact* and the
library is decided to be linked or not.

Essentially, what'll happen is:

* On MSVC with `-C target-feature=-crt-static`, the `msvcrt.lib` library will be
  linked to.
* On MSVC with `-C target-feature=+crt-static`, the `libcmt.lib` library will be
  linked to.
* On musl with `-C target-feature=-crt-static`, the object files in liblibc.rlib
  are removed and `-lc` is passed instead.
* On musl with `-C target-feature=+crt-static`, the object files in liblibc.rlib
  are used and `-lc` is not passed.

This commit does **not** include an update to the liblibc module to implement
these changes. I plan to do that just after the 1.14.0 beta release is cut to
ensure we get ample time to test this feature.

cc #37406

7 years agoAuto merge of #37774 - frewsxcv:path-doc-example, r=brson
bors [Wed, 16 Nov 2016 13:06:30 +0000 (05:06 -0800)]
Auto merge of #37774 - frewsxcv:path-doc-example, r=brson

Update top-level path doc examples to show results.

None

7 years agoAuto merge of #37773 - ollie27:rustdoc_inline_glob, r=brson
bors [Wed, 16 Nov 2016 09:17:53 +0000 (01:17 -0800)]
Auto merge of #37773 - ollie27:rustdoc_inline_glob, r=brson

rustdoc: Fix some local inlining issues

* Only inline public items when inlining glob imports.
* Never inline while in a private module or a child of a private module.
* Never inline impls. This allowed the removal of a workaround in the
rendering code.

7 years agoImprove proc macro def ids.
Jeffrey Seyfried [Wed, 16 Nov 2016 06:10:34 +0000 (06:10 +0000)]
Improve proc macro def ids.

7 years agoAuto merge of #37764 - nnethercote:shrink-scope_auxiliary, r=nikomatsakis
bors [Wed, 16 Nov 2016 04:43:53 +0000 (20:43 -0800)]
Auto merge of #37764 - nnethercote:shrink-scope_auxiliary, r=nikomatsakis

Remove `scope_auxiliary`.

`scope_auxiliary` is a big part of the high memory usage in #36799. It's only used for MIR dumping. I have taken a hubristic approach: I have assumed that particular use is unimportant and removed `scope_auxiliary` and related things. This reduces peak RSS by ~10% for a cut-down version of the program in #36799.

If that assumption is wrong perhaps we can avoid building `scope_auxiliary` unless MIR dumping is enabled.

7 years agoAuto merge of #37758 - euclio:unstable, r=brson
bors [Tue, 15 Nov 2016 23:59:52 +0000 (15:59 -0800)]
Auto merge of #37758 - euclio:unstable, r=brson

do not use deprecated text for unstable docs

![2016-11-13-18 55 23](https://cloud.githubusercontent.com/assets/1372438/20249943/d7f684a2-a9d2-11e6-8c5a-a2bfe354b9aa.png)
![2016-11-13-18 55 12](https://cloud.githubusercontent.com/assets/1372438/20249942/d7f6595a-a9d2-11e6-9240-07f5a89367f4.png)

![2016-11-13-18 54 00](https://cloud.githubusercontent.com/assets/1372438/20249946/da176d46-a9d2-11e6-8f34-c09cff9bcc15.png)
![2016-11-13-18 54 45](https://cloud.githubusercontent.com/assets/1372438/20249941/d7d9837a-a9d2-11e6-99f4-e4bf8807b1c9.png)

7 years agoregister `infer-ok` obligations properly
Niko Matsakis [Wed, 24 Aug 2016 22:09:46 +0000 (18:09 -0400)]
register `infer-ok` obligations properly

Or at least, more properly. I think I left one or two FIXMEs still in
there.

cc #32730

7 years agoremove TypeOrigin and use ObligationCause instead
Niko Matsakis [Mon, 7 Nov 2016 18:25:06 +0000 (13:25 -0500)]
remove TypeOrigin and use ObligationCause instead

In general having all these different structs for "origins" is not
great, since equating types can cause obligations and vice-versa.  I
think we should gradually collapse these things. We almost certainly
also need to invest a big more energy into the `error_reporting` code to
rationalize it: this PR does kind of the minimal effort in that
direction.

7 years agoAuto merge of #37742 - mrhota:llvm_debuginfo, r=alexcrichton
bors [Tue, 15 Nov 2016 17:10:23 +0000 (09:10 -0800)]
Auto merge of #37742 - mrhota:llvm_debuginfo, r=alexcrichton

Add llvm debuginfo configure option

CC @nnethercote @Mark-Simulacrum

We add a new configure option, `--enable-llvm-debuginfo`, to do exactly what you'd think.

Re: #31033

Fixes #37738

7 years agoAuto merge of #37714 - alexcrichton:builtins-hidden, r=nikomatsakis
bors [Tue, 15 Nov 2016 12:42:28 +0000 (04:42 -0800)]
Auto merge of #37714 - alexcrichton:builtins-hidden, r=nikomatsakis

rustc: Flag all builtins functions as hidden

When compiling compiler-rt you typically compile with `-fvisibility=hidden`
which to ensure that all symbols are hidden in shared objects and don't show up
in symbol tables. This is important for these intrinsics being linked in every
crate to ensure that we're not unnecessarily bloating the public ABI of Rust
crates.

This should help allow the compiler-builtins project with Rust-defined builtins
start landing in-tree as well.

7 years agoAuto merge of #37672 - japaric:msp430, r=alexcrichton
bors [Tue, 15 Nov 2016 09:27:47 +0000 (01:27 -0800)]
Auto merge of #37672 - japaric:msp430, r=alexcrichton

enable the MSP430 LLVM backend

to let people experiment with this target out of tree.

The MSP430 architecture is used in 16-bit microcontrollers commonly used
in Digital Signal Processing applications.

---

How this was tested:

Declaring a custom target with the following specification:

``` json
{
  "arch": "msp430",
  "data-layout": "e-m:e-p:16:16-i32:16:32-a:16-n8:16",
  "executables": true,
  "linker": "msp430-gcc",
  "llvm-target": "msp430",
  "max-atomic-width": 0,
  "no-integrated-as": true,
  "os": "none",
  "panic-strategy": "abort",
  "relocation-model": "static",
  "target-endian": "little",
  "target-pointer-width": "16"
}
```

And this minimal file:

``` rust

pub fn start() -> ! {
    loop {}
}

trait Copy {}

trait Sized {}
```

Produces the following object files:

```
$ rustc --target=msp430 --emit=obj foo.rs

$ msp430-objdump -Cd foo.o

foo.o:     file format elf32-msp430

Disassembly of section .text.start:

00000000 <start>:
   0:   21 83           decd    r1
   2:   00 3c           jmp     $+2             ;abs 0x4
   4:   00 3c           jmp     $+2             ;abs 0x6
   6:   ff 3f           jmp     $+0             ;abs 0x6

$ rustc --target=msp430 --emit=obj foo.rs -O

$ msp430-objdump -Cd foo.o

foo.o:     file format elf32-msp430

Disassembly of section .text.start:

00000000 <start>:
   0:   ff 3f           jmp     $+0             ;abs 0x0
```

---

r? @alexcrichton
~~TODO get this working with Makefiles so nightly releases include this backend~~
~~TODO measure the increase in binary size~~ +187KiB (+0.47%)
~~FIXME --emit=obj produces empty object files~~

7 years agoAuto merge of #37775 - alexcrichton:try-fix-dox, r=brson
bors [Tue, 15 Nov 2016 02:12:26 +0000 (18:12 -0800)]
Auto merge of #37775 - alexcrichton:try-fix-dox, r=brson

rustbuild: Tweak default rule inclusion

If a rule is flagged with `default(true)` then the pseudo-rule `default:foo`
will include that. If a rule is also flagged with `.host(true)`, however, then
the rule shouldn't be included for targets that aren't in the host array. This
adds a filter to ensure we don't pull in host rules for targets by accident.

7 years agoAuto merge of #37771 - alexcrichton:fix-nightlies, r=brson
bors [Mon, 14 Nov 2016 22:04:54 +0000 (14:04 -0800)]
Auto merge of #37771 - alexcrichton:fix-nightlies, r=brson

test: Move missing-items to a ui test

This test is failing on nightly for unknown reasons, and my best guess is a
difference in grep versions which is interpreting symbols differently. For now
let's just move this to a ui test and hope it fixes nightlies.

7 years agoUpdate top-level path doc examples to show results.
Corey Farwell [Mon, 14 Nov 2016 20:51:15 +0000 (15:51 -0500)]
Update top-level path doc examples to show results.

7 years agorustbuild: Tweak default rule inclusion
Alex Crichton [Mon, 14 Nov 2016 20:50:38 +0000 (12:50 -0800)]
rustbuild: Tweak default rule inclusion

If a rule is flagged with `default(true)` then the pseudo-rule `default:foo`
will include that. If a rule is also flagged with `.host(true)`, however, then
the rule shouldn't be included for targets that aren't in the host array. This
adds a filter to ensure we don't pull in host rules for targets by accident.

7 years agoAuto merge of #37740 - bluss:corrected-vec-collect, r=alexcrichton
bors [Mon, 14 Nov 2016 19:07:29 +0000 (11:07 -0800)]
Auto merge of #37740 - bluss:corrected-vec-collect, r=alexcrichton

Restore Vec::from_iter() specialization

Since I said "no intentional functional change" in the previous commit,
I guess it was inevitable there were unintentional changes. Not
functional, but optimization-wise. This restores the extend
specialization's use in Vec::from_iter. (commit 1).

Also use specialization in from_iter to reduce allocation code duplication
for the TrustedLen case (commit 2).

Bug introduced in PR #37709

7 years agorustdoc: Fix some local inlining issues
Oliver Middleton [Mon, 14 Nov 2016 18:24:47 +0000 (18:24 +0000)]
rustdoc: Fix some local inlining issues

* Only inline public items when inlining glob imports.
* Never inline while in a private module or a child of a private module.
* Never inline impls. This allowed the removal of a workaround in the
rendering code.

7 years agotest: Move missing-items to a ui test
Alex Crichton [Mon, 14 Nov 2016 17:23:17 +0000 (09:23 -0800)]
test: Move missing-items to a ui test

This test is failing on nightly for unknown reasons, and my best guess is a
difference in grep versions which is interpreting symbols differently. For now
let's just move this to a ui test and hope it fixes nightlies.

7 years agoAuto merge of #37755 - polo-language:doc-punct, r=GuillaumeGomez
bors [Mon, 14 Nov 2016 14:00:27 +0000 (06:00 -0800)]
Auto merge of #37755 - polo-language:doc-punct, r=GuillaumeGomez

Improved punctuation, capitalization, and sentence structure of code snippet comments

r? @GuillaumeGomez

7 years agoAuto merge of #37278 - matklad:lone-lifetime, r=jseyfried
bors [Mon, 14 Nov 2016 10:46:12 +0000 (02:46 -0800)]
Auto merge of #37278 - matklad:lone-lifetime, r=jseyfried

Fix syntax error in the compiler

Currently `rustc` accepts the following code: `fn f<'a>() where 'a {}`. This should be a syntax error, shouldn't it?

Not sure if my changes actually compile, waiting for the LLVM to build.

7 years agodon't build an object file for emit=asm,llvm-ir
Jorge Aparicio [Mon, 14 Nov 2016 08:37:46 +0000 (03:37 -0500)]
don't build an object file for emit=asm,llvm-ir

7 years agoAuto merge of #37754 - frewsxcv:path-push, r=GuillaumeGomez
bors [Mon, 14 Nov 2016 07:31:54 +0000 (23:31 -0800)]
Auto merge of #37754 - frewsxcv:path-push, r=GuillaumeGomez

Minor rewriting of `std::path::Path::push` doc example.

None

7 years agoFix where clauses parsing
Aleksey Kladov [Wed, 19 Oct 2016 15:21:27 +0000 (18:21 +0300)]
Fix where clauses parsing

Don't allow lifetimes without any bounds at all

7 years agoRemove `scope_auxiliary`.
Nicholas Nethercote [Thu, 3 Nov 2016 03:22:57 +0000 (14:22 +1100)]
Remove `scope_auxiliary`.

This reduces the peak RSS for a cut-down version of the program
in #36799 by 10%, from 951MB to 856MB.

7 years agoAuto merge of #37640 - michaelwoerister:llvm-type-names, r=brson
bors [Mon, 14 Nov 2016 03:46:34 +0000 (19:46 -0800)]
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.

7 years agoRemove unused method CrateContext::rotate().
Michael Woerister [Mon, 7 Nov 2016 19:40:52 +0000 (14:40 -0500)]
Remove unused method CrateContext::rotate().

7 years agoAdapt accidentally fixed test case.
Michael Woerister [Mon, 7 Nov 2016 18:33:21 +0000 (13:33 -0500)]
Adapt accidentally fixed test case.

7 years agoFix codegen test after change of llvm type naming scheme
Michael Woerister [Tue, 8 Nov 2016 18:23:57 +0000 (13:23 -0500)]
Fix codegen test after change of llvm type naming scheme

7 years agoMake names of types used in LLVM IR stable.
Michael Woerister [Fri, 4 Nov 2016 21:37:42 +0000 (17:37 -0400)]
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.

7 years agoAuto merge of #37701 - Mark-Simulacrum:macro-parser-impvement, r=jseyfried
bors [Mon, 14 Nov 2016 00:23:57 +0000 (16:23 -0800)]
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

7 years agodo not use deprecated text for unstable docs
Andy Russell [Sun, 13 Nov 2016 20:56:23 +0000 (15:56 -0500)]
do not use deprecated text for unstable docs

7 years agoAuto merge of #37743 - jedireza:patch-2, r=bluss
bors [Sun, 13 Nov 2016 21:09:27 +0000 (13:09 -0800)]
Auto merge of #37743 - jedireza:patch-2, r=bluss

Minor grammar fix to ffi.md

7 years agoMake LLVM debuginfo option names consistent
A.J. Gardner [Sun, 13 Nov 2016 18:38:10 +0000 (12:38 -0600)]
Make LLVM debuginfo option names consistent

7 years agoImproved punctuation, capitalization, and sentence structure of code snippet comments
Angelo Polo [Sun, 13 Nov 2016 18:31:34 +0000 (13:31 -0500)]
Improved punctuation, capitalization, and sentence structure of code snippet comments

7 years agoLet rustbuild parse llvm debuginfo option
A.J. Gardner [Sun, 13 Nov 2016 18:27:57 +0000 (12:27 -0600)]
Let rustbuild parse llvm debuginfo option

update_with_config_mk() needs to read the new llvm debuginfo config
option from config.mk. Other than that, rustbuild already supports
LLVM's RelWithDebInfo build type.

7 years agoMinor rewriting of `std::path::Path::push` doc example.
Corey Farwell [Sun, 13 Nov 2016 17:57:03 +0000 (12:57 -0500)]
Minor rewriting of `std::path::Path::push` doc example.

7 years agoAuto merge of #37753 - est31:master, r=petrochenkov
bors [Sun, 13 Nov 2016 17:53:30 +0000 (09:53 -0800)]
Auto merge of #37753 - est31:master, r=petrochenkov

Fix empty lifetime list or one with trailing comma being rejected

Fixes #37733

7 years agoFix empty lifetime list or one with trailing comma being rejected
est31 [Sun, 13 Nov 2016 16:55:17 +0000 (17:55 +0100)]
Fix empty lifetime list or one with trailing comma being rejected

Fixes #37733

7 years agoadd cabi_msp430
Jorge Aparicio [Sun, 13 Nov 2016 16:03:44 +0000 (11:03 -0500)]
add cabi_msp430

7 years agoAuto merge of #37735 - Mark-Simulacrum:remove-e-macro, r=bluss
bors [Sun, 13 Nov 2016 13:22:09 +0000 (05:22 -0800)]
Auto merge of #37735 - Mark-Simulacrum:remove-e-macro, r=bluss

Remove macro work-around

`--stage 2` build succeeded.

7 years agoAuto merge of #37728 - QuietMisdreavus:rustdoc-enum-struct, r=GuillaumeGomez
bors [Sun, 13 Nov 2016 06:36:49 +0000 (22:36 -0800)]
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

7 years agoAuto merge of #37689 - eddyb:bktrc-pls, r=alexcrichton
bors [Sun, 13 Nov 2016 02:53:51 +0000 (18:53 -0800)]
Auto merge of #37689 - eddyb:bktrc-pls, r=alexcrichton

Set `RUST_BACKTRACE=1` on travis to be more helpful.

7 years agoMinor grammar fix to ffi.md
Reza Akhavan [Sun, 13 Nov 2016 02:24:16 +0000 (18:24 -0800)]
Minor grammar fix to ffi.md

7 years agoAdd llvm debuginfo configure option
A.J. Gardner [Sun, 13 Nov 2016 01:13:22 +0000 (19:13 -0600)]
Add llvm debuginfo configure option

7 years agovec: Use less code bloat specialized Vec::from_iter
Ulrik Sverdrup [Sun, 13 Nov 2016 00:09:27 +0000 (01:09 +0100)]
vec: Use less code bloat specialized Vec::from_iter

Vec::from_iter's general case allocates the vector up front;
this is redundant for the TrustedLen case, and can then be avoided
to reduce the size of the code.

7 years agoAuto merge of #37675 - arielb1:trans-closure, r=eddyb
bors [Sat, 12 Nov 2016 23:29:13 +0000 (15:29 -0800)]
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

7 years agoRestore Vec::from_iter() specialization
Ulrik Sverdrup [Sat, 12 Nov 2016 23:11:16 +0000 (00:11 +0100)]
Restore Vec::from_iter() specialization

Since I said "no intentional functional change" in the previous commit,
I guess it was inevitable there were unintentional changes. Not
functional, but optimization-wise. This restores the extend
specialization's use in Vec::from_iter.

7 years agouse write::run_assembler
Jorge Aparicio [Sat, 12 Nov 2016 22:30:06 +0000 (17:30 -0500)]
use write::run_assembler

7 years agouse msp430-as to emit object files from the assembly that LLVM emits
Jorge Aparicio [Thu, 10 Nov 2016 00:05:32 +0000 (19:05 -0500)]
use msp430-as to emit object files from the assembly that LLVM emits

7 years agooops, forgot to commit a rustbuild related file
Jorge Aparicio [Wed, 9 Nov 2016 21:57:14 +0000 (16:57 -0500)]
oops, forgot to commit a rustbuild related file

7 years agoalso enable the MSP430 backend in Makefiles
Jorge Aparicio [Wed, 9 Nov 2016 21:56:10 +0000 (16:56 -0500)]
also enable the MSP430 backend in Makefiles

7 years agofix #37673
Jorge Aparicio [Wed, 9 Nov 2016 19:45:44 +0000 (14:45 -0500)]
fix #37673

7 years agoenable the MSP430 LLVM backend
Jorge Aparicio [Wed, 9 Nov 2016 19:00:26 +0000 (14:00 -0500)]
enable the MSP430 LLVM backend

to let people experiment with this target out of tree.

The MSP430 architecture is used in 16-bit microcontrollers commonly used
in Digital Signal Processing applications.

7 years agoaddress review comments
Ariel Ben-Yehuda [Sat, 12 Nov 2016 21:20:02 +0000 (23:20 +0200)]
address review comments

7 years agoAuto merge of #37611 - Mark-Simulacrum:tari-nodejs-runner-detect, r=alexcrichton
bors [Sat, 12 Nov 2016 20:02:40 +0000 (12:02 -0800)]
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.

7 years agorustdoc: fold fields for enum struct variants into a docblock
QuietMisdreavus [Fri, 11 Nov 2016 22:41:00 +0000 (16:41 -0600)]
rustdoc: fold fields for enum struct variants into a docblock

7 years agoRemove macro work-around.
Mark-Simulacrum [Sat, 12 Nov 2016 19:20:58 +0000 (12:20 -0700)]
Remove macro work-around.

7 years agorustc: Flag all builtins functions as hidden
Alex Crichton [Fri, 11 Nov 2016 16:21:22 +0000 (08:21 -0800)]
rustc: Flag all builtins functions as hidden

When compiling compiler-rt you typically compile with `-fvisibility=hidden`
which to ensure that all symbols are hidden in shared objects and don't show up
in symbol tables. This is important for these intrinsics being linked in every
crate to ensure that we're not unnecessarily bloating the public ABI of Rust
crates.

This should help allow the compiler-builtins project with Rust-defined builtins
start landing in-tree as well.

7 years agorustc_trans: translate closures using the collector
Ariel Ben-Yehuda [Wed, 9 Nov 2016 21:09:28 +0000 (23:09 +0200)]
rustc_trans: translate closures using the collector

Translate closures like normal functions, using the trans::collector
interface.

7 years agorustc_typeck: register item types for closures
Ariel Ben-Yehuda [Wed, 9 Nov 2016 18:41:03 +0000 (20:41 +0200)]
rustc_typeck: register item types for closures

This makes them closer to actual items and allows for more
transparent treatment.

7 years agorustc: move closure upvar types to the closure substs
Ariel Ben-Yehuda [Thu, 3 Nov 2016 20:19:33 +0000 (22:19 +0200)]
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.

7 years agoAuto merge of #37531 - estebank:fix-ref-mut-mut, r=jonathandturner
bors [Sat, 12 Nov 2016 16:41:30 +0000 (08:41 -0800)]
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

7 years agoRemove extra level of nesting.
Mark-Simulacrum [Sat, 12 Nov 2016 14:41:47 +0000 (07:41 -0700)]
Remove extra level of nesting.

7 years agoMove next_eis out of main loop to avoid re-allocating and dropping it.
Mark-Simulacrum [Sat, 12 Nov 2016 14:41:26 +0000 (07:41 -0700)]
Move next_eis out of main loop to avoid re-allocating and dropping it.

7 years agoUse SmallVector for eof and bb eis.
Mark-Simulacrum [Fri, 11 Nov 2016 23:37:08 +0000 (16:37 -0700)]
Use SmallVector for eof and bb eis.

7 years agoFactor out inner current Earley item loop.
Mark-Simulacrum [Fri, 11 Nov 2016 23:28:47 +0000 (16:28 -0700)]
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.

7 years agoRefactor parse_nt.
Mark-Simulacrum [Fri, 11 Nov 2016 00:30:01 +0000 (17:30 -0700)]
Refactor parse_nt.

7 years agoFactor out NamedParseResult.
Mark-Simulacrum [Tue, 8 Nov 2016 02:40:00 +0000 (19:40 -0700)]
Factor out NamedParseResult.

7 years agoClean up extraneous &mut.
Mark-Simulacrum [Tue, 8 Nov 2016 02:17:45 +0000 (19:17 -0700)]
Clean up extraneous &mut.

7 years agoRefactor to extending from a drain instead of while looping.
Mark-Simulacrum [Tue, 8 Nov 2016 02:17:17 +0000 (19:17 -0700)]
Refactor to extending from a drain instead of while looping.

7 years agoRemove unused argument from nameize.
Mark-Simulacrum [Tue, 8 Nov 2016 02:16:14 +0000 (19:16 -0700)]
Remove unused argument from nameize.

Also makes nameize non-public since it's only locally used.

7 years agoCleanup macro_parser::parse, removing a few clones.
Mark-Simulacrum [Mon, 7 Nov 2016 02:37:56 +0000 (19:37 -0700)]
Cleanup macro_parser::parse, removing a few clones.

7 years agoAuto merge of #37554 - mikhail-m1:dnlle, r=jonathandturner
bors [Sat, 12 Nov 2016 13:20:56 +0000 (05:20 -0800)]
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

7 years agoSet `RUST_BACKTRACE=1` on travis to be more helpful.
Eduard Burtescu [Thu, 10 Nov 2016 14:12:53 +0000 (16:12 +0200)]
Set `RUST_BACKTRACE=1` on travis to be more helpful.

7 years agoAuto merge of #37730 - eddyb:rollup, r=eddyb
bors [Sat, 12 Nov 2016 08:39:50 +0000 (00:39 -0800)]
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

7 years agoRollup merge of #37727 - GuillaumeGomez:invalid_src, r=eddyb
Eduard-Mihai Burtescu [Sat, 12 Nov 2016 08:38:45 +0000 (10:38 +0200)]
Rollup merge of #37727 - GuillaumeGomez:invalid_src, r=eddyb

Fix invalid src url

Fixes #37684.

Thanks to @eddyb's help.

r? @eddyb

7 years agoRollup merge of #37724 - brson:bump, r=alexcrichton
Eduard-Mihai Burtescu [Sat, 12 Nov 2016 08:38:45 +0000 (10:38 +0200)]
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.

7 years agoRollup merge of #37716 - GuillaumeGomez:mem_urls, r=@frewsxcv
Eduard-Mihai Burtescu [Sat, 12 Nov 2016 08:38:44 +0000 (10:38 +0200)]
Rollup merge of #37716 - GuillaumeGomez:mem_urls, r=@frewsxcv

Mem urls

r? @steveklabnik

7 years agoRollup merge of #37709 - bluss:cleaner-vec-extend, r=alexcrichton
Eduard-Mihai Burtescu [Sat, 12 Nov 2016 08:38:44 +0000 (10:38 +0200)]
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

7 years agoRollup merge of #37708 - oli-obk:box_free, r=eddyb
Eduard-Mihai Burtescu [Sat, 12 Nov 2016 08:38:44 +0000 (10:38 +0200)]
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?

7 years agoRollup merge of #37705 - nnethercote:fewer-mk_ty-calls, r=brson
Eduard-Mihai Burtescu [Sat, 12 Nov 2016 08:38:44 +0000 (10:38 +0200)]
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

7 years agoRollup merge of #37699 - alexcrichton:default-for-duration, r=brson
Eduard-Mihai Burtescu [Sat, 12 Nov 2016 08:38:43 +0000 (10:38 +0200)]
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

7 years agoRollup merge of #37698 - GuillaumeGomez:marker_urls, r=brson
Eduard-Mihai Burtescu [Sat, 12 Nov 2016 08:38:43 +0000 (10:38 +0200)]
Rollup merge of #37698 - GuillaumeGomez:marker_urls, r=brson

Add missing urls for marker's traits

r? @steveklabnik

7 years agoRollup merge of #37696 - arthurprs:patch-1, r=alexcrichton
Eduard-Mihai Burtescu [Sat, 12 Nov 2016 08:38:42 +0000 (10:38 +0200)]
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

7 years agoRollup merge of #37695 - estebank:unescaped-curly, r=alexcrichton
Eduard-Mihai Burtescu [Sat, 12 Nov 2016 08:38:42 +0000 (10:38 +0200)]
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.

7 years agoRollup merge of #37694 - michaelwoerister:test-if-ich, r=brson
Eduard-Mihai Burtescu [Sat, 12 Nov 2016 08:38:42 +0000 (10:38 +0200)]
Rollup merge of #37694 - michaelwoerister:test-if-ich, r=brson

ICH: Add test case for if- and if-let-expressions.

r? @nikomatsakis

7 years agoRollup merge of #37693 - michaelwoerister:ich-tests, r=brson
Eduard-Mihai Burtescu [Sat, 12 Nov 2016 08:38:42 +0000 (10:38 +0200)]
Rollup merge of #37693 - michaelwoerister:ich-tests, r=brson

ICH: Add test case for call expressions.

r? @nikomatsakis

7 years agoRollup merge of #37692 - nbp:debug-lvalue-subslice, r=eddyb
Eduard-Mihai Burtescu [Sat, 12 Nov 2016 08:38:42 +0000 (10:38 +0200)]
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

7 years agoRollup merge of #37690 - TimNN:llvm-rel-dbg, r=alexcrichton
Eduard-Mihai Burtescu [Sat, 12 Nov 2016 08:38:41 +0000 (10:38 +0200)]
Rollup merge of #37690 - TimNN:llvm-rel-dbg, r=alexcrichton

rustbuild: support RelWithDebInfo for llvm

r? @alexcrichton