Commit Graph

8185 Commits

Author SHA1 Message Date
Brian Koropoff
6b93b4eb7c Add regression test for #18487 2014-10-31 23:42:48 -07:00
bors
51a25c7f96 auto merge of #18422 : michaelwoerister/rust/windows-freeze-fix, r=alexcrichton
On some Windows versions of GDB this is more stable than setting breakpoints via function names. This is also something I wanted to do for some time now because it makes the tests more consistent.

@brson:
These changes are in response to issue #17540. It works on my machine with the toolchain mentioned in the issue. In order to find out if the problem is really worked around, we also need to make the build bots use the newer GDB version again.
2014-11-01 03:56:44 +00:00
Steven Fackler
d7ff7da65a First stage of enum namespacing changes 2014-10-31 20:43:35 -07:00
bors
1442235d3f auto merge of #18371 : nikomatsakis/rust/issue-18262, r=pcwalton
Teach variance checker about the lifetime bounds that appear in trait object types.

[breaking-change] This patch fixes a hole in the type system which resulted in lifetime parameters that were only used in trait objects not being checked. It's hard to characterize precisely the changes that might be needed to fix target code.

cc #18262 (this fixes the test case by @jakub- but I am not sure if this is the same issue that @alexcrichton was reporting)

r? @pnkfelix 

Fixes #18205
2014-11-01 01:41:45 +00:00
Nick Cameron
2474d7d2c4 Rebasing and review changes 2014-11-01 11:05:12 +13:00
Nick Cameron
318472bea9 test 2014-11-01 11:05:12 +13:00
Niko Matsakis
9a5e7ba4c7 Teach variance checker about the lifetime bounds that appear in trait object types. 2014-10-31 17:39:41 -04:00
Niko Matsakis
6bf0dc849f Prefer where clauses to impls in trait resolution (not vice versa).
Fixes #18453.
2014-10-31 15:03:56 -04:00
Jakub Bukaj
d23d633eb8 Constants used in range patterns should not be considered unused 2014-10-31 19:14:57 +01:00
Michael Woerister
e06c338273 debuginfo: Enable some GDB tests on Windows. 2014-10-31 18:49:59 +01:00
Michael Woerister
54a5a2b365 debuginfo: Make GDB tests use line breakpoints like done in LLDB tests.
On some Windows versions of GDB this is more stable than setting breakpoints via function names.
2014-10-31 18:49:59 +01:00
bors
5e834243b6 auto merge of #18440 : japaric/rust/hash, r=alexcrichton
- The signature of the `*_equiv` methods of `HashMap` and similar structures have changed, and now require one less level of indirection. Change your code from:

``` rust
hashmap.find_equiv(&"Hello");
hashmap.find_equiv(&&[0u8, 1, 2]);
```

to:

``` rust
hashmap.find_equiv("Hello");
hashmap.find_equiv(&[0u8, 1, 2]);
```

- The generic parameter `T` of the `Hasher::hash<T>` method have become `Sized?`. Downstream code must add `Sized?` to that method in their implementations. For example:

``` rust
impl Hasher<FnvState> for FnvHasher {
    fn hash<T: Hash<FnvState>>(&self, t: &T) -> u64 { /* .. */ }
}
```

must be changed to:

``` rust
impl Hasher<FnvState> for FnvHasher {
    fn hash<Sized? T: Hash<FnvState>>(&self, t: &T) -> u64 { /* .. */ }
    //      ^^^^^^
}
```

[breaking-change]

---

After review I'll squash the commits and update the commit message with the above paragraph.

r? @aturon 
cc #16918
2014-10-31 17:11:43 +00:00
Eduard Burtescu
96ba514294 trans: use types from argument patterns instead of the function signature.
This fixes ICEs caused by late-bound lifetimes ending up in argument
datum types and being used in cleanup - user Drop impl's would then
fail to monomorphize if the type was used to look up the impl of a
method call - which happens in trans now, I presume for multidispatch.
2014-10-31 16:47:25 +02:00
Jorge Aparicio
1384a43db3 DSTify Hash
- The signature of the `*_equiv` methods of `HashMap` and similar structures
have changed, and now require one less level of indirection. Change your code
from:

```
hashmap.find_equiv(&"Hello");
hashmap.find_equiv(&&[0u8, 1, 2]);
```

to:

