Commit Graph

5819 Commits

Author SHA1 Message Date
Brian Koropoff
1571abae53 Fix ICE when checking call overload
If the overloaded method does not have a tuple or unit type as its
first non-self parameter, produce a list of error types with the
correct length to prevent a later index bound panic.  This typically
occurs due to propagation of an earlier type error or unconstrained
type variable.  Closes #18532
2014-11-02 19:31:41 -08:00
Alexis Beingessner
112c8a966f refactor libcollections as part of collection reform
* Moves multi-collection files into their own directory, and splits them into seperate files
* Changes exports so that each collection has its own module
* Adds underscores to public modules and filenames to match standard naming conventions

(that is, treemap::{TreeMap, TreeSet} => tree_map::TreeMap, tree_set::TreeSet)

* Renames PriorityQueue to BinaryHeap
* Renames SmallIntMap to VecMap
* Miscellanious fallout fixes

[breaking-change]
2014-11-02 18:58:11 -05:00
Aaron Turon
38e0745e3f Add type annotation to deal with fallout 2014-11-02 15:31:52 -08:00
Luqman Aden
76cc107811 librustc: Check if return type is void not zero-sized for fn->closure wrapper. 2014-11-02 14:43:52 -05:00
Brian Koropoff
9b322a6a90 Treat cross-crate unboxed closure def IDs consistently
Always translate the ID into the local crate ID space since
presently the only way to encounter an unboxed closure type
from another crate is to inline once of its functions.

This may need to change if abstract return types are added.

Closes #18543
2014-11-02 11:34:18 -08:00
bors
0c1268451b auto merge of #18481 : sfackler/rust/enum-namespace, r=pcwalton
After a snapshot, everything can be switched over and the small bit of hackery in resolve dealing with `ENUM_STAGING_HACK` can be removed.

cc #18478
2014-11-02 19:22:16 +00:00
Brian Koropoff
28f70d3440 Fix decoding of unboxed closure kinds
Closes #18378.  Note that cross-crate unboxed closures are
still unimplemented and will fail to work currently.
2014-11-02 09:59:10 -08:00
Brian Koropoff
cf7756442f Always consider static methods object-safe
This also fixes #18490 as a side-effect by avoiding a later
out-of-bounds slice.
2014-11-01 20:15:48 -07:00
P1start
5bf9ef2122 Convert some notes to help messages
Closes #18126.
2014-11-02 16:12:23 +13:00
Mike Robinson
2c2c45535a Update error messages from "vector" to "array" 2014-11-02 03:11:08 +00:00
Brian Koropoff
ae92942758 Fix def ID mapping for method defs
This prevents def IDs with the wrong crate ID from showing up
when using UFCS.  Closes #18501
2014-11-01 18:49:48 -07:00
Jorge Aparicio
fe256f8140 Remove unnecessary allocations 2014-11-01 19:56:07 -05:00
Brian Koropoff
7ea7606874 Monomorphize method types in Typer impl for BlockS
In some obscure circumstances, failure to do this can cause
unsubstituted type parameters to show up where they aren't
expected and cause an ICE.

Closes #18514
2014-11-01 15:24:34 -07:00
Alex Crichton
21ac985af4 collections: Remove all collections traits
As part of the collections reform RFC, this commit removes all collections
traits in favor of inherent methods on collections themselves. All methods
should continue to be available on all collections.

This is a breaking change with all of the collections traits being removed and
no longer being in the prelude. In order to update old code you should move the
trait implementations to inherent implementations directly on the type itself.

Note that some traits had default methods which will also need to be implemented
to maintain backwards compatibility.

[breaking-change]
cc #18424
2014-11-01 11:37:04 -07:00
Falco Hirschenberger
e5058a8f0c Add lint for checking exceeding bitshifts #17713 2014-11-01 09:10:10 +01:00
Brian Koropoff
8a9ced1551 Fix trans of index overload expressions with DST result types
Closes #18487
2014-10-31 23:31:16 -07: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
1397f990fe Cross crait inherant impls 2014-11-01 11:05:12 +13:00
Nick Cameron
d416d16cce Remove FnStyle from DefFn and DefStaticMethod 2014-11-01 11:05:12 +13:00
Nick Cameron
4e7d86c079 Resolve methods called as functions and...
...defined in another crate.

