Commit Graph

33524 Commits

Author SHA1 Message Date
bors
4b064a59cc auto merge of #18096 : Gankro/rust/ganksy-is-dum, r=steveklabnik
Fixes #18010

*phew* that was a lot of work. 😓
2014-10-18 08:27:13 +00:00
Eduardo Bautista
cef0b55c78 Fix misaligned carot in guide 2014-10-18 01:34:50 -05:00
bors
4480caf2a4 auto merge of #18024 : phungleson/rust/fix-var-name-in-doc, r=brson
Make the doc more consistent & runnable.

* Use `_index` instead of `_rhs` when appropriate.
* Use `_from` and `_to` to avoid warning.
* Remove unnecessary `::core::ops`
2014-10-18 06:22:15 +00:00
bors
2c0f87610d auto merge of #18022 : nikomatsakis/rust/issue-18019, r=pcwalton
Only consider impliciy unboxed closure impl if the obligation is actually for `Fn`, `FnMut`, or `FnOnce`.

Fixes #18019

r? @pcwalton
2014-10-18 04:32:16 +00:00
bors
1270f8e77a auto merge of #17955 : rjz/rust/tweak-tasks-guide, r=brson 2014-10-18 02:37:16 +00:00
bors
222ae8b9bb auto merge of #17815 : typelist/rust/recursive-structs, r=brson
The representability-checking routine ```is_type_representable``` failed to detect structural recursion in some cases, leading to stack overflow later on.

The first problem was in the loop in the ```find_nonrepresentable``` function. We were improperly terminating the iteration if we saw a ```ContainsRecursive``` condition. We should have kept going in case a later member of the struct (or enum, etc) being examined was ```SelfRecursive```. The example from #17431 triggered this issue:

```rust
use std::sync::Mutex;
struct Foo { foo: Mutex<Option<Foo>> }
impl Foo { fn bar(self) {} }
fn main() {}
```

I'm not 100% sure, but I think the ```ty_enum``` case of ```fn type_structurally_recursive``` had a similar problem, since it could ```break``` on ```ContainsRecursive``` before looking at all variants. I've replaced this with a ```flat_map``` call.

The second problem was that we were failing to identify code like ```struct Foo { foo: Option<Option<Foo>> }``` as SelfRecursive, even though we correctly identified ```struct Foo { foo: Option<Foo> }```. This was caused by using DefId's for the ```ContainsRecursive``` check, which meant the nested ```Option```s were identified as illegally recursive (because ```ContainsRecursive``` is not an error, we would then keep compiling and eventually hit a stack overflow).

In order to make sure that we can recurse through the different ```Option``` invocations, I've changed the type of ```seen``` from ```Vec<DefId>``` to ```Vec<t>``` and added a separate ```same_type``` function to check whether two types are the same when generics are taken into account. Now we only return ```ContainsRecursive``` when this stricter check is satisfied. (There's probably a better way to do this, and I'm not sure my code is entirely correct--but my knowledge of rustc internals is pretty limited, so any help here would be appreciated!)

Note that the ```SelfRecursive``` check is still comparing ```DefId```s--this is necessary to prevent code like this from being allowed:

```rust
struct Foo { x: Bar<Foo> }
struct Bar<T> { x: Bar<Foo> }
```

All four of the new ```issue-17431``` tests cause infinite recursion on master, and errors with this pull request. I wrote the extra ```issue-3008-4.rs``` test to make sure I wasn't introducing a regression.

Fixes #17431.
2014-10-18 00:47:22 +00:00
bors
9b80efd74e auto merge of #17009 : kballard/rust/install_no_sudo, r=pnkfelix
When running `sudo make install`, we only want to run the actual install
as root, the building of the documentation and the distribution folder
should happen as the non-root user.

Related to #13728.
2014-10-17 22:57:30 +00:00
bors
4694b99102 auto merge of #16855 : P1start/rust/help-messages, r=brson
This adds ‘help’ diagnostic messages to rustc. This is used for anything that provides help to the user, particularly the `--explain` messages that were previously integrated into the relevant error message.

They look like this:

```
match.rs:10:13: 10:14 error: unreachable pattern [E0001]
match.rs:10             1 => {},
                        ^
match.rs:3:1: 3:38 note: in expansion of foo!
match.rs:7:5: 20:2 note: expansion site
match.rs:10:13: 10:14 help: pass `--explain E0001` to see a detailed explanation
```

(`help` is coloured cyan.) Adding these errors on a separate line stops the lines from being too long, as discussed in #16619.
2014-10-17 20:32:22 +00:00
Felix S. Klock II
88de96178f Check for borrow of local variable introduced within static block.
(Rather than ICE on it.)

Fix #18118.
2014-10-17 18:15:57 +02:00
Björn Steinbrink
ee985a5a51 Update LLVM to get slightly better memcpy elision 2014-10-17 17:16:18 +02:00
bors
97bf93e405 auto merge of #18093 : steveklabnik/rust/remove_gc_reference, r=alexcrichton 2014-10-17 14:17:34 +00:00
jrincayc
ce83a24b5f Use match expression directly in guide.md
Use a match expression directly in the println statement, instead of creating a second variable.
2014-10-17 07:00:29 -06:00
Niko Matsakis
f4a7d32c8b Correct a test. The error message changed because, with this fix, we
detected (correctly) that there was only one impl and hence ignored the
`Self` bound completely. I (semi-arbitrarily) elected to delect the
impl, forcing the trait matcher to be more conservative and lean on the
where clauses in scope, yielding the original error message.
2014-10-17 08:04:34 -04:00
Ariel Ben-Yehuda
3ce5a9539f Make the tests green as they should on 32-bit architectures
On 32-bit architectures, the size calculations on two of the tests wrap-around
in typeck, which gives the relevant arrays a size of 0, which is (correctly)
successfully allocated.
2014-10-17 12:37:27 +03:00
bors
93e589c872 auto merge of #18089 : gamazeps/rust/small-bitv-cleanup, r=alexcrichton
I was going to write some doc in order to remove the #[allow(missing_doc)] but there was actually none missing.
I also removed a warning i didn't see in my last commit  #18018
Linked to #18009
2014-10-17 09:22:14 +00:00
bors
fa59bb0869 auto merge of #18052 : IvanUkhov/rust/raw-byte-string-literals, r=aturon
Hello,