```
hashmap.find_equiv("Hello");
hashmap.find_equiv(&[0u8, 1, 2]);
```

- The generic parameter `T` of the `Hasher::hash<T>` method have become
`Sized?`. Downstream code must add `Sized?` to that method in their
implementations. For example:

```
impl Hasher<FnvState> for FnvHasher {
    fn hash<T: Hash<FnvState>>(&self, t: &T) -> u64 { /* .. */ }
}
```

must be changed to:

```
impl Hasher<FnvState> for FnvHasher {
    fn hash<Sized? T: Hash<FnvState>>(&self, t: &T) -> u64 { /* .. */ }
    //      ^^^^^^
}
```

[breaking-change]
2014-10-31 07:25:34 -05:00
bors
82045ca360 auto merge of #18264 : jakub-/rust/var-ids-in-error-messages, r=nikomatsakis
This PR aims to improve the readability of diagnostic messages that involve unresolved type variables. Currently, messages like the following:

```rust
mismatched types: expected `core::result::Result<uint,()>`, found `core::option::Option<<generic #1>>`
<anon>:6     let a: Result<uint, ()> = None;
                                       ^~~~
mismatched types: expected `&mut <generic #2>`, found `uint`
<anon>:7     f(42u);
               ^~~
```

tend to appear unapproachable to new users. [0] While specific type var IDs are valuable in
diagnostics that deal with more than one such variable, in practice many messages
only mention one. In those cases, leaving out the specific number makes the messages
slightly less terrifying.

```rust
mismatched types: expected `core::result::Result<uint, ()>`, found `core::option::Option<_>`
<anon>:6     let a: Result<uint, ()> = None;
                                       ^~~~
mismatched types: expected `&mut _`, found `uint`
<anon>:7     f(42u);
               ^~~
```

As you can see, I also tweaked the aesthetics slightly by changing type variables to use the type hole syntax _. For integer variables, the syntax used is:

```rust
mismatched types: expected `core::result::Result<uint, ()>`, found `core::option::Option<_#1i>`
<anon>:6     let a: Result<uint, ()> = Some(1);
```

and float variables:

```rust
mismatched types: expected `core::result::Result<uint, ()>`, found `core::option::Option<_#1f>`
<anon>:6     let a: Result<uint, ()> = Some(0.5);
```

[0] https://twitter.com/coda/status/517713085465772032

Closes https://github.com/rust-lang/rust/issues/2632.
Closes https://github.com/rust-lang/rust/issues/3404.
Closes https://github.com/rust-lang/rust/issues/18426.
2014-10-31 11:16:44 +00:00
bors
065caf34f5 auto merge of #18431 : japaric/rust/show, r=alexcrichton
r? @aturon 
cc #16918
2014-10-31 06:01:41 +00:00
Jorge Aparicio
eef7e97017 DSTify Show and all the other formatting traits 2014-10-30 23:28:11 -05:00
Alex Crichton
8e6e846d8a rustc: Implement -l and include! tweaks
This is an implementation of the rustc bits of [RFC 403][rfc]. This adds a new
flag to the compiler, `-l`, as well as tweaking the `include!` macro (and
related source-centric macros).

The compiler's new `-l` flag is used to link libraries in from the command line.
This flag stacks with `#[link]` directives already found in the program. The
purpose of this flag, also stated in the RFC, is to ease linking against native
libraries which have wildly different requirements across platforms and even
within distributions of one platform. This flag accepts a string of the form
`NAME[:KIND]` where `KIND` is optional or one of dylib, static, or framework.
This is roughly equivalent to if the equivalent `#[link]` directive were just
written in the program.

The `include!` macro has been modified to recursively expand macros to allow
usage of `concat!` as an argument, for example. The use case spelled out in RFC
403 was for `env!` to be used as well to include compile-time generated files.
The macro also received a bit of tweaking to allow it to expand to either an
expression or a series of items, depending on what context it's used in.

[rfc]: https://github.com/rust-lang/rfcs/pull/403
2014-10-30 19:02:11 -07:00
Alex Crichton
6fcba8826f Test fixes and rebase conflicts 2014-10-30 17:37:56 -07:00
Alex Crichton
5d6241ddaf rollup merge of #18430 : bjz/token
Conflicts:
	src/libsyntax/parse/parser.rs
