6648 Commits

Author SHA1 Message Date
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
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
bors
6c82eb5d4d auto merge of #13667 : TeXitoi/rust/shootout-chameneos-redux-fix, r=alexcrichton
* fix official shootout test (spacing)
* use libgreen to improve performances
* simplify and modernize code
* remove warnings
2014-04-22 12:01:34 -07:00
bors
92f6b925a9 auto merge of #13657 : edwardw/rust/ppaux-ice, r=alexcrichton
Closes #13599
2014-04-22 07:31:43 -07:00
Flavio Percoco
5b4d54ee5b Specialize kinds inference for Unsafe<T>
This patch adds a special rule for `Unsafe<T>` and makes it `Share`
regardless of whether T is `Share`.

[breaking-change]

Closes #13125
2014-04-22 14:18:36 +02:00
Edward Wang
741142e3fa Fix ICE when reporting closure and proc mismatch
Closes #13599
2014-04-22 15:54:02 +08:00
bors
960bf8ce66 auto merge of #13435 : edwardw/rust/span, r=brson
When reporting "consider removing this semicolon" hint message, the
offending semicolon may come from macro call site instead of macro
itself. Using the more appropriate span makes the hint more helpful.

Closes #13428.
2014-04-21 18:41:35 -07:00
Guillaume Pinot
0a0e2c36af fix and improve shootout-chameneos-redux
* fix official shootout test (spacing)
* use libgreen to improve performances
* simplify and modernize code
* remove warnings
2014-04-21 23:12:58 +02:00
bors
829c00cb09 auto merge of #13656 : TeXitoi/rust/shootout-threadring-rewrite, r=alexcrichton
* simplify the code
* remove trace to satisfy official shootout test
* use libgreen to improve performances
2014-04-21 13:06:32 -07:00
Guillaume Pinot
72655677b1 shootout-threadring rewrite
* simplify the code
* remove trace to satisfy official shootout test
* use libgreen to improve performances
2014-04-21 16:05:57 +02:00
bors
30348f4675 auto merge of #13647 : alexcrichton/rust/issue-13641, r=pcwalton
This gives a better NOTE error message when a privacy error is encountered with
a static method. Previously no note was emitted (due to lack of support), but
now a note is emitted indicating that the struct/enum itself is private.

Closes #13641
2014-04-20 16:26:26 -07:00
Alex Crichton
c33cedf359 rustc: Improve errors on private static methods
This gives a better NOTE error message when a privacy error is encountered with
a static method. Previously no note was emitted (due to lack of support), but
now a note is emitted indicating that the struct/enum itself is private.

Closes #13641
2014-04-20 12:10:46 -07:00
bors
412a18f12e auto merge of #13633 : TeXitoi/rust/shootout-fannkuch-redux-rewrite, r=alexcrichton
Less bound checking and parallelisation.  Brute speed improvement
is about 15% faster.