Fixes #18061
2014-11-01 11:03:50 +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
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
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
c10c163377 rollup merge of #18445 : alexcrichton/index-mut
Conflicts:
	src/libcollections/vec.rs
2014-10-30 17:37:55 -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
8c03068b7a rollup merge of #18438 : jakub-/empty-file 2014-10-30 17:36:48 -07:00
Jakub Bukaj
a2624fc908 Use the _ representation for integral variables as well 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
f3ba518675 rollup merge of #18411 : richo/tm-null-check 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
5ee8569889 rollup merge of #18407 : thestinger/arena 2014-10-30 09:29:23 -07:00
Alex Crichton
7577b6b678 rollup merge of #18383 : bkoropoff/issue-17361 2014-10-30 08:55:40 -07:00
Alex Crichton
1d356624a1 collections: Enable IndexMut for some collections
This commit enables implementations of IndexMut for a number of collections,
including Vec, RingBuf, SmallIntMap, TrieMap, TreeMap, and HashMap. At the same
time this deprecates the `get_mut` methods on vectors in favor of using the
indexing notation.

cc #18424
2014-10-30 08:54:30 -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
Brian Koropoff
8384dd9357 Fix ICE translating array repeat expr of non-Copy type
The type checker permits an array repeat expression of non-Copy
type if the count is 1, but trans asserts on it prior to this
change.

Closes #18425
2014-10-29 21:45:35 -07:00
P1start
2a7be1b209 Fix a minor issue with how lint groups are printed by rustc 2014-10-30 17:05:16 +13:00
P1start
a0ee7c9f55 Remove unused_extern_crate and unused_result from the unused lint group
These lints are allow by default because they are sometimes too sensitive.
2014-10-30 17:05:16 +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
dd2a1e3469 Change extensions traits to blanket impls 2014-10-30 15:51:56 +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
Nick Cameron
8d8d8d4e52 Enforce object safety
closes #17670

[breaking-change]

Traits must be object-safe if they are to be used in trait objects. This might require splitting a trait into object-safe and non-object-safe parts.

Some standard library traits in std::io have been split - Reader has new traits BytesReader (for the bytes method) and AsRefReader (for by_ref), Writer has new trait AsRefWriter (for by_ref). All these new traits have blanket impls, so any type which implements Reader or Writer (respectively) will have an implmentation of the new traits. To fix your code, you just need to `use` the new trait.
2014-10-30 15:51:21 +13: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
1b79303f49 Address review comments 2014-10-29 23:56:22 +01:00
Jakub Bukaj
0c0365d33f Improve the readability of diagnostics that involve unresolved type variables
Diagnostics such as the following

```
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 be fairly unappealing to new users. 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.

In addition, type variables have been changed to use the type hole syntax `_` in diagnostics.
With a variable ID, they're printed as `_#id` (e.g. `_#1`). In cases where the ID is left out,
it's simply `_`. Integer and float variables have an additional suffix after the number, e.g.
`_#1i` or `_#3f`.
2014-10-29 23:55:56 +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
Jakub Bukaj
710fd0ca95 Remove an empty file from librustc 2014-10-29 22:48:35 +01:00
Richo Healey
89e8caadae rustc: fail if LLVM is passed an invalid triple
This changes create_target_machine to correctly return a Result (Since
the underlying LLVM function can fail and return NULL)
2014-10-29 13:49:32 -07: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
c8b142afb9 Fix ICE assigning methods to local variables
This just adds some missing match cases in ty and trans

Closes #18412
2014-10-28 20:17:46 -07:00
bors
1effc9e141 auto merge of #18410 : thestinger/rust/revert-parallel, r=alexcrichton
This reverts commit c245c5bbad.

Parallel code generation generates invalid code for librand, which is
caught by recent versions of binutils.
2014-10-29 02:26:59 +00:00
Daniel Micay
79723a3e30 Revert "enable parallel codegen by default"
This reverts commit c245c5bbad.