2014-10-30 17:37:41 -07:00
Alex Crichton
00975e041d rollup merge of #18398 : aturon/lint-conventions-2
Conflicts:
	src/libcollections/slice.rs
	src/libcore/failure.rs
	src/libsyntax/parse/token.rs
	src/test/debuginfo/basic-types-mut-globals.rs
	src/test/debuginfo/simple-struct.rs
	src/test/debuginfo/trait-pointers.rs
2014-10-30 17:37:22 -07:00
Alex Crichton
f68dafa505 rollup merge of #18452 : bkoropoff/issue-18425 2014-10-30 17:36:49 -07:00
Alex Crichton
f3d72dc6a7 rollup merge of #18443 : alexcrichton/deref-vec-and-string 2014-10-30 17:36:49 -07:00
Jakub Bukaj
a2624fc908 Use the _ representation for integral variables as well 2014-10-30 21:38:20 +01:00
Jakub Bukaj
cac995444b Add a test for errors unifying an integer variable with a float variable 2014-10-30 21:38:20 +01:00
Jakub Bukaj
3cbc3f4802 Add a test for failure to unify type parameters 2014-10-30 21:38:20 +01:00
Alex Crichton
09669772db rollup merge of #18417 : P1start/lint-fixes 2014-10-30 09:29:24 -07:00
Alex Crichton
fc3ed0c808 rollup merge of #18413 : bkoropoff/issue-18412 2014-10-30 09:29:24 -07:00
Alex Crichton
ce63fbc7bd rollup merge of #18409 : gamazeps/issue15273 2014-10-30 09:29:24 -07:00
Alex Crichton
7577b6b678 rollup merge of #18383 : bkoropoff/issue-17361 2014-10-30 08:55:40 -07:00
bors
c40fc79a1a auto merge of #18279 : bgamari/rust/check-static-recursion, r=alexcrichton
I just found this patch which at some point solved a problem I encountered. Unfortunately I apparently dropped it before I managed to write a test case. I'll try to dig up the code that triggered the issue.
2014-10-30 09:12:05 +00:00
P1start
737e39696b Special-case some error messages about Sized
The error messages still aren’t as good as they were before DST, but they better
describe the actual problem, not mentioning `Sized` at all (because that bound
is normally implied, not explicitly stated).

Closes #17567.
Closes #18040.
Closes #18159.
2014-10-30 19:51:17 +13:00
P1start
14398f2929 Add a message for when a . follows a macro invocation 2014-10-30 19:51:16 +13:00
Brian Koropoff
88c8a54728 Add regression test for #18425 2014-10-29 21:48:15 -07:00
P1start
fb00015246 Improve the error message for parenthesised box expressions
Closes #15386.
2014-10-30 17:12:22 +13:00
Ben Gamari
b9251cded8 check_static_recursion: Handle foreign items 2014-10-29 23:24:04 -04:00
Nick Cameron
3adb7554d6 Rebasing fixes 2014-10-30 16:12:59 +13:00
Nick Cameron
c48a1ab158 changes to tests 2014-10-30 15:51:56 +13:00
Nick Cameron
1d500cfd74 changes to libs 2014-10-30 15:51:55 +13:00
Alex Crichton
8e9f8f924c collections: impl Deref for Vec/String
This commit adds the following impls:

    impl<T> Deref<[T]> for Vec<T>
    impl<T> DerefMut<[T]> for Vec<T>
    impl Deref<str> for String

This commit also removes all duplicated inherent methods from vectors and
strings as implementations will now silently call through to the slice
implementation. Some breakage occurred at std and beneath due to inherent
methods removed in favor of those in the slice traits and std doesn't use its
own prelude,

cc #18424
2014-10-29 18:48:30 -07:00
Jakub Bukaj
3db13f4892 Always drop var IDs from type variables modulo -Z verbose, per PR discussion 2014-10-29 23:56:22 +01:00
Jakub Bukaj
66fbe4c22c Update tests with the new diagnostic tweaks 2014-10-29 23:56:22 +01:00
Brendan Zabarauskas
936d999b52 Use common variants for open and close delimiters
This common representation for delimeters should make pattern matching easier. Having a separate `token::DelimToken` enum also allows us to enforce the invariant that the opening and closing delimiters must be the same in `ast::TtDelimited`, removing the need to ensure matched delimiters when working with token trees.
2014-10-30 09:35:52 +11:00
bors
18a3db6aa1 auto merge of #18357 : TeXitoi/rust/simplify-reverse-complement, r=alexcrichton
Simpler, safer and shorter, in the same spirit of the current version, and the
same performances.

