3588 Commits

Author SHA1 Message Date
Alex Crichton
87bac6db13 rustc: Restrict the scope of a borrow on def_map
This addresses the ICE from #13763, but it does not allow the test to compile,
due to #13768. An alternate test was checked in in the meantime.

Closes #13763
2014-04-25 14:45:12 -07:00
bors
5ea0509685 auto merge of #13671 : dcrewi/rust/lint-directives-on-use-items, r=alexcrichton
Fixes #10534
2014-04-24 17:16:14 -07:00
Niko Matsakis
d8a34e7d3f Convert delegate to use an object type and remove FIXME from closed issue 2014-04-24 19:59:49 -04:00
Niko Matsakis
96dfed2b62 Pre-step towards issue #12624 and others: Introduce ExprUseVisitor, remove the
moves computation. ExprUseVisitor is a visitor that walks the AST for a
function and calls a delegate to inform it where borrows, copies, and moves
occur.

In this patch, I rewrite the gather_loans visitor to use ExprUseVisitor, but in
future patches, I think we could rewrite regionck, check_loans, and possibly
other passes to use it as well. This would refactor the repeated code between
those places that tries to determine where copies/moves/etc occur.
2014-04-24 19:59:49 -04:00
Niko Matsakis
77a975df85 use option_env! instead of env! 2014-04-24 19:59:49 -04:00
bors
3157c3e95b auto merge of #13715 : nick29581/rust/unsized-assign2, r=nikomatsakis
Closes #13376.
2014-04-24 08:16:24 -07:00
bors
70647ccc6d auto merge of #13713 : edwardw/rust/methodcall-span, r=alexcrichton
Specifically, the method parameter cardinality mismatch or missing
method error message span now gets method itself exactly. It was the
whole expression.

Closes #9390
Closes #13684
Closes #13709
2014-04-24 07:06:26 -07:00
bors
f5a5d7c32c auto merge of #13559 : FlaPer87/rust/remove-special-root, r=nikomatsakis
This patch removes the special auto-rooting for `@` from the borrow checker. With `@` moving into a library, it doesn't make sense to keep this code around anymore. It also simplifies `trans` by removing root checking from there 

@nikomatsakis

Closes: #11586
2014-04-24 05:51:28 -07:00
Nick Cameron
a08198ba6f Prevent unsized types being stored in variables
Closes #13376.
2014-04-24 11:57:22 +12:00
Edward Wang
899f222386 Calibrate span for method call error messages
Specifically, the method parameter cardinality mismatch or missing
method error message span now gets method itself exactly. It was the
whole expression.

Closes #9390
Closes #13684
Closes #13709
2014-04-24 06:16:46 +08:00
bors
6beb376b5c auto merge of #13686 : alexcrichton/rust/issue-12224, r=nikomatsakis
This alters the borrow checker's requirements on invoking closures from
requiring an immutable borrow to requiring a unique immutable borrow. This means 
that it is illegal to invoke a closure through a `&` pointer because there is no 
guarantee that is not aliased. This does not mean that a closure is required to
be in a mutable location, but rather a location which can be proven to be
unique (often through a mutable pointer).
                                                                                 
For example, the following code is unsound and is no longer allowed:             
                                                                                 
    type Fn<'a> = ||:'a;                                                         
                                                                                 
    fn call(f: |Fn|) {                                                           
        f(|| {                                                                   
            f(|| {})                                                             
        });                                                                      
    }                                                                            
                                                                                 
    fn main() {                                                                  
        call(|a| {                                                               
            a();                                                                 
        });                                                                      
    }                                                                            
                                                                                 
There is no replacement for this pattern. For all closures which are stored in
structures, it was previously allowed to invoke the closure through `&self` but
it now requires invocation through `&mut self`.

The standard library has a good number of violations of this new rule, but the
fixes will be separated into multiple breaking change commits.
                                                                                 
Closes #12224
2014-04-23 12:01:53 -07:00
Alex Crichton
823c7eee6a Fix other bugs with new closure borrowing
This fixes various issues throughout the standard distribution and tests.
2014-04-23 10:03:43 -07:00
Alex Crichton
159a10da4c rustc: Tweak the borrow on closure invocations
This alters the borrow checker's requirements on invoking closures from
requiring an immutable borrow to requiring a unique immutable borrow. This means
that it is illegal to invoke a closure through a `&` pointer because there is no
guarantee that is not aliased. This does not mean that a closure is required to
be in a mutable location, but rather a location which can be proven to be
unique (often through a mutable pointer).

For example, the following code is unsound and is no longer allowed:

    type Fn<'a> = ||:'a;

    fn call(f: |Fn|) {
        f(|| {
            f(|| {})
        });
    }

    fn main() {
        call(|a| {
            a();
        });
    }

There is no replacement for this pattern. For all closures which are stored in
structures, it was previously allowed to invoke the closure through `&self` but
it now requires invocation through `&mut self`.

The standard library has a good number of violations of this new rule, but the
fixes will be separated into multiple breaking change commits.

Closes #12224

[breaking-change]
2014-04-23 10:03:43 -07:00
Flavio Percoco
2e358672f8 rustc: fix de-@rooting fallout 2014-04-23 18:22:11 +02:00
Flavio Percoco
aff620de1e rustc: Remove moved_variables_set 2014-04-23 18:22:05 +02:00
Flavio Percoco
d10735e384 Treat @T like ~T in borrowck
`@` pointers used to have special rooting and regions management. With `@`
moving to standalone library, we don't need to keep that special
treatment around. This patch modifies the way `@` pointers are treated by
treating them as if they were `~` pointers

