Commit graph

10303 commits

Author SHA1 Message Date
Tamir Duberstein
54de911f35 #10381: Warnings 2015-04-28 17:51:43 -07:00
Tamir Duberstein
9768447b64 Reference the correct issue and clarify failure 2015-04-28 17:51:01 -07:00
Tamir Duberstein
41ff911ae8 #10393 & #13206: Warnings 2015-04-28 17:49:22 -07:00
bors
8871c17b76 Auto merge of #24781 - bluss:vec-drain-range, r=alexcrichton
Implement Vec::drain(\<range type\>) from rust-lang/rfcs#574, tracking issue #23055.

This is a big step forward for vector usability. This is an introduction of an API for removing a range of *m* consecutive elements from a vector, as efficently as possible.

New features:

- Introduce trait `std::collections::range::RangeArgument` implemented by all four built-in range types.
- Change `Vec::drain()` to use `Vec::drain<R: RangeArgument>(R)`

Implementation notes:

- Use @Gankro's idea for memory safety: Use `set_len` on the source vector when creating the iterator, to make sure that the part of the vector that will be modified is unreachable. Fix up things in Drain's destructor — but even if it doesn't run, we don't expose any moved-out-from slots of the vector.
- This `.drain<R>(R)` very close to how it is specified in the RFC.
- Introduced as unstable
- Drain reuses the slice iterator — copying and pasting the same iterator pointer arithmetic again felt very bad
- The `usize` index as a range argument in the RFC is not included. The ranges trait would have to change to accomodate it.

Please help me with:

- Name and location of the new ranges trait.
- Design of the ranges trait
- Understanding Niko's comments about variance (Note: for a long time I was using a straight up &mut Vec in the iterator, but I changed this to permit reusing the slice iterator).

