Commit Graph

58943 Commits

Author SHA1 Message Date
Michael Woerister
f2b8d7bb31 ICH: Add test case for if- and if-let-expressions. 2016-11-10 15:06:51 -05:00
bors
3dced6f71e Auto merge of #37645 - jseyfried:fix_crate_var_in_custom_derives, r=nrc
Fix regression involving custom derives on items with `$crate`

The regression was introduced in #37213.

I believe we cannot make the improvements from #37213 work with the current custom derive setup (c.f. https://github.com/rust-lang/rust/issues/37637#issuecomment-258959145) -- we'll have to wait for `TokenStream`'s API to improve.

Fixes #37637.
r? @nrc
2016-11-10 11:25:17 -08:00
Michael Woerister
669102f0f0 ICH: Add test case for call expressions. 2016-11-10 13:26:19 -05:00
Nicolas B. Pierron
4ce4900218 Balance the debug output of Lvalue Subslice 2016-11-10 18:19:05 +00:00
Alex Crichton
2743128876 std: Update compiler-rt for more ABI fixes
This update of compiler-rt includes rust-lang/compiler-rt#26 which provides a
targeted fix to the powisf2 intrinsics to keep #37559 fixed but also address
the new issue of #37630. I've also [written up my thoughts][1] on why it appears
that this is the correct fix for now (hoepfully at least).

Closes #37630