Region checker and borrow checker were modified in this patch.

Closes #11586

[breaking-change]
2014-04-23 18:19:44 +02:00
Flavio Percoco
e80089576e rustc: Remove obsolete error_out_of_root_scope variant 2014-04-23 18:19:40 +02:00
Flavio Percoco
bea94993d2 rustc: Remove root_map entirely 2014-04-23 18:19:33 +02:00
Flavio Percoco
4871a16c27 rustc: Remove root_map usage from lifetime 2014-04-23 18:19:30 +02:00
Flavio Percoco
3c1b1a31b0 rustc: Remove root_map usage from _match 2014-04-23 18:19:26 +02:00
Flavio Percoco
13c8edfa2e rustc: remove usage of root_map from astencode 2014-04-23 18:19:19 +02:00
Flavio Percoco
71f054ddd0 Remove special rooting code from trans
[breaking-change]

cc #11586
2014-04-23 18:19:05 +02:00
bors
e049a7003b auto merge of #13693 : thestinger/rust/mem, r=alexcrichton
This exposes volatile versions of the memset/memmove/memcpy intrinsics.

The volatile parameter must be constant, so this can't simply be a
parameter to our intrinsics.
2014-04-23 04:36:32 -07:00
bors
696f16ec2e auto merge of #13398 : nick29581/rust/unsized-enum, r=nikomatsakis
Now with proper checking of enums and allows unsized fields as the last field in a struct or variant. This PR only checks passing of unsized types and distinguishing them from sized ones. To be safe we also need to control storage.

Closes issues #12969 and #13121, supersedes #13375 (all the discussion there is valid here too).
2014-04-22 20:51:31 -07:00
Nick Cameron
5729d9b413 Review changes 2014-04-23 15:44:24 +12:00
David Creswick
e72d49a806 Apply lint attrs to individual "use" declarations
Fixes #10534
2014-04-22 21:25:27 -05:00
Daniel Micay
dc7d7d2698 add support for quadruple precision floating point
This currently requires linking against a library like libquadmath (or
libgcc), because compiler-rt barely has any support for this and most
hardware does not yet have 128-bit precision floating point. For this
reason, it's currently hidden behind a feature gate.

When compiler-rt is updated to trunk, some tests can be added for
constant evaluation since there will be support for the comparison
operators.

Closes #13381
2014-04-22 20:47:28 -04:00
Nick Cameron
0540a59382 Check for unsized types in enums.
And allow the last field of a struct or variant to be unsized.
2014-04-23 12:30:58 +12:00
Nick Cameron
f78add10cd Support unsized types with the type keyword 2014-04-23 12:30:58 +12:00
Daniel Micay
b2724727d5 add volatile copy/copy_nonoverlapping/set
This exposes volatile versions of the memset/memmove/memcpy intrinsics.

The volatile parameter must be constant, so this can't simply be a
parameter to our intrinsics.
2014-04-22 20:15:55 -04:00
bors
16a5b3127a auto merge of #13670 : eddyb/rust/more-de-at, r=pcwalton 2014-04-22 13:11:36 -07:00
Eduard Burtescu
637addde1f rustc: de-@ trans::tydesc_info. 2014-04-22 19:20:13 +03:00
Eduard Burtescu
3508891b0c rustc: remove typeck::isr_alist. 2014-04-22 19:20:13 +03:00
Eduard Burtescu
9dc99c89d3 rustc: de-@ stats. 2014-04-22 19:20:12 +03:00
Eduard Burtescu
938eaaa304 rustc: de-@ adt::Repr. 2014-04-22 19:20:12 +03:00
Eduard Burtescu
344ce17036 rustc: de-@ debuginfo. 2014-04-22 19:20:12 +03:00
Eduard Burtescu
57aa0eb0aa rustc: de-@ middle::ty. 2014-04-22 19:20:12 +03:00
Eduard Burtescu
1e5a112922 rustc: remove ty::Impl. 2014-04-22 19:14:52 +03:00
Eduard Burtescu
8f3cfe064b rustc: de-@ ty::type_err. 2014-04-22 19:06:56 +03:00
Eduard Burtescu
3fbc57894a rustc: de-@ param_substs. 2014-04-22 19:06:56 +03:00
Eduard Burtescu
7b3d6afe0a rustc: de-@ mono_id. 2014-04-22 19:06:55 +03:00
Eduard Burtescu
5fa7be659c rustc: slightly optimize make_mono_id to not clone lots of vectors. 2014-04-22 19:06:55 +03:00
Eduard Burtescu
c709c1efc6 rustc: remove obsolete monomorphization modes. 2014-04-22 19:06:55 +03:00
Eduard Burtescu
811bbfc782 rustc: de-@ ty::ParamBounds. 2014-04-22 19:06:54 +03:00
Eduard Burtescu
1a76ac320c rustc: de-@ trans::_match. 2014-04-22 19:06:54 +03:00
Eduard Burtescu
075ab30650 rustc: de-@ metadata::cstore. 2014-04-22 19:06:54 +03:00
Eduard Burtescu
fa33012b71 rustc: de-@ mem_categorization. 2014-04-22 19:06:54 +03:00
Eduard Burtescu
d55deaeb21 rustc: de-@ borrowck. 2014-04-22 19:06:53 +03:00
Eduard Burtescu
3683f16e9e rustc: de-@ resolve. 2014-04-22 19:06:53 +03:00
Eduard Burtescu
2a4dd43e44 rustc: de-@ lint. 2014-04-22 19:06:53 +03:00