@mahkoh please review, I think I didn't change any performances related thing.
2014-10-29 22:17:00 +00:00
Steve Klabnik
6ac7fc73f5 Update infrastructure for fail -> panic
This includes updating the language items and marking what needs to
change after a snapshot.

If you do not use the standard library, the language items you need to
implement have changed. For example:

```rust
 #[lang = "fail_fmt"] fn fail_fmt() -> ! { loop {} }
```

is now

```rust
 #[lang = "panic_fmt"] fn panic_fmt() -> ! { loop {} }
```

Related, lesser-implemented language items `fail` and
`fail_bounds_check` have become `panic` and `panic_bounds_check`, as
well. These are implemented by `libcore`, so it is unlikely (though
possible!) that these two renamings will affect you.

[breaking-change]

Fix test suite
2014-10-29 16:06:13 -04:00
Steve Klabnik
7828c3dd28 Rename fail! to panic!
https://github.com/rust-lang/rfcs/pull/221

The current terminology of "task failure" often causes problems when
writing or speaking about code. You often want to talk about the
possibility of an operation that returns a Result "failing", but cannot
because of the ambiguity with task failure. Instead, you have to speak
of "the failing case" or "when the operation does not succeed" or other
circumlocutions.

Likewise, we use a "Failure" header in rustdoc to describe when
operations may fail the task, but it would often be helpful to separate
out a section describing the "Err-producing" case.

We have been steadily moving away from task failure and toward Result as
an error-handling mechanism, so we should optimize our terminology
accordingly: Result-producing functions should be easy to describe.

To update your code, rename any call to `fail!` to `panic!` instead.
Assuming you have not created your own macro named `panic!`, this
will work on UNIX based systems:

    grep -lZR 'fail!' . | xargs -0 -l sed -i -e 's/fail!/panic!/g'

You can of course also do this by hand.

[breaking-change]
2014-10-29 11:43:07 -04:00
bors
3bc545373d auto merge of #18365 : bjz/rust/token, r=alexcrichton
[breaking-change]

(for syntax-extensions)

- Token variant identifiers have been converted to PascalCase for consistency with Rust coding standards
- Some free-functions in `syntax::token` have been converted to methods on `syntax::token::Token`:
    - `can_begin_expr`         -> `Token::can_begin_expr`
    - `close_delimiter_for`    -> `Token::get_close_delimiter`
    - `is_lit`                 -> `Token::is_lit`
    - `is_ident`               -> `Token::is_ident`
    - `is_path`                -> `Token::is_path`
    - `is_plain_ident`         -> `Token::is_plain_ident`
    - `is_lifetime`            -> `Token::is_lifetime`
    - `is_mutability`          -> `Token::is_mutability`
    - `to_binop`               -> `Token::to_binop`
    - `is_keyword`             -> `Token::is_keyword`
    - `is_any_keyword`         -> `Token:is_any_keyword`
    - `is_strict_keyword`      -> `Token::is_strict_keyword`
    - `is_reserved_keyword`    -> `Token::is_reserved_keyword`
    - `mtwt_token_eq`          -> `Token::mtwt_eq`
- `token::Ident` now takes an enum instead of a boolean for clarity
- `token::{to_string, binop_to_string}` were moved to `pprust::{token_to_string, binop_to_string}`
2014-10-29 10:22:01 +00:00
Brian Koropoff
12619bede2 Add regression test for issue #18412 2014-10-28 20:18:10 -07:00
gamazeps
cb5f979942 Diagnostic: resolve bare fn in expected closure
Closes #15273 (I did not find how to get the identifier in the message
:/)