The unsafe block improve the brute speed by about 5%.
2014-04-20 00:31:34 -07:00
Nick Cameron
ff04aa8e38 Allow inheritance between structs.
No subtyping, no interaction with traits. Partially addresses #9912.
2014-04-20 13:41:18 +12:00
Guillaume Pinot
57d693460b shootout-fannkuch-redux rewrite
Less bound checking and parallelisation.  Brute speed improvement
is about 15% faster.
2014-04-20 03:16:58 +02:00
bors
158e0c86fe auto merge of #13604 : alexcrichton/rust/connect-timeout, r=brson
This adds a `TcpStream::connect_timeout` function in order to assist opening
connections with a timeout (cc #13523). There isn't really much design space for
this specific operation (unlike timing out normal blocking reads/writes), so I
am fairly confident that this is the correct interface for this function.

The function is marked #[experimental] because it takes a u64 timeout argument,
and the u64 type is likely to change in the future.
2014-04-19 00:56:30 -07:00
Alex Crichton
3915e17cd7 std: Add an experimental connect_timeout function
This adds a `TcpStream::connect_timeout` function in order to assist opening
connections with a timeout (cc #13523). There isn't really much design space for
this specific operation (unlike timing out normal blocking reads/writes), so I
am fairly confident that this is the correct interface for this function.

The function is marked #[experimental] because it takes a u64 timeout argument,
and the u64 type is likely to change in the future.
2014-04-19 00:47:14 -07:00
bors
5a2ecb828b auto merge of #13608 : tbu-/rust/pr_smallesthello, r=alexcrichton
It now hands `puts` a zero-terminated string, like it expects.

Fix #13603.
2014-04-18 23:36:33 -07:00
Richo Healey
919889a1d6 Replace all ~"" with "".to_owned() 2014-04-18 17:25:34 -07:00
Tobias Bucher
031212bfd9 Fix smallest-hello-world.rs interaction with puts
It now hands `puts` a zero-terminated string, like it expects.

Fix #13603.
2014-04-19 00:34:55 +02:00
Alex Crichton
675b82657e Update the rest of the compiler with ~[T] changes 2014-04-18 10:57:10 -07:00
Edward Wang
cc5be28b32 Use more precise span when reporting semicolon hint
When reporting "consider removing this semicolon" hint message, the
offending semicolon may come from macro call site instead of macro
itself. Using the more appropriate span makes the hint more helpful.

Closes #13428.
2014-04-18 22:01:11 +08:00
bors
29a39700a1 auto merge of #13525 : Ryman/rust/issue_5997, r=alexcrichton
Closes #5997.
2014-04-17 21:21:24 -07:00
bors
3f8e68686f auto merge of #13576 : lifthrasiir/rust/double-ref, r=alexcrichton
Uses the same strategy as `||` and `>>`. Closes #11227.
2014-04-17 20:01:25 -07:00
bors
0c23140aaf auto merge of #13575 : TeXitoi/rust/shootout-knucleotide-parallel, r=alexcrichton 2014-04-17 18:41:24 -07:00
bors
4c50cf38a0 auto merge of #13565 : alexcrichton/rust/issue-13560, r=brson
Syntax-only crates are no longer registered with the cstore, so there's no need
to allocate crate numbers to them. This ends up leaving gaps in the crate
numbering scheme which is not expected in the rest of the compiler.

Closes #13560
2014-04-17 15:51:27 -07:00
bors
99c258cd74 auto merge of #13261 : pnkfelix/rust/fsk-fix-12856, r=nikomatsakis
Fix #12856.

I wanted to put this up first because I wanted to get feedback about the second commit in the series, commit 8599236.  Its the more invasive part of the patch and is largely just belt-and-suspenders assertion checking; in the commit message I mentioned at least one other approach we could take here.  Or we could drop the belt-and-suspenders and just rely on the guard added in the first patch, commit 8d6a005 (which is really quite trivial on its own).

So any feedback on what would be better is appreciated.

r? @nikomatsakis
2014-04-17 12:46:26 -07:00
Kevin Butler
f829d208a3 Catch forward declarations in default type params at AST conversion. 2014-04-17 18:24:52 +01:00
Kevin Butler
52a53e8ae7 Change error for out of scope type params to be more helpful. 2014-04-17 18:24:52 +01:00
Kevin Butler
14e1fd4629 Add span to error for missing type params on enums. 2014-04-17 18:24:52 +01:00
Kevin Butler
3b9ade0f81 Tests for issue 5997 failure and success conditions.
Closes #5997.
2014-04-17 18:24:51 +01:00
Felix S. Klock II
364d82e7f3 Regression test. 2014-04-17 11:42:30 +02:00
Kang Seonghoon
676cd615d4 syntax: Parses && as & & whenever appropriate.
Closes #11227.
2014-04-17 17:48:59 +09:00
bors
18536190e1 auto merge of #13557 : FlaPer87/rust/ls-behind-z, r=brson
Closes #13549
2014-04-17 01:31:27 -07:00
Guillaume Pinot
ba99e4ce54 parallelisation of shootout-k-nucleotide 2014-04-17 09:38:55 +02:00
bors
1dec47711d auto merge of #13503 : edwardw/rust/lifetime-ice, r=nikomatsakis
When instantiating trait default methods for certain implementation,
`typeck` correctly combined type parameters from trait bound with those
from method bound, but didn't do so for lifetime parameters. Applies
the same logic to lifetime parameters.

Closes #13204
2014-04-16 20:31:25 -07:00
bors
b8d62147aa auto merge of #13418 : ktt3ja/rust/move-out-of, r=brson
This commit changes the way move errors are reported when some value is
captured by a PatIdent. First, we collect all of the "cannot move out
of" errors before reporting them, and those errors with the same "move
source" are reported together. If the move is caused by a PatIdent (that
binds by value), we add a note indicating where it is and suggest the
user to put `ref` if they don't want the value to move. This makes the
"cannot move out of" error in match expression nicer (though the extra
note may not feel that helpful in other places :P). For example, with
the following code snippet,

```rust
enum Foo {
    Foo1(~u32, ~u32),
    Foo2(~u32),
    Foo3,
}

fn main() {
    let f = &Foo1(~1u32, ~2u32);
    match *f {
        Foo1(num1, num2) => (),
        Foo2(num) => (),
        Foo3 => ()
    }
}
```

Errors before the change:

```rust
test.rs:10:9: 10:25 error: cannot move out of dereference of `&`-pointer
test.rs:10         Foo1(num1, num2) => (),
                   ^~~~~~~~~~~~~~~~
test.rs:10:9: 10:25 error: cannot move out of dereference of `&`-pointer
test.rs:10         Foo1(num1, num2) => (),
                   ^~~~~~~~~~~~~~~~
test.rs:11:9: 11:18 error: cannot move out of dereference of `&`-pointer
test.rs:11         Foo2(num) => (),
                   ^~~~~~~~~
```

After:

```rust
test.rs:9:11: 9:13 error: cannot move out of dereference of `&`-pointer
test.rs:9     match *f {
                    ^~
test.rs:10:14: 10:18 note: attempting to move value to here (to prevent the move, use `ref num1` or `ref mut num1` to capture value by reference)
test.rs:10         Foo1(num1, num2) => (),
                        ^~~~
test.rs:10:20: 10:24 note: and here (use `ref num2` or `ref mut num2`)
test.rs:10         Foo1(num1, num2) => (),
                              ^~~~
test.rs:11:14: 11:17 note: and here (use `ref num` or `ref mut num`)
test.rs:11         Foo2(num) => (),
                        ^~~
```

Close #8064
2014-04-16 13:11:30 -07:00
Alex Crichton
4ba94e2c24 rustc: Don't allocate a cnum to syntax crates
Syntax-only crates are no longer registered with the cstore, so there's no need
to allocate crate numbers to them. This ends up leaving gaps in the crate
numbering scheme which is not expected in the rest of the compiler.

Closes #13560
2014-04-16 11:42:22 -07:00
Edward Wang
daa1f5099f Combine lifetime parameters when instantiating default methods
When instantiating trait default methods for certain implementation,
`typeck` correctly combined type parameters from trait bound with those
from method bound, but didn't do so for lifetime parameters. Applies
the same logic to lifetime parameters.

Closes #13204
2014-04-17 00:38:54 +08:00
bors
baa149bcc7 auto merge of #13556 : michaelwoerister/rust/various-fixes, r=alexcrichton
This is a test case verifying that issue #12886 was indeed fixed by PR #13441 from last week.
Fixes #12886.
2014-04-16 09:36:33 -07:00
Flavio Percoco
fcdc36b142 Move --ls behind -Z ls
Closes #13549
2014-04-16 17:45:06 +02:00
bors
72869b6579 auto merge of #13547 : alexcrichton/rust/remove-priv, r=huonw
See [RFC 6](e0c741f1c6/active/0006-remove-priv.md)
2014-04-16 08:16:35 -07:00
Alex Crichton
5cfbc0e7ae rustc: Remove private enum variants
This removes the `priv` keyword from the language and removes private enum
variants as a result. The remaining use cases of private enum variants were all
updated to be a struct with one private field that is a private enum.

RFC: 0006-remove-priv

Closes #13535
2014-04-16 08:12:43 -07:00
bors
12391df5b7 auto merge of #13544 : klutzy/rust/pprust, r=alexcrichton
Fixes #12685
2014-04-16 05:11:26 -07:00
Michael Woerister
7c042cd70b debuginfo: Add a test case for issue #12886. 2014-04-16 12:22:38 +02:00
bors
61f788c772 auto merge of #13527 : huonw/rust/macro-expander-trait, r=sfackler
There's now one unified way to return things from a macro, instead of
being able to choose the `AnyMacro` trait or the `MRItem`/`MRExpr`
variants of the `MacResult` enum. This does simplify the logic handling
the expansions, but the biggest value of this is it makes macros in (for
example) type position easier to implement, as there's this single thing
to modify.

By my measurements (using `-Z time-passes` on libstd and librustc etc.),
this appears to have little-to-no impact on expansion speed. There are
presumably larger costs than the small number of extra allocations and
virtual calls this adds (notably, all `macro_rules!`-defined macros have
not changed in behaviour, since they had to use the `AnyMacro` trait
anyway).

---

Summary of changes for dynamic syntax extension maintainers:

- `MacResult` is now a trait, and is returned as `~MacResult`
- `MRExpr` & `MRItem` are now `MacExpr::new` and `MacItem:new` respectively (which return `~MacResult`s)
- `MacResult::dummy_...` is `DummyResult::any` or `DummyResult::expr`
2014-04-16 02:16:30 -07:00
Huon Wilson
99dd5911a1 syntax: unify all MacResult's into a single trait.
There's now one unified way to return things from a macro, instead of
being able to choose the `AnyMacro` trait or the `MRItem`/`MRExpr`
variants of the `MacResult` enum. This does simplify the logic handling
the expansions, but the biggest value of this is it makes macros in (for
example) type position easier to implement, as there's this single thing
to modify.

By my measurements (using `-Z time-passes` on libstd and librustc etc.),
this appears to have little-to-no impact on expansion speed. There are
presumably larger costs than the small number of extra allocations and
virtual calls this adds (notably, all `macro_rules!`-defined macros have
not changed in behaviour, since they had to use the `AnyMacro` trait
anyway).
2014-04-16 17:53:27 +10:00