Commit Graph

2385 Commits

Author SHA1 Message Date
Alex Crichton
89b0e6e12b Register new snapshots 2014-06-15 23:30:24 -07:00
Alex Crichton
ade807c6dc rustc: Obsolete the @ syntax entirely
This removes all remnants of `@` pointers from rustc. Additionally, this removes
the `GC` structure from the prelude as it seems odd exporting an experimental
type in the prelude by default.

Closes #14193
[breaking-change]
2014-06-14 10:45:37 -07:00
bors
dbd29ea96e auto merge of #14874 : pcwalton/rust/enum-to-float-casts-part-deux, r=alexcrichton
Closes #14794.

If you're casting from an enum to a float, cast through an integer
first.

[breaking-change]

r? @alexcrichton
2014-06-14 08:46:48 +00:00
Cameron Zwarich
5878b5edb0 Add new tests for uses of mutably borrowed paths 2014-06-13 20:48:10 -07:00
Cameron Zwarich
d7de4e9aff Enforce stronger guarantees for mutable borrows
Implement the stronger guarantees for mutable borrows from #12624. This
removes the ability to read from a mutably borrowed path for the
duration of the borrow, and enforces a unique access path for any
mutable borrow, for both reads and writes.

This makes mutable borrows work better with concurrent accesses from
multiple threads, and it opens the door for allowing moves out of
mutably borrowed values, as long as a new value is written before the
mutable borrow ends. This also aligns Rust more closely with academic
languages based on substructural types and separation logic.

The most common situation triggering an error after this change is a
call to a function mutably borrowing self with self.field as one of the
arguments. The workaround is to bind self.field to a temporary, but the
need for these temporaries will hopefully go away after #6268 is fixed.

Another situation that triggers an error is using the head expression of
a match in an arm that binds a variable with a mutable reference. The
use of the head expression needs to be replaced with an expression that
reconstructs it from match-bound variables.

This fixes #12624.

[breaking-change]
2014-06-13 20:48:09 -07:00
Cameron Zwarich
45a1b97764 Make analyze_move_out_from more field-sensitive
Currently analyze_move_out_from checks all restrictions on all base
paths of the move path, but it only needs to check restrictions from
loans of the base paths, and can disregard restrictions from loans of
extensions of those base paths.
2014-06-13 20:48:09 -07:00
Alex Crichton
b7af25060a Rolling up PRs in the queue
Closes #14797 (librustc: Fix the issue with labels shadowing variable names by making)
Closes #14823 (Improve error messages for io::fs)
Closes #14827 (libsyntax: Allow `+` to separate trait bounds from objects.)
Closes #14834 (configure: Don't sync unused submodules)
Closes #14838 (Remove typo on collections::treemap::UnionItems)
Closes #14839 (Fix the unused struct field lint for struct variants)
Closes #14840 (Clarify `Any` docs)
Closes #14846 (rustc: [T, ..N] and [T, ..N+1] are not the same)
Closes #14847 (Audit usage of NativeMutex)
Closes #14850 (remove unnecessary PaX detection)
Closes #14856 (librustc: Take in account mutability when casting array to raw ptr.)
Closes #14859 (librustc: Forbid `transmute` from being called on types whose size is)
Closes #14860 (Fix `quote_pat!` & parse outer attributes in `quote_item!`)
2014-06-13 13:53:55 -07:00
Patrick Walton
c9f3f47702 librustc: Forbid transmute from being called on types whose size is
only known post-monomorphization, and report `transmute` errors before
the code is generated for that `transmute`.

This can break code that looked like:

    unsafe fn f<T>(x: T) {
        let y: int = transmute(x);
    }

Change such code to take a type parameter that has the same size as the
type being transmuted to.

Closes #12898.

[breaking-change]
2014-06-13 13:53:55 -07:00
Luqman Aden
8c4a10a159 librustc: Take in account mutability when casting array to raw ptr. 2014-06-13 13:53:35 -07:00
Patrick Walton
9b9ef44233 libsyntax: Allow + to separate trait bounds from objects.
RFC #27.