[1]: https://github.com/rust-lang/compiler-rt/pull/26#issuecomment-259751998
2016-11-10 09:23:29 -08:00
Tim Neumann
0254f12224 rustbuild: support RelWithDebInfo for llvm 2016-11-10 17:30:06 +01:00
bors
bc1cc1db6d Auto merge of #37687 - nox:patch-1, r=eddyb
Work around a borrow surviving too long (fixes #37686)
2016-11-10 08:18:21 -08:00
Trotter Cashion
4cf764470a Remove extraneous word 2016-11-10 07:55:20 -08:00
Trotter Cashion
dd9280920f Change project path for consistency
I had used `/tmp/adder` for my previous commits. Flipped over to
`/home/you/projects/adder` for consistency with other parts of testing.md
2016-11-10 07:52:51 -08:00
Trotter Cashion
35903bb9aa Remove mod tests from earlier sections
The narrative flows better if we follow what @steveklabnik is doing in
rust-lang/book#288. Therefore, I completely copied it.
2016-11-10 07:48:01 -08:00
Trotter Cashion
d9c60ca06c Instruct play.rust-lang.org to treat code as tests
Without these changes, play.rust-lang.org (as of today) would wrap
our examples in `fn main() {}`. This prevents the user from being able
to easily run the tests.
2016-11-10 07:30:20 -08:00
Eduard Burtescu
3f9eba1c7c rustc: clean up lookup_item_type and remove TypeScheme. 2016-11-10 16:49:53 +02:00
Anthony Ramine
84239dfc4a Work around a borrow surviving too long (fixes #37686) 2016-11-10 14:43:46 +01:00
bors
187d989602 Auto merge of #37542 - jseyfried:custom_derive_reexports, r=nrc
Support `#[macro_reexport]`ing custom derives

This is gated behind `#![feature(macro_reexport)]` and `#![feature(proc_macro)]`.
r? @nrc
2016-11-10 05:10:04 -08:00
Jeffrey Seyfried
67eeb0a720 Add regression test. 2016-11-10 11:21:23 +00:00
Jeffrey Seyfried
f35eff2c57 Test #[macro_reexport]ing custom derives. 2016-11-10 11:19:38 +00:00
Jeffrey Seyfried
0a998b86e9 Support #[macro_reexport]ing custom derives. 2016-11-10 11:19:34 +00:00
Jeffrey Seyfried
11195676a0 Elimite $crate before invokng custom derives. 2016-11-10 10:23:35 +00:00
Jeffrey Seyfried
ad53452398 Merge branch 'refactor_macro_reexports' into custom_derive_reexports 2016-11-10 10:08:00 +00:00
bors
ab03f85522 Auto merge of #37463 - jseyfried:refactor_macro_reexports, r=nrc
macros: improve reexports

This PR
- avoids building multiple module graphs for a crate that is referenced by multiple `extern crate` items,
- registers `#[no_link] extern crate`s to avoid loading the same crate metadata twice,
- stability checks `#[no_link] extern crate`s,
  - [breaking-chage]: `#[no_link] #[macro_use] extern crate syntax;` is allowed on stable today
- fixes `$crate` in `#[macro_reexport]`ed macros,
  - [breaking-change] for `#[feature(macro_reexport)]` (technically)
- allows selective macro importing (i.e. `#[macro_use(foo, bar)]`) from custom derive crates, and
- refactors the crate metadata to support re-exported macros in arbitrary modules (not yet needed).

r? @nrc
2016-11-10 02:05:45 -08:00
Jeffrey Seyfried
a0a9f8ca1b Fix fallout in librustdoc. 2016-11-10 10:04:43 +00:00
Jeffrey Seyfried
872943c317 Improve macro reexports. 2016-11-10 10:04:24 +00:00
Juan Gomez
365ea800bd Set max_atomic_width to 0 because there's no atomic instructions on ARMv5 2016-11-10 10:53:44 +01:00
Jeffrey Seyfried
85f74c0eea Add variants Def::Macro and Namespace::MacroNS. 2016-11-10 09:21:44 +00:00
Jeffrey Seyfried
dd0781ea25 Register and stability check #[no_link] crates. 2016-11-10 09:21:29 +00:00
Jeffrey Seyfried
a1d45d94b0 Refactor explicitly_linked: bool -> dep_kind: DepKind. 2016-11-10 09:21:04 +00:00
Jeffrey Seyfried
c102d7fb68 Clean up CrateSource. 2016-11-10 09:20:59 +00:00
Jeffrey Seyfried
624a9b7311 Avoid building multiple reduced graphs for a crate
that is referenced by multiple `extern crate` items.
2016-11-10 09:20:55 +00:00
bors
c11e2bda39 Auto merge of #37680 - tshepang:typo, r=alexcrichton
doc: fix typo
2016-11-09 22:43:19 -08:00
Josh Stone
0d6323f44d 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-09 22:25:17 -08:00
Jeffrey Seyfried
b0e13dc5ba Treat extern crates more like imports (pure refactoring). 2016-11-10 06:04:40 +00:00
Jeffrey Seyfried
8021ede601 nit: clean up some redundant code. 2016-11-10 06:03:51 +00:00
Tshepang Lekhonkhobe
a9349d723d doc: fix typos 2016-11-10 05:23:41 +02:00
bors
b46ce08df5 Auto merge of #37678 - eddyb:rollup, r=eddyb
Rollup of 5 pull requests

- Successful merges: #37402, #37412, #37661, #37664, #37667
- Failed merges:
2016-11-09 18:22:47 -08:00
Eduard-Mihai Burtescu
3a5b45aae5 Rollup merge of #37667 - alexcrichton:fix-llvm-version, r=japaric
rustc_llvm: Require 3.9 for --link-static

Apparently stock Ubuntu 16.04 includes LLVM 3.8 which doesn't have this flag.
2016-11-10 03:46:29 +02:00
Eduard-Mihai Burtescu
e733667210 Rollup merge of #37664 - est31:master, r=nrc
Document the question mark operator in reference and the book's syntax index

The question mark operator will be stabilized for the Rust 1.13 release (unfortunately). Even though I don't like the operator, it still should be documented in the syntax index in the book and in the reference.

Maybe there are people who also want to change the book's chapters on error handling, depending on their views of what idiomatic error handling is, now that the operator is stable, but I don't want to and I'd prefer to keep this PR focused on the reference and syntax index only.

Please also apply this PR to the beta branch of rust.
2016-11-10 03:46:28 +02:00
Eduard-Mihai Burtescu
8cc6be1bcb Rollup merge of #37661 - brson:qmarkstab, r=nikomatsakis
question_mark was stabilized in 1.13
2016-11-10 03:46:28 +02:00
Eduard-Mihai Burtescu
368281a110 Rollup merge of #37412 - eddyb:lazy-6, r=nikomatsakis
[6/n] rustc: transition HIR function bodies from Block to Expr.

_This is part of a series ([prev](https://github.com/rust-lang/rust/pull/37408) | [next](https://github.com/rust-lang/rust/pull/37676)) 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>

The main change here is that functions and closures both use `Expr` instead of `Block` for their bodies.
For closures this actually allows a honest representation of brace-less closure bodies, e.g. `|x| x + 1` is now distinguishable from `|x| { x + 1 }`, therefore this PR is `[syntax-breaking]` (cc @Manishearth).

Using `Expr` allows more logic to be shared between constant bodies and function bodies, with some small such changes already part of this PR, and eventually easing #35078 and per-body type tables.

Incidentally, there used to be some corners cut here and there and as such I had to (re)write divergence tracking for type-checking so that it is capable of understanding basic structured control-flow:

``` rust
fn a(x: bool) -> i32 {
    // match also works (as long as all arms diverge)
    if x { panic!("true") } else { return 1; }
    0 // "unreachable expression" after this PR
}
```

And since liveness' "not all control paths return a value" moved to type-checking we can have nice things:

``` rust
// before & after:
fn b() -> i32 { 0; } // help: consider removing this semicolon

// only after this PR
fn c() -> i32 { { 0; } } // help: consider removing this semicolon
fn d() { let x: i32 = { 0; }; } // help: consider removing this semicolon
fn e() { f({ 0; }); } // help: consider removing this semicolon
```
2016-11-10 03:46:28 +02:00
Eduard-Mihai Burtescu
8d4a3500ff Rollup merge of #37402 - eddyb:lazy-3, r=nikomatsakis
[3/n] rustc: unify and simplify managing associated items.

_This is part of a series ([prev](https://github.com/rust-lang/rust/pull/37401) | [next](https://github.com/rust-lang/rust/pull/37404)) 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>

`ImplOrTraitItem`/`impl_or_trait_item` have been renamed to `AssociatedItem`/`associated_item`.

The common fields from (what used to be) `ty::ImplOrTraitItem`'s variants have been pulled out, leaving only an `AssociatedKind` C-like enum to distinguish between methods, constants and types.

The type information has been removed from `AssociatedItem`, and as such the latter can now be computed on-demand from the local HIR map, i.e. an extern-crate-enabled `TraitItem | ImplItem`.
It may be moved to HIR in the future, if we intend to start using HIR types cross-crate.

`ty::ExplicitSelfCategory` has been moved to `rustc_typeck` and is produced on-demand from the signature of the method, and a `method_has_self_argument` field on `AssociatedItem`, which is used to indicate that the first argument is a sugary "method receiver" and as such, method call syntax can be used.
2016-11-10 03:46:27 +02:00
Esteban Küber
43aed325aa Show one error for duplicated type definitions
For the following code:

```rustc
struct Bar;
struct Bar;

fn main () {
}
```

show

```nocode
error[E0428]: a type named `Bar` has already been defined in this module
  --> src/test/compile-fail/E0428.rs:12:1
   |
11 | struct Bar;
   | ----------- previous definition of `Bar` here
12 | struct Bar;
   | ^^^^^^^^^^^

error: aborting due to previous error
```

instead of

```nocode
error[E0428]: a type named `Bar` has already been defined in this module
  --> src/test/compile-fail/E0428.rs:12:1
   |
11 | struct Bar;
   | ----------- previous definition of `Bar` here
12 | struct Bar;
   | ^^^^^^^^^^^

error[E0428]: a value named `Bar` has already been defined in this module
  --> src/test/compile-fail/E0428.rs:12:1
   |
11 | struct Bar;
   | ----------- previous definition of `Bar` here
12 | struct Bar;
   | ^^^^^^^^^^^

error: aborting due to 2 previous errors
```
2016-11-09 16:19:49 -08:00
Eduard Burtescu
de0ffadb67 rustc: unify and simplify managing associated items. 2016-11-10 02:06:34 +02:00
Eduard Burtescu
8e9106c531 tests: fix fallout in pretty-printing output exact-match tests. 2016-11-10 01:44:53 +02:00
Eduard Burtescu
9ce1044bd5 tests: fix fallout in flowgraph graphviz comparison dot files. 2016-11-10 01:44:53 +02:00
Eduard Burtescu
6b3cc0b8c8 rustc_typeck: correctly track "always-diverges" and "has-type-errors". 2016-11-10 01:44:53 +02:00
Eduard Burtescu
ff0830d749 rustc: use an Expr instead of a Block for function bodies. 2016-11-10 01:44:45 +02:00
Eduard Burtescu
49772fbf5d syntax: don't fake a block around closures' bodies during parsing. 2016-11-10 01:44:45 +02:00
bors
0b46947d35 Auto merge of #37603 - arielb1:max-slice-length, r=nikomatsakis
_match: correct max_slice_length logic

The logic used to be wildly wrong, but before the HAIR patch its wrongness was in most cases hidden by another bug.

Fixes #37598.

r? @nikomatsakis
2016-11-09 15:13:58 -08:00
bors
da2ce22768 Auto merge of #37670 - eddyb:rollup, r=eddyb
Rollup of 15 pull requests

- Successful merges: #36868, #37134, #37229, #37250, #37370, #37428, #37432, #37472, #37524, #37614, #37622, #37627, #37636, #37644, #37654
- Failed merges: #37463, #37542, #37645
2016-11-09 11:58:25 -08:00
Eduard-Mihai Burtescu
60c74b76c4 Rollup merge of #37654 - michaelwoerister:test-let-ich, r=nikomatsakis
ICH: Add tests for let- and match-expressions.

r? @nikomatsakis
2016-11-09 20:51:19 +02:00
Eduard-Mihai Burtescu
a41a87eb74 Rollup merge of #37644 - nrc:save-derive-span, r=eddyb
save-analysis: don't choke on stripped doc attributes
2016-11-09 20:51:19 +02:00