Also creates the span_help! macro associated with #18126
2014-10-29 01:07:40 +01:00
Guillaume Pinot
7017fb095b rephrase some comments according to remarks in the PR 2014-10-28 22:14:05 +01:00
Jakub Bukaj
7f523e7252 Update tests with the new error messages 2014-10-28 17:54:16 +01:00
Jakub Bukaj
cca84e9e21 Remove ty_bot from the type system
We now instead use a fresh variable for expressions that diverge.
2014-10-28 17:54:16 +01:00
Aaron Turon
d9eb13b2c8 Add regression test for lint deprecation 2014-10-28 08:54:33 -07:00
Aaron Turon
e0ad0fcb95 Update code with new lint names 2014-10-28 08:54:21 -07:00
Brian Koropoff
374da5b16d Add regression test for issue #17361 2014-10-28 00:03:36 -07:00
Brendan Zabarauskas
d8b1fa0ae0 Use PascalCase for token variants 2014-10-28 15:55:37 +11:00
Brian Koropoff
e46af8caec Add regression test for issue #16791 2014-10-27 18:51:43 -07:00
Alex Crichton
a33d7617c5 Test fixes and rebase conflicts from rollup 2014-10-27 15:12:48 -07:00
Alex Crichton
20b9897c58 rollup merge of #18362 : kevinmehall/pprint-struct-pat-shorthand 2014-10-27 15:12:47 -07:00
Alex Crichton
c381752b0e rollup merge of #18356 : jakub-/const-pattern-suptype 2014-10-27 15:12:47 -07:00
Alex Crichton
15547e1d72 rollup merge of #18346 : aochagavia/closure-fields 2014-10-27 15:12:47 -07:00
Alex Crichton
1cc938a69a rollup merge of #18337 : bkoropoff/unboxed-imm-upvar-fixes 2014-10-27 15:12:45 -07:00
Alex Crichton
175d6a7435 rollup merge of #18332 : jbcrail/fix-comments 2014-10-27 15:12:30 -07:00
Alex Crichton
f1118cc084 rollup merge of #18324 : jakub-/eneedstest 2014-10-27 15:12:30 -07:00
Alex Crichton
abfc2f3b8d rollup merge of #18315 : arielb1/constexpr-addr 2014-10-27 15:12:29 -07:00
Alex Crichton
e9537735c1 rollup merge of #18250 : dotdash/fix_aliasing 2014-10-27 12:53:01 -07:00
Alex Crichton
0c756de6c5 rollup merge of #18235 : nikomatsakis/issue-18209 2014-10-27 12:53:01 -07:00
Alex Crichton
b3c676ed86 rollup merge of #18229 : bjz/ttdelim 2014-10-27 12:53:01 -07:00
Adolfo Ochagavía
2ce77b33b0 Add test for issue 18343 2014-10-27 16:28:24 +01:00
Kevin Mehall
e5f709079a Preserve struct field pattern shorthand in the prettyprinter.
Use the `is_shorthand` field introduced by #17813 (ead6c4b) to make the
prettyprinter output the shorthand form. Fixes a few places that set
`is_shorthand: true` when the pattern is not a PatIdent with the same
name as the field.
2014-10-27 00:35:35 -07:00
Guillaume Pinot
7c6a4cc98b simplify shootout-reverse-complement.rs
Simpler, safer and shorter, in the same spirit of the current version, and the
same performances.
2014-10-26 22:53:17 +01:00
Jakub Bukaj
f16744ce52 Fix a typecheck regression with constant borrowed pointers in patterns
Change the eqtype relationship to be a suptype relationship instead.

Fixes #18350.
Fixes #18352.
2014-10-26 22:35:26 +01:00
bors
f037452447 auto merge of #18143 : mahkoh/rust/reverse_complement, r=alexcrichton
Lots of unsafe code and lots of branches removed. Also multithreaded.

Rust old: 1.208 seconds
Rust new: 0.761 seconds
C: 0.632 seconds
2014-10-26 16:42:33 +00:00
Brian Koropoff
5662bbad07 Add regression test for #18335 2014-10-25 21:51:14 -07:00
Brian Koropoff
6be48ea92e Add regression test for #18238 and #18336 2014-10-25 21:50:08 -07:00
Joseph Crail
30403204d6 Fix spelling mistakes in comments. 2014-10-25 23:11:17 -04:00
Brendan Zabarauskas
dfb4163f83 Use standard capitalisation for TokenTree variants 2014-10-26 09:53:30 +11:00
Brendan Zabarauskas
ec3f0201e7 Rename TokenTree variants for clarity
This should be clearer, and fits in better with the `TTNonterminal` variant.

Renames:

- `TTTok` -> `TTToken`
- `TTDelim` -> `TTDelimited`
- `TTSeq` -> `TTSequence`
2014-10-26 09:53:29 +11:00
Jakub Bukaj
2c744c7f32 Add test cases for E-needstest issues 2014-10-26 00:18:10 +02:00
Ariel Ben-Yehuda
81b7e62918 Prevent pointer -> int casts in constexprs
These cause issues, as addresses aren't fixed at compile-time.

Fixes #18294
2014-10-25 20:18:32 +03:00
bors
a34b8dec69 auto merge of #18171 : jakub-/rust/match-typeck, r=pcwalton
Rather than doing it top-down, with a known expected type, we will now simply establish the appropriate constraints between the pattern and the expression it destructures.

Closes #8783.
Closes #10200.
2014-10-25 07:07:08 +00:00
bors
172b59abe5 auto merge of #18080 : veddan/rust/assume, r=thestinger
Adds an `assume` intrinsic that gets translated to llvm.assume. It is
used on a boolean expression and allows the optimizer to assume that
the expression is true.

This implements #18051.
2014-10-25 00:32:07 +00:00
Jakub Bukaj
1484f9cd46 Update tests with the new error messages 2014-10-24 19:43:47 +02:00
Jakub Bukaj
4380e96c04 Overhaul typechecking of patterns
Instead of checking patterns in a top-down fashion with a known
expected type on entry, this changes makes typeck establish
appropriate constraints between a pattern and the expression
it destructures, and lets inference compute the final types
or produce good error messages if it's impossible.
2014-10-24 19:43:47 +02:00
Jakub Bukaj
3e9ce5afb7 Do not accept functions in enum patterns past resolve 2014-10-24 19:43:47 +02:00
bors
a10917a6a9 auto merge of #16388 : Zoxc/rust/stmesg, r=alexcrichton
This installs signal handlers to print out stack overflow messages on Linux. It also ensures the main thread has a guard page.

This will catch stack overflows in external code. It's done in preparation of switching to stack probes (#16012).

I've done some simple tests with overflowing the main thread, native threads and green threads (with and without UV) on x86-64.
This might work on ARM, MIPS and x86-32.

I've been unable to run the test suite on this because of #16305.
2014-10-24 17:32:04 +00:00
Julian Orth
b3ed61703c ignore-android 2014-10-24 17:19:02 +02:00
Julian Orth
da2152c9ae Improve shootout-reverse-complement 2014-10-24 17:18:10 +02:00
John Kåre Alsaker
70cef9474a Print stack overflow messages for Windows, Linux and OS X
Fixes #17562
2014-10-24 14:36:29 +02:00
P1start
ead6c4b9d4 Add a lint for not using field pattern shorthands
Closes #17792.
2014-10-24 15:44:18 +13:00
Björn Steinbrink
70fe20a698 Fix codegen breaking aliasing rules for functions with sret results
This reverts commit a0ec902e23 "Avoid
unnecessary temporary on assignments".

Leaving out the temporary for the functions return value can lead to a
situation that conflicts with rust's aliasing rules.

Given this:

````rust
fn func(f: &mut Foo) -> Foo { /* ... */ }

fn bar() {
    let mut foo = Foo { /* ... */ };

    foo = func(&mut foo);
}
````

We effectively get two mutable references to the same variable `foo` at
the same time. One for the parameter `f`, and one for the hidden
out-pointer. So we can't just `trans_into` the destination directly, but
must use `trans` to get a new temporary slot from which the result can
be copied.
2014-10-23 11:43:48 +02:00
bors
8a40854660 auto merge of #17868 : nick29581/rust/valgrind, r=alexcrichton
r? @alexcrichton
2014-10-23 05:27:11 +00:00
Nick Cameron
edc5275563 Move some tests to run-pass-valgrind 2014-10-23 13:52:34 +13:00
bors
96991e9335 auto merge of #18224 : nikomatsakis/rust/issue-17594, r=alexcrichton
Add test for issue #17594