After a snapshot, the old syntax will be removed.

This can break some code that looked like `foo as &Trait:Send`. Now you
will need to write `foo as (&Trait+Send)`.

Closes #12778.

[breaking-change]
2014-06-13 13:53:34 -07:00
Patrick Walton
2ed4734873 librustc: Fix the issue with labels shadowing variable names by making
the leading quote part of the identifier for the purposes of hygiene.

This adopts @jbclements' solution to #14539.

I'm not sure if this is a breaking change or not.

Closes #12512.

[breaking-change]
2014-06-13 13:53:34 -07:00
Patrick Walton
30772d94b1 librustc: Forbid enum-to-float casts.
Closes #14794.

If you're casting from an enum to a float, cast through an integer
first.

[breaking-change]
2014-06-13 11:23:47 -07:00
Niko Matsakis
9153d8ad6c Introduce VecPerParamSpace and use it to represent sets of types and
parameters

This involves numerous substeps:

1. Treat Self same as any other parameter.
2. No longer compute offsets for method parameters.
3. Store all generic types (both trait/impl and method) with a method,
   eliminating odd discrepancies.
4. Stop doing unspeakable things to static methods and instead just use
   the natural types, now that we can easily add the type parameters from
   trait into the method's polytype.
5. No doubt some more. It was hard to separate these into distinct commits.

Fixes #13564
2014-06-13 13:20:24 -04:00
bors
0422934e24 auto merge of #14831 : alexcrichton/rust/format-intl, r=brson
* The select/plural methods from format strings are removed
* The # character no longer needs to be escaped
* The \-based escapes have been removed
* '{{' is now an escape for '{'
* '}}' is now an escape for '}'

Closes #14810
[breaking-change]
2014-06-13 14:42:03 +00:00
bors
87bf47a0f7 auto merge of #14801 : pcwalton/rust/name-shadowing-in-one-pattern, r=alexcrichton
bindings and function arguments.

Issue #14581.

To fix code that this breaks, give the pattern identifiers different names.

[breaking-change]

r? @brson
2014-06-12 12:32:13 +00:00
Alex Crichton
cac7a2053a std: Remove i18n/l10n from format!
* The select/plural methods from format strings are removed
* The # character no longer needs to be escaped
* The \-based escapes have been removed
* '{{' is now an escape for '{'
* '}}' is now an escape for '}'

Closes #14810
[breaking-change]
2014-06-11 16:04:24 -07:00
Alex Crichton
3316b1eb7c rustc: Remove ~[T] from the language
The following features have been removed

* box [a, b, c]
* ~[a, b, c]
* box [a, ..N]
* ~[a, ..N]
* ~[T] (as a type)
* deprecated_owned_vector lint

All users of ~[T] should move to using Vec<T> instead.
2014-06-11 15:02:17 -07:00
Patrick Walton
c23748c59c librustc: Forbid identifiers that shadow in the same pattern in let
bindings and function arguments.

Issue #14581.

To fix code that this breaks, give the pattern identifiers different names.

[breaking-change]
2014-06-11 13:23:04 -07:00
bors
f9260d41d6 auto merge of #14746 : alexcrichton/rust/libsync, r=brson
This commit is the final step in the libstd facade, #13851. The purpose of this
commit is to move libsync underneath the standard library, behind the facade.
This will allow core primitives like channels, queues, and atomics to all live
in the same location.

There were a few notable changes and a few breaking changes as part of this
movement:

* The `Vec` and `String` types are reexported at the top level of libcollections
* The `unreachable!()` macro was copied to libcore
* The `std::rt::thread` module was moved to librustrt, but it is still
  reexported at the same location.
* The `std::comm` module was moved to libsync
* The `sync::comm` module was moved under `sync::comm`, and renamed to `duplex`.
  It is now a private module with types/functions being reexported under
  `sync::comm`. This is a breaking change for any existing users of duplex
  streams.
* All concurrent queues/deques were moved directly under libsync. They are also
  all marked with #![experimental] for now if they are public.