Previous PR and discussion: #23071
2015-04-28 22:13:42 +00:00
bors
cadc67e8fd Auto merge of #24777 - alexcrichton:musl, r=brson
These commits build on [some great work on reddit](http://www.reddit.com/r/rust/comments/33boew/weekend_experiment_link_rust_programs_against/) for adding MUSL support to the compiler. This goal of this PR is to enable a `--target x86_64-unknown-linux-musl` argument to the compiler to work A-OK. The outcome here is that there are 0 compile-time dependencies for a MUSL-targeting build *except for a linker*. Currently this also assumes that MUSL is being used for statically linked binaries so there is no support for dynamically linked binaries with MUSL.

MUSL support largely just entailed munging around with the linker and where libs are located, and the major highlights are:

* The entirety of `libc.a` is included in `liblibc.rlib` (statically included as an archive).
* The entirety of `libunwind.a` is included in `libstd.rlib` (like with liblibc).
* The target specification for MUSL passes a number of ... flavorful options! Each option is documented in the relevant commit.
* The entire test suite currently passes with MUSL as a target, except for:
  * Dynamic linking tests are all ignored as it's not supported with MUSL
  * Stack overflow detection is not working MUSL yet (I'm not sure why)
* There is a language change included in this PR to add a `target_env` `#[cfg]` directive. This is used to conditionally build code for only MUSL (or for linux distros not MUSL). I highly suspect that this will also be used by Windows to target MSVC instead of a MinGW-based toolchain.

To build a compiler targeting MUSL you need to follow these steps:

1. Clone the current MUSL repo from `git://git.musl-libc.org/musl`. Build this as usual and install it.
2. Clone and build LLVM's [libcxxabi](http://libcxxabi.llvm.org/) library. Only the `libunwind.a` artifact is needed. I have tried using upstream libunwind's source repo but I have not gotten unwinding to work with it unfortunately. Move `libunwind.a` adjacent to MUSL's `libc.a`
3. Configure a Rust checkout with `--target=x86_64-unknown-linux-musl --musl-root=$MUSL_ROOT` where `MUSL_ROOT` is where you installed MUSL in step 1.

I hope to improve building a copy of libunwind as it's still a little sketchy and difficult to do today, but other than that everything should "just work"! This PR is not intended to include 100% comprehensive support for MUSL, as future modifications will probably be necessary.
2015-04-28 20:12:59 +00:00
Alex Crichton
247842b741 test: Fix some tests to run with musl
There were a few test cases to fix:

* Dynamic libraries are not supported with MUSL right now, so all of those
  related test which force or require dylibs are ignored.
* Looks like the default stack for MUSL is smaller than glibc, so a few stack
  allocations in benchmarks were boxed up (shouldn't have a perf impact).
* Some small linkage tweaks here and there
* Out-of-stack detection does not currently work with MUSL
2015-04-28 09:35:22 -07:00
Felix S. Klock II
1f79348293 regression test for Issue 24895. 2015-04-28 17:51:08 +02:00
Ulrik Sverdrup
b475fc7d6a collections: Implement vec::drain(range) according to RFC 574
Old `.drain()` on vec is performed using `.drain(..)` now.

`.drain(range)` is unstable and under feature(collections_drain)

[breaking-change]
2015-04-28 11:38:33 +02:00
bors
da2276e293 Auto merge of #24835 - rprichard:rfail-full, r=alexcrichton
This commit gets `make check-stage1` working again after #24718.

cc @tamird

r? @alexcrichton
2015-04-28 05:37:48 +00:00
bors
2b8c9b12f9 Auto merge of #24478 - alexcrichton:issue-24313, r=aturon
Inspecting the current thread's info may not always work due to the TLS value
having been destroyed (or is actively being destroyed). The code for printing
a panic message assumed, however, that it could acquire the thread's name
through this method.

Instead this commit propagates the `Option` outwards to allow the
`std::panicking` module to handle the case where the current thread isn't
present.

While it solves the immediate issue of #24313, there is still another underlying
issue of panicking destructors in thread locals will abort the process.

Closes #24313
2015-04-28 00:44:56 +00:00
Alex Crichton
d98ab4faf8 std: Don't assume thread::current() works on panic
Inspecting the current thread's info may not always work due to the TLS value
having been destroyed (or is actively being destroyed). The code for printing
a panic message assumed, however, that it could acquire the thread's name
through this method.

Instead this commit propagates the `Option` outwards to allow the
`std::panicking` module to handle the case where the current thread isn't
present.

While it solves the immediate issue of #24313, there is still another underlying
issue of panicking destructors in thread locals will abort the process.

Closes #24313
2015-04-27 16:15:36 -07:00
bors
9c88f3be12 Auto merge of #24765 - pnkfelix:fsk-enum-swapindrop, r=nikomatsakis
Inspect enum discriminant *after* calling its destructor

Includes some drive-by cleanup (e.g. changed some field and method names to reflect fill-on-drop; added comments about zero-variant enums being classified as `_match::Single`).

Probably the most invasive change was the expansion of the maps `available_drop_glues` and `drop_glues` to now hold two different kinds of drop glues; there is the (old) normal drop glue, and there is (new) drop-contents glue that jumps straight to dropping the contents of a struct or enum, skipping its destructor.

 * For all types that do not have user-defined Drop implementations, the normal glue is generated as usual (i.e. recursively dropping the fields of the data structure).

  (And this actually is exactly what the newly-added drop-contents glue does as well.)

 * For types that have user-defined Drop implementations, the "normal" drop glue now schedules a cleanup before invoking the `Drop::drop` method that will call the drop-contents glue after that invocation returns.

Fix #23611.

----

Is this a breaking change?  The prior behavior was totally unsound, and it seems unreasonable that anyone was actually relying on it.

Nonetheless, since there is a user-visible change to the language semantics, I guess I will conservatively mark this as a:

[breaking-change]

(To see an example of what sort of user-visible change this causes, see the comments in the regression test.)
2015-04-27 20:46:48 +00:00
bors
857ef6e272 Auto merge of #23606 - quantheory:associated_const, r=nikomatsakis
Closes #17841.

The majority of the work should be done, e.g. trait and inherent impls, different forms of UFCS syntax, defaults, and cross-crate usage. It's probably enough to replace the constants in `f32`, `i8`, and so on, or close to good enough.

There is still some significant functionality missing from this commit:

 - ~~Associated consts can't be used in match patterns at all. This is simply because I haven't updated the relevant bits in the parser or `resolve`, but it's *probably* not hard to get working.~~
 - Since you can't select an impl for trait-associated consts until partway through type-checking, there are some problems with code that assumes that you can check constants earlier. Associated consts that are not in inherent impls cause ICEs if you try to use them in array sizes or match ranges. For similar reasons, `check_static_recursion` doesn't check them properly, so the stack goes ka-blooey if you use an associated constant that's recursively defined. That's a bit trickier to solve; I'm not entirely sure what the best approach is yet.
 - Dealing with consts associated with type parameters will raise some new issues (e.g. if you have a `T: Int` type parameter and want to use `<T>::ZERO`). See rust-lang/rfcs#865.
 - ~~Unused associated consts don't seem to trigger the `dead_code` lint when they should. Probably easy to fix.~~

Also, this is the first time I've been spelunking in rustc to such a large extent, so I've probably done some silly things in a couple of places.
2015-04-27 16:45:21 +00:00
bors
bba18fec45 Auto merge of #24829 - jooert:fix22673, r=pnkfelix 2015-04-26 19:06:38 +00:00
bors
b29c2efd42 Auto merge of #24828 - jooert:fix23253, r=pnkfelix
r? @alexcrichton
2015-04-26 17:04:24 +00:00
Ryan Prichard
142aa0a0ce Move qquote.rs from run-fail to run-fail-fulldeps 2015-04-26 06:05:39 -07:00
bors
d3724342a3 Auto merge of #24807 - luqmana:nullable-enum-opt-dst-raw-pointers, r=jakub-
Fixes #23433.
2015-04-26 13:03:31 +00:00
bors
6365080c5c Auto merge of #23085 - goffrie:interpolating-quote, r=huonw
This changes the `ToTokens` implementations for expressions, statements, etc. with almost-trivial ones that produce `Interpolated(*Nt(...))` pseudo-tokens. In this way, quasiquote now works the same way as macros do: already-parsed AST fragments are used as-is, not reparsed.

The `ToSource` trait is removed. Quasiquote no longer involves pretty-printing at all, which removes the need for the `encode_with_hygiene` hack. All associated machinery is removed.

New `Nonterminal`s are added: NtArm, NtImplItem, and NtTraitItem. These are just for quasiquote, not macros.

`ToTokens` is no longer implemented for `Arg` (although this could be added again) and `Generics` (which I don't think makes sense).

This breaks any compiler extensions that relied on the ability of `ToTokens` to turn AST fragments back into inspectable token trees. For this reason, this closes #16987.

As such, this is a [breaking-change].

Fixes #16472.
Fixes #15962.
Fixes #17397.
Fixes #16617.
2015-04-26 09:52:28 +00:00
bors
b0043db465 Auto merge of #24367 - ebfull:fix_ice_cat_expr, r=pnkfelix
An actual typeck error is the cause of many failed compilations but an
unrelated bug is being reported instead. It is triggered because a typeck
error is presumably not yet identified during compiler execution, which
would normally bypass an invariant in the presence of other errors. In
this particular situation, we delay the reporting of the bug until
abort_if_errors().

Closes #23827, closes #24356, closes #23041, closes #22897, closes #23966,
closes #24013, and closes #23729

**There is at least one situation where this bug may still be genuinely
triggered (#23437).**
2015-04-26 05:32:16 +00:00
Geoffry Song
24ef905273 Remove FakeExtCtxt from qquote tests.
Instead create an ExtCtxt structure.
2015-04-26 01:09:36 -04:00
Geoffry Song
ea892dc70b Remove remaining tests for hygiene-encoded identifiers.
Such things no longer exist.
2015-04-25 21:42:10 -04:00
Geoffry Song
2d9831dea5 Interpolate AST nodes in quasiquote.
This changes the `ToTokens` implementations for expressions, statements,
etc. with almost-trivial ones that produce `Interpolated(*Nt(...))`
pseudo-tokens. In this way, quasiquote now works the same way as macros
do: already-parsed AST fragments are used as-is, not reparsed.

The `ToSource` trait is removed. Quasiquote no longer involves
pretty-printing at all, which removes the need for the
`encode_with_hygiene` hack. All associated machinery is removed.

A new `Nonterminal` is added, NtArm, which the parser now interpolates.
This is just for quasiquote, not macros (although it could be in the
future).

`ToTokens` is no longer implemented for `Arg` (although this could be
added again) and `Generics` (which I don't think makes sense).

This breaks any compiler extensions that relied on the ability of
`ToTokens` to turn AST fragments back into inspectable token trees. For
this reason, this closes #16987.

As such, this is a [breaking-change].

Fixes #16472.
Fixes #15962.
Fixes #17397.
Fixes #16617.
2015-04-25 21:42:10 -04:00
bors
da623844a9 Auto merge of #24718 - tamird:fix-quote-tests, r=alexcrichton
Sniped from @rprichard's work in #24537. r? @alexcrichton
2015-04-25 23:40:10 +00:00
Johannes Oertel
6f7b5b1910 Add regression test for #22673. 2015-04-26 01:31:45 +02:00
Johannes Oertel
d30a3aac04 Add regression test for #23253. 2015-04-26 00:52:19 +02:00
bors
00c48d3779 Auto merge of #24547 - bombless:comma, r=pnkfelix
Closes #20616 
It breaks code such as <c64feb6341/src/librustc_typeck/check/method/suggest.rs (L367)>, so this is a [breaking-change], you have to add missing comma after the last lifetime arguement now.
2015-04-25 21:44:50 +00:00
Tamir Duberstein
beb373b317 qquote-2.rs -> run-fail/qquote.rs
Re-enables the test.
2015-04-25 14:40:52 -07:00
Tamir Duberstein
00cb5c40a2 qquote-1.rs -> compile-fail-fulldeps/qquote.rs
Re-enables the test.
2015-04-25 14:40:51 -07:00
Tamir Duberstein
8ab8619d20 Unrot and re-enable run-pass-fulldeps/qquote.rs 2015-04-25 14:14:31 -07:00
Luqman Aden
34601afd57 librustc_trans: Don't ICE on unsized type behind raw pointer in nullable pointer opt. 2015-04-25 07:47:45 -04:00
bors
e3d00a4980 Auto merge of #24783 - jooert:unittestguidelines, r=alexcrichton
Changes the style guidelines regarding unit tests to recommend using a sub-module named "tests" instead of "test" for unit tests as "test" might clash with imports of libtest (see #23870, #24030 and http://users.rust-lang.org/t/guidelines-naming-of-unit-test-module/1078 for previous discussions).

r? @alexcrichton
2015-04-25 09:55:06 +00:00
Sean Patrick Santos
4c0ac6d5ef Remove obsolete "MarkerTrait" from tests. 2015-04-24 22:58:40 -06:00
York Xiang
0ad48e41c1 Fix #20616 2015-04-25 11:29:28 +08:00
Steve Klabnik
142acce5b1 Rollup merge of #24751 - lstat:feature-gate-22820-dups, r=brson
As part of the audit for #22820 the following duplicate feature
gate tests were removed:

* `box_patterns`
* `simd_ffi`

These tests for `box_patterns` and `simd_ffi` were added in #23578,
however there were existing tests in #20723 and #21233 respectively.

r? @nrc
2015-04-24 22:54:25 -04:00
Steve Klabnik
13854722fa Rollup merge of #24749 - lstat:feature-gate-22820, r=nrc
As part of the audit for #22820 the following feature gate tests have been
added:

* `negate_unsigned`
* `on_unimplemented`
* `optin_builtin_traits`
* `plugin`
* `rustc_attrs`
* `rustc_diagnostic_macros`
* `slice_patterns`

In addition some feature gate error message typos fixed.
2015-04-24 22:54:25 -04:00
bors
f9e53c7f2c Auto merge of #24553 - nikomatsakis:issue-22779-overconstrained-impl, r=pnkfelix
Rather than storing the relations between free-regions in a global
table, introduce a `FreeRegionMap` data structure. regionck computes the
`FreeRegionMap` for each fn and stores the result into the tcx so that
borrowck can use it (this could perhaps be refactored to have borrowck
recompute the map, but it's a bid tedious to recompute due to the
interaction of closures and free fns). The main reason to do this is
because of #22779 -- using a global table was incorrect because when
validating impl method signatures, we want to use the free region
relationships from the *trait*, not the impl.

Fixes #22779.
2015-04-24 21:07:41 +00:00
Johannes Oertel
07cc7d9960 Change name of unit test sub-module to "tests".
Changes the style guidelines regarding unit tests to recommend using a
sub-module named "tests" instead of "test" for unit tests as "test"
might clash with imports of libtest.
2015-04-24 23:06:41 +02:00
Sean Bowe
be1117113f Split up tests, reduce coverage 2015-04-24 12:34:27 -06:00
Felix S. Klock II
d5acb55c59 regression test. 2015-04-24 09:39:15 +02:00
Sean Patrick Santos
b1db4ec3d0 Feature-gate associated constants. 2015-04-23 21:02:29 -06:00
Sean Patrick Santos
29eb550ee6 Get associated consts working in match patterns. 2015-04-23 21:02:29 -06:00
Sean Patrick Santos
91ae5e31ab Fix dead code check for associated const impls. 2015-04-23 21:02:28 -06:00
Sean Patrick Santos
7f78887547 Add previously omitted associated const tests. 2015-04-23 21:02:27 -06:00
Sean Patrick Santos
3d9b5d0424 Fix a number of bugs that interfered with cross-crate usage of associated consts. 2015-04-23 21:02:27 -06:00
Sean Patrick Santos
7129e8815e Functional changes for associated constants. Cross-crate usage of associated constants is not yet working. 2015-04-23 21:02:26 -06:00
Luke Gallagher
f1b40d733e Remove duplicate feature gate tests
As part of the audit for #22820 the following duplicate feature
gate tests were removed:

* `box_patterns`
* `simd_ffi`

These tests for `box_patterns` and `simd_ffi` were added in #23578,
however there were existing tests in #20723 and #21233 respectively.
2015-04-24 10:16:59 +10:00
Luke Gallagher
0cae31513b Add feature gate tests
As part of the audit for #22820 the following feature gate tests have
been added:

* `rustc_diagnostic_macros`

/cc #19624
2015-04-24 10:10:48 +10:00
Luke Gallagher
03ff28135c Add feature gate tests
As part of the audit for #22820 the following feature gate tests have
been added:

* `negate_unsigned`
* `on_unimplemented`
* `optin_builtin_traits`
* `plugin`
* `rustc_attrs`
* `slice_patterns`
2015-04-24 10:10:48 +10:00
bors
69e47c77b2 Auto merge of #24537 - rprichard:fix-parallel-check, r=alexcrichton
This required fixing the `pretty-rpass-full` tests to have the same `$$(CSREQ$(1)_T_$(2)_H_$(3))`  dependencies as the `rpass-full` and `cfail-full` tests.  It also required fixing the `run-make/simd-ffi` test to use unique names for its output files.
2015-04-23 17:32:16 +00:00
Ryan Prichard
89b6f397c5 Replace ignore-android with ignore-cross-compile in rustdoc tests
The problem is that rustdoc searches for external crates using the host
triple, not the target triple. It's actually unclear to me whether this is
correct behavior or not, but it is necessary to get cross-compiled tests
working.
2015-04-22 20:32:14 -07:00