Fixes #17594
2014-10-22 23:57:11 +00:00
bors
7d7e409839 auto merge of #18092 : michaelwoerister/rust/lldb-test-versioning, r=alexcrichton
Now that there are build bots with a stable enough LLDB version on OSX we can finally let the tests run on every PR!
😹
2014-10-22 21:32:16 +00:00
Niko Matsakis
de06faf889 Use local cache when there are unbound type variables and where clauses in scope.
Fixes #18209.
2014-10-22 11:35:53 -04:00
Michael Woerister
47e8cf7697 debuginfo: Gate all LLDB debuginfo tests on a minimum LLDB version being available 2014-10-22 10:47:45 +02:00
Niko Matsakis
7b021859a4 Add test for issue #17594 2014-10-21 23:58:09 -04:00
Niko Matsakis
aeba2ccf30 Adjust orphan rules to consider all input types, not just self type.
Fixes #18222.
2014-10-21 23:52:00 -04:00
Niko Matsakis
b066d09be8 Patch up broken error messages 2014-10-21 17:36:15 -04:00
Niko Matsakis
53ede4403b Coherence tests that seemed to be missing. 2014-10-21 12:32:37 -04:00
Niko Matsakis
450263de4a Tests for method resolution in the face of various ambiguities or non-ambiguities. These
are mostly new tests though I also revamped (and renamed) some of the existing tests.
2014-10-21 12:32:36 -04:00
Niko Matsakis
e09fc03701 Various minor cases where errors are reported in slightly different ways. 2014-10-21 12:32:36 -04:00
Niko Matsakis
7f8ca53669 Test where the old infrastructure failed to detect the (applicable) impl of FnMut for
some reason.
2014-10-21 12:32:36 -04:00
Niko Matsakis
df714cfda7 The new method lookup mechanism typechecks calls against the method type declared in the trait, not in the impl. In some cases that results in tighter rules, and in some cases looser. Correct for that. 2014-10-21 12:32:36 -04:00
Victor Berger
dd55c8003c Stability lint checker now handles nested macros.
Closes #17185.
2014-10-20 23:48:29 +02:00
bors
7d0cc44f87 auto merge of #18070 : alexcrichton/rust/spring-cleaning, r=aturon
This is a large spring-cleaning commit now that the 0.12.0 release has passed removing an amount of deprecated functionality. This removes a number of deprecated crates (all still available as cargo packages in the rust-lang organization) as well as a slew of deprecated functions. All `#[crate_id]` support has also been removed.

I tried to avoid anything that was recently deprecated, but I may have missed something! The major pain points of this commit is the fact that rustc/syntax have `#[allow(deprecated)]`, but I've removed that annotation so moving forward they should be cleaned up as we go.
2014-10-20 16:07:43 +00:00
Alex Crichton
96445a533e Test fixes and rebase conflicts 2014-10-20 08:17:33 -07:00
Ariel Ben-Yehuda
0eb17e3f31 Ensure that the return type of a function is Sized
While no real rvalue of an unsized type can exist, a diverging function
can still "return" a value of such a type, which causes an ICE.

Fixes #18107.
2014-10-19 23:54:45 +03:00
Alex Crichton
9d5d97b55d Remove a large amount of deprecated functionality
Spring cleaning is here! In the Fall! This commit removes quite a large amount
of deprecated functionality from the standard libraries. I tried to ensure that
only old deprecated functionality was removed.

This is removing lots and lots of deprecated features, so this is a breaking
change. Please consult the deprecation messages of the deleted code to see how
to migrate code forward if it still needs migration.

[breaking-change]
2014-10-19 12:59:40 -07:00
bors
d8cf023971 auto merge of #18109 : bkoropoff/rust/issue-16939, r=aturon
Closes #16939
2014-10-18 22:57:16 +00:00
bors
1c82e60ca7 auto merge of #18113 : bkoropoff/rust/issue-16739, r=alexcrichton
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-18 21:02:17 +00:00
bors
ce342f522c auto merge of #18041 : arielb1/rust/no-size-overflow, r=pnkfelix
Should fix #17913.

Also clean-up u64/u32-ness. I really should split this commit and add tests (I have no idea how to add them).
2014-10-18 17:02:13 +00:00
Ariel Ben-Yehuda
ccdf8d5b52 trailing whitespace 2014-10-18 19:34:00 +03:00
bors
d670919aa4 auto merge of #18105 : nikomatsakis/rust/issue-18055, r=pcwalton
Check object lifetime bounds in coercions, not just trait bounds.  Fixes #18055.

r? @pcwalton 

This is a [breaking change]. Change code like this:

    fn foo(v: &[u8]) -> Box<Clone+'static> { ... }