The pull request fixes a typo in the description of raw string literals in [reference.md](https://github.com/rust-lang/rust/blob/master/src/doc/reference.md#byte-and-byte-string-literals).


Regards,
Ivan
2014-10-17 07:32:17 +00:00
bors
0f8df80804 auto merge of #18056 : TeXitoi/rust/shootout-reverse-complement-improvement, r=alexcrichton
This is some improvement as asked and discused here: http://www.reddit.com/r/rust/comments/2j2ij3/benchmark_improvement_reverse_compliment/

Before:
```
real    0m0.396s
user    0m0.280s
sys     0m0.112s
```
after:
```
real    0m0.293s
user    0m0.216s
sys     0m0.076s
```
best C version:
```
real    0m0.135s
user    0m0.132s
sys     0m0.060s
```

Another possibility will be to add a `DoubleEndedIterator::next_two_side()` with a deffault implementation, and specialising it for slices, and use it here (`MutableSlice::reverse()` can then become safe). This benchmark will then be safe.

What do you think?
2014-10-17 05:42:19 +00:00
Brian Koropoff
f4cb9f4663 Add regression test for issue #16739 2014-10-16 21:57:19 -07:00
Brian Koropoff
4a4a4347cb Fix translation of unboxing shim for rust-call ABI methods
When translating the unboxing shim, account for the fact that the shim
translation has already performed the necessary unboxing of input
types and values when forwarding to the shimmed function.  This
prevents ICEing or generating incorrect code.

Closes #16739
2014-10-16 21:57:08 -07:00
Brian Koropoff
0e68c63f3f Add regression test for issue #16939 2014-10-16 19:09:50 -07:00
bors
3dec727297 auto merge of #17869 : bkoropoff/rust/bound-all-the-upvars, r=nikomatsakis
This PR is based on #17784, which fixes closure soundness problems in borrowck.  Only the last two commits are unique to this PR.

My understanding of regionck is still evolving, so I'm not sure if this is the right approach.  Feedback is appreciated.

- In `link_reborrowed_region`, we account for the ability of upvars to
  change their mutability due to later processing.  A map of recursive
  region links we may want to establish in the future is maintained,
  with the links being established when the mutability of the borrow
  is adjusted.
- When asked to establish a region link for an upvar, we link it to
  the region of the closure body.  This creates the necessary
  constraint to stop unsound reborrows from the closure environment.

This partially (maybe completely) solves issue #17403.  Remaining work:

- This is only known to help with by-ref upvars.  I have not looked at
  by-value upvars yet to see if they can cause problems.
- The error diagnostics that result from failed region inference are
  pretty inscrutible.
2014-10-17 02:07:24 +00:00
Brian Koropoff
90bf7cdd79 Fix ICE in overloaded call with incorrect arity
When an overloaded call expression has parameters but the function
object takes none, construct an array of formal argument types with
the arity of the call expression so that we don't fail by indexing out
of bounds later.

Closes #16939
2014-10-16 19:03:29 -07:00
Brian Koropoff
fdd69accd0 Add failure tests for moving out of unboxed closure environments 2014-10-16 17:29:44 -07:00
Brian Koropoff
a5e1aeb140 Add regression test for issue #17403 2014-10-16 17:29:44 -07:00
Brian Koropoff
a8f90bcb18 Update test for issue 17780 since diagnostic message have changed
The test was also renamed to be more descriptive.
2014-10-16 17:29:44 -07:00
Brian Koropoff
9094aabb12 Fix soundness bug in treatment of closure upvars by regionck
- Unify the representations of `cat_upvar` and `cat_copied_upvar`
- In `link_reborrowed_region`, account for the ability of upvars to
  change their mutability due to later processing.  A map of recursive
  region links we may want to establish in the future is maintained,
  with the links being established when the kind of the borrow is
  adjusted.
- When categorizing upvars, add an explicit deref that represents the
  closure environment pointer for closures that do not take the
  environment by value.  The region for the implicit pointer is an
  anonymous free region type introduced for this purpose.  This
  creates the necessary constraint to prevent unsound reborrows from
  the environment.
- Add a note to categorizations to make it easier to tell when extra
  dereferences have been inserted by an upvar without having to
  perform deep pattern matching.
- Adjust borrowck to deal with the changes.  Where `cat_upvar` and
  `cat_copied_upvar` were previously treated differently, they are
  now both treated roughly like local variables within the closure
  body, as the explicit derefs now ensure proper behavior.  However,
  error diagnostics had to be changed to explicitly look through the
  extra dereferences to avoid producing confusing messages about
  references not present in the source code.

Closes issue #17403.  Remaining work:

- The error diagnostics that result from failed region inference are
  pretty inscrutible and should be improved.

Code like the following is now rejected:

    let mut x = 0u;
    let f = || &mut x;
    let y = f();
    let z = f(); // multiple mutable references to the same location

This also breaks code that uses a similar construction even if it does
not go on to violate aliasability semantics.  Such code will need to
be reworked in some way, such as by using a capture-by-value closure
type.

[breaking-change]
2014-10-16 17:29:44 -07:00
bors
1600e0b93c auto merge of #17998 : rapha/rust/master, r=alexcrichton 2014-10-17 00:17:25 +00:00
Niko Matsakis
7876cf9ca9 Check object lifetime bounds in coercions, not just trait bounds. Fixes #18055. 2014-10-16 18:58:42 -04:00
Jakub Wieczorek
64716d529a Add tests for a few fixed issues 2014-10-17 00:27:12 +02:00
Patrick Walton
416e6ecf8c libstd: Inline more methods on bitflags.
Servo really wants this.
2014-10-16 15:25:46 -07:00
bors
1868a262f3 auto merge of #17989 : alexcrichton/rust/spectralnorm, r=thestinger
This improves the spectralnorm shootout benchmark through a few vectors after
looking at the leading C implementation:

* The simd-based f64x2 is now used to parallelize a few computations
* RWLock usage has been removed. A custom `parallel` function was added as a
  form of stack-based fork-join parallelism. I found that the contention on the
  locks was high as well as hindering other optimizations.

This does, however, introduce one `unsafe` block into the benchmarks, which
previously had none.

In terms of timings, the before and after numbers are:

```
$ time ./shootout-spectralnorm-before
./shootout-spectralnorm-before  2.07s user 0.71s system 324% cpu 0.857 total
$ time ./shootout-spectralnorm-before 5500
./shootout-spectralnorm-before 5500  11.88s user 1.13s system 459% cpu 2.830 total
$ time ./shootout-spectralnorm-after
./shootout-spectralnorm-after  0.58s user 0.01s system 280% cpu 0.210 tota
$ time ./shootout-spectralnorm-after 5500
./shootout-spectralnorm-after 5500  3.55s user 0.01s system 455% cpu 0.783 total
```
2014-10-16 22:17:25 +00:00
Ariel Ben-Yehuda
50db061173 fix test patterns - should rebase the commits properly 2014-10-16 23:36:00 +03:00
bors
9d5fa7ac3b auto merge of #17947 : lukemetz/rust/master, r=aturon
AsciiStr::to_lower is now AsciiStr::to_lowercase and AsciiStr::to_upper is AsciiStr::to_uppercase to match Ascii trait.

Part of issue #17790.

This is my first pull request so let me know if anything is incorrect.

Thanks!

[breaking-changes]
2014-10-16 20:22:26 +00:00
Jakub Wieczorek
f3d46bda65 Unignore a few tests
Also, remove one that has an exact duplicate.
2014-10-16 21:40:12 +02:00
Steve Klabnik
f68d4d39f7 don't refer to the nonexistant gc 2014-10-16 14:10:18 -04:00
bors
8b97973971 auto merge of #18064 : luqmana/rust/remove-reflection, r=nick29581
Out goes reflection! This means your code will break if you used the `:?` format specifier, anything else from libdebug, or the `visit_tydesc` intrinsic directly.

Closes #18046.

[breaking-change]
2014-10-16 17:52:25 +00:00
Alexis Beingessner
ae8d42937d Fix broken link in libcollections docs
Fixes #18010
2014-10-16 13:26:52 -04:00
Luqman Aden
7899248504 librustc: Remove special case for old reflection visitor. 2014-10-16 11:15:36 -04:00
Luqman Aden
6f9b3b574b libsyntax: Don't accept :? as a format specifier. 2014-10-16 11:15:36 -04:00
Luqman Aden
3410c52eec librustc: Remove trans::reflect and the opaque and ty_visitor lang items. 2014-10-16 11:15:36 -04:00
Luqman Aden
7210a5af87 librustc: Stop generating visit glue and remove from TyDesc. 2014-10-16 11:15:36 -04:00
Luqman Aden
7a4122ac67 librustc: Remove visit_tydesc intrinsic. 2014-10-16 11:15:35 -04:00
Luqman Aden
ce6226e6c9 libnative: Remove all uses of {:?}. 2014-10-16 11:15:35 -04:00
Luqman Aden
3ef9aa01af libcollections: Remove all uses of {:?}. 2014-10-16 11:15:35 -04:00
Luqman Aden
322aedd462 librustdoc: Remove all uses of {:?}. 2014-10-16 11:15:35 -04:00
Luqman Aden
c5a8bad1ff liballoc: Remove all uses of {:?}. 2014-10-16 11:15:35 -04:00
Luqman Aden
3bab3dc574 libstd: Remove all uses of {:?}. 2014-10-16 11:15:35 -04:00
Luqman Aden
814586be57 librustc: Remove all uses of {:?}. 2014-10-16 11:15:34 -04:00
Luqman Aden
26e547af5d libsyntax: Remove all uses of {:?}. 2014-10-16 11:15:34 -04:00
Luqman Aden
38aca17c47 Remove libdebug and update tests. 2014-10-16 11:15:34 -04:00