* The `task_pool` and `future` modules no longer live in libsync, but rather
  live under `std::sync`. They will forever live at this location, but they may
  move to libsync if the `std::task` module moves as well.

[breaking-change]
2014-06-11 11:47:04 -07:00
Alex Crichton
b1c9ce9c6f sync: Move underneath libstd
This commit is the final step in the libstd facade, #13851. The purpose of this
commit is to move libsync underneath the standard library, behind the facade.
This will allow core primitives like channels, queues, and atomics to all live
in the same location.

There were a few notable changes and a few breaking changes as part of this
movement:

* The `Vec` and `String` types are reexported at the top level of libcollections
* The `unreachable!()` macro was copied to libcore
* The `std::rt::thread` module was moved to librustrt, but it is still
  reexported at the same location.
* The `std::comm` module was moved to libsync
* The `sync::comm` module was moved under `sync::comm`, and renamed to `duplex`.
  It is now a private module with types/functions being reexported under
  `sync::comm`. This is a breaking change for any existing users of duplex
  streams.
* All concurrent queues/deques were moved directly under libsync. They are also
  all marked with #![experimental] for now if they are public.
* The `task_pool` and `future` modules no longer live in libsync, but rather
  live under `std::sync`. They will forever live at this location, but they may
  move to libsync if the `std::task` module moves as well.

[breaking-change]
2014-06-11 10:00:43 -07:00
Alex Crichton
54c2a1e1ce rustc: Move the AST from @T to Gc<T> 2014-06-11 09:51:37 -07:00
bors
9bb8f88d3a auto merge of #14696 : jakub-/rust/dead-struct-fields, r=alexcrichton
This uncovered some dead code, most notably in middle/liveness.rs, which I think suggests there must be something fishy with that part of the code.

The #[allow(dead_code)] annotations on some of the fields I am not super happy about but as I understand, marker type may disappear at some point.
2014-06-10 09:49:29 -07:00
bors
5bc2d03955 auto merge of #14783 : alexcrichton/rust/rollup, r=alexcrichton
Closes #14611 (std: Remove the as_utf16_p functions)
Closes #14694 (Num cleanup)
Closes #14760 (Add --color to test binary options)
Closes #14763 (std: Move dynamic_lib from std::unstable to std)
Closes #14766 (Add test for issue #13446)
Closes #14769 (collections: Add missing Default impls)
Closes #14773 (General nits)
Closes #14776 (rustdoc: Correctly classify enums/typedefs)
2014-06-09 21:57:09 -07:00
Piotr Jawniak
810ddfd611 Add test for issue #13446
Closes #13446
2014-06-09 17:46:53 -07:00
bors
907d961876 auto merge of #14590 : pcwalton/rust/overloaded-call, r=nick29581
gate.

This is part of unboxed closures.

r? @nick29581
2014-06-09 17:37:08 -07:00
Keegan McAllister
5084de3aaf Convert tests to use #[plugin_registrar] 2014-06-09 14:29:30 -07:00
Patrick Walton
966c7346ca librustc: Implement overloading for the call operator behind a feature
gate.

This is part of unboxed closures.
2014-06-09 12:39:17 -07:00
bors
e55f64f997 auto merge of #14709 : alexcrichton/rust/collections, r=brson
This is mostly just a cosmetic change, continuing the work from #14333.
2014-06-09 01:11:58 -07:00
Alex Crichton
da0703973a core: Move the collections traits to libcollections
This commit moves Mutable, Map, MutableMap, Set, and MutableSet from
`core::collections` to the `collections` crate at the top-level. Additionally,
this removes the `deque` module and moves the `Deque` trait to only being
available at the top-level of the collections crate.

All functionality continues to be reexported through `std::collections`.

[breaking-change]
2014-06-09 00:38:46 -07:00
bors
a6a9e09f98 auto merge of #14740 : P1start/rust/name-warnings, r=alexcrichton
This updates identifier warnings such as ``struct `foo_bar` should have a
camel case identifier`` to provide an example.

Closes #14738.
2014-06-08 23:26:57 -07:00
Brian Anderson
50942c7695 core: Rename container mod to collections. Closes #12543
Also renames the `Container` trait to `Collection`.