Parallel code generation generates invalid code for librand, which is
caught by recent versions of binutils.
2014-10-28 20:14:00 -04: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
Jakub Bukaj
6d2080c448 Address review comments 2014-10-28 18:33:38 +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
1ad1e2e299 Turn on warning for use of deprecated lint names 2014-10-28 08:54:21 -07:00
Aaron Turon
e0ad0fcb95 Update code with new lint names 2014-10-28 08:54:21 -07:00
Niko Matsakis
1da73ff126 Avoid O(n^2) performance by reconsidering the full set of obligations only when we are about to report an error (#18208). I found it is still important to consider the full set in order to make tests like let x: Vec<_> = obligations.iter().collect() work. 2014-10-28 08:18:21 -04:00
Brian Koropoff
c6ab5b0829 Respect mut in &mut str in astconv
Closes #17361
2014-10-28 00:03:34 -07:00
Brendan Zabarauskas
fcb78d65f2 Convert some token functions into methods 2014-10-28 15:55:37 +11:00
Brendan Zabarauskas
d8b1fa0ae0 Use PascalCase for token variants 2014-10-28 15:55:37 +11:00
Brian Koropoff
f0cc3a9365 Fix monomorphization of unboxed closures
This adds a `Substs` field to `ty_unboxed_closure` and plumbs basic
handling of it throughout the compiler. trans now correctly
monomorphizes captured free variables and llvm function defs.  This
fixes uses of unboxed closures which reference a free type or region
parameter from their environment in either their signature or free
variables.  Closes #16791
2014-10-27 18:51:27 -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
abfc2f3b8d rollup merge of #18315 : arielb1/constexpr-addr 2014-10-27 15:12:29 -07:00
Daniel Micay
7e2e4ce592 return &mut T from the arenas, not &T
The arenas write the value to memory and then return a non-aliasing
reference to it. The returned reference can be mutable and can be
coerced to an immutable one.

[breaking-change]
2014-10-27 16:37:31 -04:00
Alex Crichton
dea37d73ca rollup merge of #18266 : nick29581/vtable2.rs 2014-10-27 12:53:02 -07:00
Alex Crichton
e9537735c1 rollup merge of #18250 : dotdash/fix_aliasing 2014-10-27 12:53:01 -07:00
Alex Crichton
bb70ce6804 rollup merge of #18239 : msiemens/fix-ice-rename-failed 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
bors
e05c3b7799 auto merge of #17978 : arielb1/rust/remaining-garbage, r=nikomatsakis
it seems to be some kind of leftover GC-related detritus
2014-10-27 16:57:46 +00:00
Ariel Ben-Yehuda
19faaf1a9e Remove cat_discr
it seems to be some kind of GC-related mess
2014-10-27 19:06:50 +02:00
Adolfo Ochagavía
9dab88712f Show a note when closure field is called as method
Closes https://github.com/rust-lang/rust/issues/18343
2014-10-27 16:15:50 +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
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
Brian Koropoff
7129f172ae Improve diagnostics that result from the fix for #18335 2014-10-25 21:46:24 -07:00
Brian Koropoff
1062955b46 Tweak mem categorization of upvar mutability
- Correctly categorize env pointer deref for `FnMut` as declared
  rather than inherited.  This fixes an assert in borrowck.
  Closes #18238
- Categorize env pointer deref as mutable only if the closure is
  `FnMut` *and* the original variable is declared mutable.  This
  disallows capture-by-value `FnMut` closures from mutating captured
  variables that aren't declared mutable.  This is a difference
  from the equivalent desugared code which would permit it, but
  it is consistent with the behavior of procs.  Closes #18335
- Avoid computing info about the env pointer if there isn't one.
2014-10-25 21:40:25 -07:00
Brian Koropoff
2877e47ea7 Ensure unboxed closure upvars are marked as used mutably
Closes #18336
2014-10-25 21:39:34 -07:00
Joseph Crail
30403204d6 Fix spelling mistakes in comments. 2014-10-25 23:11:17 -04: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