to make the lifetimes agree:

    // either...
    fn foo(v: &'static[u8]) -> Box<Clone+'static> { box v }

    // or ...
    fn foo<'a>(v: &'a [u8]) -> Box<Clone+'a> { box v }
2014-10-18 15:12:11 +00:00
bors
41a79104a4 auto merge of #18099 : jakub-/rust/fixed-issues, r=alexcrichton
Closes #9249.
Closes #13105.
Closes #13837.
Closes #13847.
Closes #15207.
Closes #15261.
Closes #16048. 
Closes #16098.
Closes #16256.
Closes #16562.
Closes #16596.
Closes #16709.
Closes #16747.
Closes #17025.
Closes #17121.
Closes #17450.
Closes #17636.
2014-10-18 13:22:11 +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
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
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
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
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
0e68c63f3f Add regression test for issue #16939 2014-10-16 19:09:50 -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
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
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
Luqman Aden
7a4122ac67 librustc: Remove visit_tydesc intrinsic. 2014-10-16 11:15:35 -04:00
Luqman Aden
38aca17c47 Remove libdebug and update tests. 2014-10-16 11:15:34 -04:00
bors
126f224d9a auto merge of #18015 : jakub-/rust/issue-4201, r=pcwalton
Closes #4201.
2014-10-16 01:22:19 +00:00
Viktor Dahl
0525bb7669 Add assume intrinsic
Adds an `assume` intrinsic that gets translated to llvm.assume. It is
used on a boolean expression and allows the optimizer to assume that
the expression is true.

This implements #18051.
2014-10-16 01:44:44 +02:00
Guillaume Pinot
1a6f1ebad5 shootout-reverse-complement: reimplement TwoSideIter using pointers 2014-10-16 00:11:06 +02:00
bors
8096fee18c auto merge of #17934 : pcwalton/rust/better-autoderef-fixup, r=pnkfelix
librustc: Improve method autoderef/deref/index behavior more, and enable IndexMut on mutable vectors.

This fixes a bug whereby the mutability fixups for method behavior were
not kicking in after autoderef failed to happen at any level. It also
adds support for `Index` to the fixer-upper.

Closes #12825.

r? @pnkfelix
2014-10-15 21:17:22 +00:00
Ariel Ben-Yehuda
ca27ccc8e7 fix a failing test 2014-10-15 23:57:01 +03:00
Ariel Ben-Yehuda
61ab2ea08a response for review comments 2014-10-15 20:09:09 +03:00
=
0ad6f0aa55 Renamed AsciiStr::to_lower and AsciiStr::to_upper
Now AsciiStr::to_lowercase and AsciiStr::to_uppercase to match Ascii trait.
[breaking-change]
2014-10-15 12:31:35 -04:00
Ariel Ben-Yehuda
1ee345a87b add some tests 2014-10-15 14:17:34 +03:00
bors
71dfa5befe auto merge of #18053 : nick29581/rust/ufcs1, r=pcwalton
With the 'receiver' as an argument and static dispatch. Part of UFCS implementation (#16293).

r?
2014-10-15 08:02:21 +00:00
bors
5201bf17e6 auto merge of #18031 : huonw/rust/adjust-vec-sort-test, r=alexcrichton
Previously it had some uninituitive conditionals due to the interaction
with the Rand construction and Clone reinitialisation to create
sequential identifying numbers. This replaces all that with just
constructing the DropCounters with the appropriate identifiers.
2014-10-15 06:07:22 +00:00
Nick Cameron
fe8e591147 Tests 2014-10-15 17:50:41 +13:00
Nick Cameron
eb598e5344 Allow self as an arg in extension methods 2014-10-15 17:50:41 +13:00
Nick Cameron
db640d53b8 tests 2014-10-15 17:38:32 +13:00
bors
af99157489 auto merge of #18036 : japaric/rust/add-tests, r=nikomatsakis
Closes #11384
Closes #12909

r? @nikomatsakis
2014-10-15 02:17:19 +00:00
Patrick Walton
f7fb38729e librustc: Improve method autoderef/deref/index behavior more, and enable
`IndexMut` on mutable vectors.

This fixes a bug whereby the mutability fixups for method behavior were
not kicking in after autoderef failed to happen at any level. It also
adds support for `Index` to the fixer-upper.

Closes #12825.
2014-10-14 14:44:17 -07:00