Commit Graph

29727 Commits

Author SHA1 Message Date
Cameron Zwarich
702ef1b721 Call mark_variable_as_used_mut even after assignment errors
It doesn't actually matter if we call mark_variable_as_used_mut when the
assignment was invalid, since the variable was still used mutably.
2014-06-16 15:40:20 -07:00
Cameron Zwarich
ba203c5c5d Add a new each_in_scope_loan_affecting_path helper function
Add a helper function that generalizes the loan path restriction
strategy used by analyze_restrictions_on_use.
2014-06-16 15:40:20 -07:00
Cameron Zwarich
e018fc36d1 Remove Restriction
The Restriction struct now consists of a single Rc<LoanPath> field, so
it can be replaced with Rc<LoanPath>.
2014-06-16 15:40:20 -07:00
Cameron Zwarich
59309e0d9b Remove RestrictionSet
Now that RestrictionSet is no longer being used for anything meaningful,
it can be removed, along with any other associated functions and
RestrictionSet fields of other types.
2014-06-16 15:40:20 -07:00
Cameron Zwarich
9934759195 Remove an unused bkcerr_code constructor parameter
The RestrictionSet parameter of the err_borrowed_pointer_too_short
constructor isn't  actually used, so it can be removed.
2014-06-16 15:40:20 -07:00
Cameron Zwarich
6849362f38 Remove the last actual usage of RestrictionSet
Switch to checking BorrowKind values of loans instead of their
RestrictionSet values. This was the last code that made a decision
based on a RestrictionSet.
2014-06-16 15:40:20 -07:00
Cameron Zwarich
6ca8dbfaed Make a new compatible_borrow_kinds helper function
Move the `incompatible` helper function from analyze_restrictions_on_use
to the file scope and invert its meaning to account for future uses.
2014-06-16 15:40:20 -07:00
Cameron Zwarich
d2ca7465aa Remove an unused closure parameter
Remove the unused &Restriction parameter of each_in_scope_restriction's
op parameter.
2014-06-16 15:40:20 -07:00
Cameron Zwarich
2d3f122534 Remove a pointless check for intersection with RESTR_MUTATE
Now that all loans restrict mutation, there's no point in checking for
intersection with RESTR_MUTATE.
2014-06-16 15:40:20 -07:00
Cameron Zwarich
2f77212e0c Remove comments that no longer apply after the removal of const 2014-06-16 15:40:20 -07:00
bors
8a5c5b6081 auto merge of #14932 : Sawyer47/rust/json-smallfix, r=huonw 2014-06-16 13:16:44 +00:00
bors
5abf794707 auto merge of #14906 : P1start/rust/rustdoc-lifetimes, r=huonw
rustdoc was previously formatting lifetimes with two apostrophes, presumably as a result of #14797.
2014-06-16 11:31:56 +00:00
P1start
0204ca1726 Fix rustdoc's formatting of lifetimes
rustdoc was previously formatting lifetimes with two apostrophes, presumably
as a result of #14797.
2014-06-16 21:15:48 +12:00
bors
7ec78053ec auto merge of #14900 : alexcrichton/rust/snapshots, r=huonw
Closes #14898
Closes #14918
2014-06-16 08:16:49 +00:00
bors
2ef910f71a auto merge of #14715 : vhbit/rust/ios-pr2, r=alexcrichton 2014-06-16 06:32:03 +00:00
Alex Crichton
89b0e6e12b Register new snapshots 2014-06-15 23:30:24 -07:00
Valerii Hiora
2ec323e4c3 Potential fix for Win32 build
It seems in one of rebases I’ve resolved conflicts wrong and left one redundant line, it is absent in current master and it might cause compilation failure by copying file into itself.
2014-06-16 08:48:59 +03:00
Piotr Jawniak
b71fa9bd72 Small improvement for json PrettyEncoder 2014-06-15 09:31:14 +02:00
Valerii Hiora
3446f28879 Updated compiler-rt
Previous update unfortunately included changes which
broke Android compilation. This update fixes it and
should allow correct compilation of SjLj for iOS and
all builtins for Android.
2014-06-14 21:48:12 +03:00
bors
6d8342f5e9 auto merge of #14835 : alexcrichton/rust/no-more-at, r=brson
All functionality is now available through `Gc<T>` and `box(GC) expr`. This change also removes `GC` from the prelude (it's an experimental feature).
2014-06-14 17:51:49 +00: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
Alex Crichton
f20b1293fc Register new snapshots 2014-06-14 10:28:09 -07:00
bors
d64f18c490 auto merge of #14884 : huonw/rust/getoptsfail, r=alexcrichton 2014-06-14 10:36:46 +00: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
bors
18c451fc49 auto merge of #14739 : zwarich/rust/mut-unique-path, r=nikomatsakis
Implement the stronger guarantees for mutable borrows proposed in #12624.
2014-06-14 06:36:49 +00:00
bors
2c6caad1ba auto merge of #14878 : vtsatskin/rust/rustdoc-sidebar-click-targets, r=alexcrichton
There was feedback gathered by @bjz which request for larger click targets in the rustdoc sidebar. Here's my attempt at that.

My only concern with this patch is the removal of `<br>` between sidebar links. This may break formatting for text-only viewers of this documentation. If there is a large enough demographic of people that will be affected, perhaps we can try switching the structure of each sidebar block sidebar to an `<ol>` with each item as a `<li>`. 

* Change links to display:block for click larger targets
* Remove linebreaks due to extra space
* Adjust margins so that element spacing stays the same
* Sidebar item hover background colour chosen from `<pre>` styling
2014-06-14 04:46:46 +00:00
Cameron Zwarich
6fc788916c Reorganize code in check_loans
Move analyze_restrictions_on_use and check_if_path_is_moved so that all
of the code related to assignments is in a contiguous block at the end
of the file.
2014-06-13 20:48:10 -07: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
159e27aebb Fix all violations of stronger guarantees for mutable borrows
Fix all violations in the Rust source tree of the stronger guarantee
of a unique access path for mutable borrows as described in #12624.
2014-06-13 20:48:09 -07:00
Cameron Zwarich
036833ece9 Rename analyze_move_out_from to analyze_restrictions_on_use
Also rename MoveError to UseError and MoveOk / MoveWhileBorrowed to
UseOk / UseWhileBorrowed.
2014-06-13 20:48:09 -07:00
Cameron Zwarich
24b1b79cf1 Make analyze_move_out_from take a BorrowKind
Currently analyze_move_out_from ignores the BorrowKind of loans, but the
same logic is useful when restricted to loans of specific borrow kinds.
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
Cameron Zwarich
8c0e1ce6c9 Make check_for_move_of_borrowed_path take an &LoanPath rather than an &Rc<LoanPath>
It doesn't actually need the Rc, and it reduces the net number of
pointer manipulations.
2014-06-13 20:48:09 -07:00
Cameron Zwarich
d2d8fa2a09 Make analyze_move_out_from use a loop rather than recursion
It will be simpler to make some of the changes that I need to make to
analyze_move_out if it uses a loop rather than recursion.
2014-06-13 20:48:09 -07:00
Huon Wilson
09eb95f241 getopts: derive Eq for types. 2014-06-14 11:20:47 +10:00
bors
1cde9d8cbb auto merge of #14866 : bjz/rust/bitwise, r=alexcrichton 2014-06-14 01:11:44 +00:00
Huon Wilson
0642cbbde0 getopts: format failure messages with Show.
This obsoletes the old `to_err_msg` method. Replace

    println!("Error: {}", failure.to_err_msg())

    let string = failure.to_err_msg();

with

    println!("Error: {}", failure)

    let string = failure.to_str();

[breaking-change]
2014-06-14 11:11:09 +10:00
bors
3851d68a27 auto merge of #14750 : bachm/rust/master, r=alexcrichton
This adds the missing `get_mut` method to the `MutableVector` trait, and implements it for `&'a mut [T]`.
2014-06-13 22:46:35 +00:00
Valentin Tsatskin
0188bebbb7 rustdoc: Larger click areas for sidebar items
* Change links to display:block for click larger targets
* Remove linebreaks due to extra space
* Adjust margins so that element spacing stays the same
* Sidebar item hover background colour chosen from <pre> styling
2014-06-13 15:15:37 -07:00
bors
63dcc9a4df auto merge of #14867 : alexcrichton/rust/rollup, r=alexcrichton 2014-06-13 20:57:30 +00: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
Huon Wilson
f907d9772c syntax: parse outer attributes in quote_item! calls.
Fixes #14857.
2014-06-13 13:53:55 -07:00
Huon Wilson
9d5ec04d18 syntax: fix quote_pat! & unignore a quotation test. 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
Daniel Micay
d884cc83b0 remove unnecessary PaX detection
Rust no longer has support for JIT compilation, so it doesn't currently
require a PaX MPROTECT exception. The extended attributes are preferred
over modifying the binaries so it's not actually going to work on most
systems like this anyway.

If JIT compilation ends up being supported again, it should handle this
by *always* applying the exception via an extended attribute without
performing auto-detection of PaX on the host. The `paxctl` tool is only
necessary with the older method involving modifying the ELF binary.
2014-06-13 13:53:35 -07:00
Alex Crichton
ac7b9ddc54 Audit usage of NativeMutex
Once a native mutex has been used once, it is never allowed to be moved again.
This is because some pthreads implementations take pointers inside the mutex
itself.

This commit adds stern wording around the methods on native mutexes, and fixes
one use case in the codebase. The Mutex type in libsync was susceptible to
movement, so the inner static mutex is now boxed to ensure that the address of
the native mutex is constant.
2014-06-13 13:53:34 -07:00
Alex Crichton
b612ae9ede rustc: [T, ..N] and [T, ..N+1] are not the same
This commit fixes a bug in the calculation of the hash of a type which didn't
factor in the length of a constant-sized vector. As a result of this, a type
placed into an Any of a fixed length could be peeled out with any other fixed
length in a safe manner.
2014-06-13 13:53:34 -07:00
P1start
00e1a69237 Clarify Any docs
The `Any` docs previously did not state that only `'static` types implement it.
2014-06-13 13:53:34 -07:00