[breaking-change]
2014-06-08 21:29:57 -07:00
Jakub Wieczorek
f7d86b2f4a Remove the dead code identified by the new lint 2014-06-08 13:36:28 +02:00
Jakub Wieczorek
0271224bda Add detection of dead struct fields 2014-06-08 13:30:04 +02:00
bors
9239bb4960 auto merge of #14741 : sfackler/rust/visit-attr, r=alexcrichton
The lint was missing a *lot* of cases previously.
2014-06-08 04:16:53 -07:00
bors
7580ef902e auto merge of #14743 : Sawyer47/rust/range-msg, r=huonw
Range allows char and numeric types, but previous error message
mentioned only numeric types.
2014-06-08 00:46:57 -07:00
Steven Fackler
862cd65dca Add back hint for crate level attributes 2014-06-08 00:21:15 -07:00
Piotr Jawniak
90339ef189 Improve error message for range in match
Range allows char and numeric types, but previous error message
mentioned only numeric types.
2014-06-08 08:57:33 +02:00
Steven Fackler
42a18bd985 Remove the attribute_usage lint
It has been superseded by the unused_attribute lint.

[breaking change]
2014-06-07 23:46:32 -07:00
Steven Fackler
3654ac68be Add visit_attribute to Visitor, use it for unused_attribute
The lint was missing a *lot* of cases previously.
2014-06-07 23:21:33 -07:00
P1start
c1c76590cb update identifier naming warnings to give an example
This updates identifier warnings such as ``struct `foo_bar` should have a
camel case identifier`` to provide an example.

Closes #14738.
2014-06-08 17:56:09 +12:00
bors
ffdb881337 auto merge of #14717 : zwarich/rust/borrowck-tests, r=cmr
After sitting down to build on the work merged in #14318, I realized that some of the test names were not clear, others probably weren't testing the right thing, and they were also not as exhaustive as they could have been.
2014-06-07 10:17:38 -07:00
Cameron Zwarich
4666792ac6 Clean up borrows in borrowck field-sensitivity tests
Instead of calling a borrow() function that takes a pointer type, just
create a local pointer and dereference it. The dereference is there to
outsmart any future liveness analysis in borrowck.
2014-06-07 03:03:03 -07:00
Cameron Zwarich
653f57af20 Fix bad borrowck tests and move them from run-pass to compile-fail
The move_after_borrow / fu_move_after_borrow tests in
run-pass/borrowck-field-sensitivity.rs are not testing the right thing,
since the scope of the borrow is limited to the call to borrow(). When
fixed, these tests fail and thus should be moved to the corresponding
compile-fail test file.
2014-06-07 03:03:03 -07:00
Cameron Zwarich
53198ffda6 Mention the specific kind of use in borrowck test function names
Some of the borrowck field-sensitivity test functions have 'use' in
their name, but they don't refer to the specific kind of use (whether a
copy or a deref). It would be better if the name more precisely
reflected what the function is testing.
2014-06-07 02:30:33 -07:00
Niko Matsakis
4a51e9c549 Fix resolve to not permit refs to type vars from outer fns
(Fixes #14603)
2014-06-06 19:51:24 -04:00
Cameron Zwarich
f1542a6a7d Add a test for borrowck errors with multiple closure captures.
When converting check_loans to use ExprUseVisitor I encountered a few
issues where the wrong number of errors were being emitted for multiple
closure captures, but there is no existing test for this.
2014-06-06 11:59:33 -07:00
Cameron Zwarich
74eb4b4b57 Add new tests for borrowck field-sensitivity. 2014-06-06 11:59:33 -07:00
Cameron Zwarich
c53d296e12 Change check_loans to use ExprUseVisitor. 2014-06-06 11:59:33 -07:00
Alex Crichton
760b93adc0 Fallout from the libcollections movement 2014-06-05 13:55:11 -07:00
bors
3eeaa84a50 auto merge of #14628 : luqmana/rust/fcr, r=nikomatsakis
#14589.
2014-06-03 19:36:42 -07:00