Commit graph

8765 commits

Author SHA1 Message Date
Alex Crichton
33533712c7 rollup merge of #20517: nikomatsakis/safety-issue-19997
Fixes various safety issues.

r? @aturon
2015-01-05 18:37:24 -08:00
Alex Crichton
cc0697ec9e rollup merge of #20511: csouth3/derive-lint
`#[deriving]` has been changed to `#[derive]`, so we should update this lint accordingly so that it remains consistent with the language.

Also register the rename with the LintStore.

I've changed the one reference to `raw_pointer_deriving` that occurs in the tests (as well as renamed the file appropriately), but the rest of the `raw_pointer_deriving`s in the Rust codebase will need to wait for a snapshot to be changed because stage0 doesn't know about the new lint name.  I'll take care of the remaining renaming after the next snapshot.

Closes #20498.
2015-01-05 18:37:23 -08:00
Alex Crichton
25d5a3a194 rollup merge of #20507: alexcrichton/issue-20444
This commit is an implementation of [RFC 494][rfc] which removes the entire
`std::c_vec` module and redesigns the `std::c_str` module as `std::ffi`.

[rfc]: https://github.com/rust-lang/rfcs/blob/master/text/0494-c_str-and-c_vec-stability.md

The interface of the new `CString` is outlined in the linked RFC, the primary
changes being:

* The `ToCStr` trait is gone, meaning the `with_c_str` and `to_c_str` methods
  are now gone. These two methods are replaced with a `CString::from_slice`
  method.
* The `CString` type is now just a wrapper around `Vec<u8>` with a static
  guarantee that there is a trailing nul byte with no internal nul bytes. This
  means that `CString` now implements `Deref<Target = [c_char]>`, which is where
  it gains most of its methods from. A few helper methods are added to acquire a
  slice of `u8` instead of `c_char`, as well as including a slice with the
  trailing nul byte if necessary.
* All usage of non-owned `CString` values is now done via two functions inside
  of `std::ffi`, called `c_str_to_bytes` and `c_str_to_bytes_with_nul`. These
  functions are now the one method used to convert a `*const c_char` to a Rust
  slice of `u8`.

Many more details, including newly deprecated methods, can be found linked in
the RFC. This is a:

[breaking-change]
Closes #20444
2015-01-05 18:37:22 -08:00
Alex Crichton
743d926d9e rollup merge of #20488: ltratt/nondeterministic_tempdir
The previous scheme made it possible for another user/attacker to cause the
temporary directory creation scheme to panic. All you needed to know was the pid
of the process you wanted to target ('other_pid') and the suffix it was using
(let's pretend it's 'sfx') and then code such as this would, in essence, DOS it:

    for i in range(0u, 1001) {
        let tp = &Path::new(format!("/tmp/rs-{}-{}-sfx", other_pid, i));
        match fs::mkdir(tp, io::USER_RWX) { _ => () }
    }

Since the scheme only 1000 times to create a temporary directory before dying,
the next time the attacked process called TempDir::new("sfx") after that would
typically cause a panic. Of course, you don't necessarily need an attacker to
cause such a DOS: creating 1000 temporary directories without closing any of the
previous would be enough to DOS yourself.

This patch broadly follows the OpenBSD implementation of mkstemp. It uses the
operating system's random number generator to produce random directory names
that are impractical to guess (and, just in case someone manages to do that, it
retries creating the directory for a long time before giving up; OpenBSD
retries INT_MAX times, although 1<<31 seems enough to thwart even the most
patient attacker).

As a small additional change while the file name is changing, this patch also
makes the argument that TempDir::new takes a prefix rather than a suffix.
This is because 1) it more closely matches what mkstemp and friends do 2)
if you're going to have a deterministic part of a filename, you really want it at
the beginning so that shell completion is useful.
2015-01-05 18:37:20 -08:00
Alex Crichton
88b4c8e0d3 rollup merge of #20465: nikomatsakis/assoc-types-regions-20303
Treat associated types the same as type parameters when it comes to region bounding. Fixes #20303.

Strictly speaking, this is a [breaking-change] (if you are using
associated types). You are no longer free to wantonly violate the type
system rules by closing associated types into objects without any form
of region bound. Instead you should add region bounds like `T::X :
'a`, just as you would with a normal type parameter.

r? @aturon
2015-01-05 18:36:34 -08:00
Alex Crichton
3d9923d0d5 rollup merge of #20424: jroesch/tuple-struct-where-clause-fix
Fixes #17904. All the cases that I believe we should support are detailed in the test case, let me know if there is there is any more desired behavior. cc @japaric.

r? @nikomatsakis or whoever is appropriate.
2015-01-05 18:36:30 -08:00
Alex Crichton
7f4f79cbd7 rollup merge of #20099: P1start/parse-more-macro-ops
Closes #20093.
2015-01-05 18:36:25 -08:00
Jorge Aparicio
a55011e788 fix tests 2015-01-05 17:22:18 -05:00
Jorge Aparicio
ec11f66dbf replace f.call_mut(a, b, ..) with f(a, b, ..) 2015-01-05 17:22:18 -05:00
Niko Matsakis
c98814b124 Correctly "detuple" arguments when creating trait object shims for a trait method with rust-call ABI. 2015-01-05 17:22:18 -05:00
Niko Matsakis
f97b124a44 Fix ICE caused by forgotten bcx 2015-01-05 17:22:18 -05:00
Jorge Aparicio
a9ea4d0127 fix benchmarks 2015-01-05 17:22:17 -05:00
Jorge Aparicio
ef726591f8 fix debuginfo tests 2015-01-05 17:22:17 -05:00
Jorge Aparicio
1bbeb37582 fix pretty tests 2015-01-05 17:22:17 -05:00
Jorge Aparicio
d6a948e8f4 fix run-make test 2015-01-05 17:22:17 -05:00
Jorge Aparicio
7d5b0454e9 fix cfail tests 2015-01-05 17:22:17 -05:00
Jorge Aparicio
ca17d08126 fix rpass tests 2015-01-05 17:22:16 -05:00
bors
f11f3e7bae auto merge of #20572 : nikomatsakis/rust/assoc-supertrait-stuff, r=brson
The first few commits in the PR are just general refactoring. I was intending them for some other code I didn't get around to writing yet, but might as well land them now. 

cc @japaric

Fixes #19541
2015-01-05 20:02:14 +00:00
Niko Matsakis
5caf847b3f Add a test for issue #18865. Fixes #18865. 2015-01-05 11:31:37 -05:00
Niko Matsakis
540a7777b8 Don't ICE just because an impl is missing an associated type. Trust in the other compiler passes.
Fixes #17359.
2015-01-05 11:31:37 -05:00
Alex Crichton
ec7a50d20d std: Redesign c_str and c_vec
This commit is an implementation of [RFC 494][rfc] which removes the entire
`std::c_vec` module and redesigns the `std::c_str` module as `std::ffi`.

[rfc]: https://github.com/rust-lang/rfcs/blob/master/text/0494-c_str-and-c_vec-stability.md

The interface of the new `CString` is outlined in the linked RFC, the primary
changes being:

* The `ToCStr` trait is gone, meaning the `with_c_str` and `to_c_str` methods
  are now gone. These two methods are replaced with a `CString::from_slice`
  method.
* The `CString` type is now just a wrapper around `Vec<u8>` with a static
  guarantee that there is a trailing nul byte with no internal nul bytes. This
  means that `CString` now implements `Deref<Target = [c_char]>`, which is where
  it gains most of its methods from. A few helper methods are added to acquire a
  slice of `u8` instead of `c_char`, as well as including a slice with the
  trailing nul byte if necessary.
* All usage of non-owned `CString` values is now done via two functions inside
  of `std::ffi`, called `c_str_to_bytes` and `c_str_to_bytes_with_nul`. These
  functions are now the one method used to convert a `*const c_char` to a Rust
  slice of `u8`.

Many more details, including newly deprecated methods, can be found linked in
the RFC. This is a:

[breaking-change]
Closes #20444
2015-01-05 08:00:13 -08:00
Niko Matsakis
c8868942e8 Treat associated types the same as type parameters when it comes to region bounding. Fixes #20303.
Strictly speaking, this is a [breaking-change] (if you are using
associated types). You are no longer free to wantonly violate the type
system rules by closing associated types into objects without any form
of region bound. Instead you should add region bounds like `T::X :
'a`, just as you would with a normal type parameter.
2015-01-05 10:14:35 -05:00
Niko Matsakis
928bb2be8f Improve test to include a projection, per @huonw's suggestion. 2015-01-05 09:14:03 -05:00
Niko Matsakis
57aaa9bf87 Make supertrait references work in object types too. 2015-01-05 07:11:48 -05:00
Niko Matsakis
9989288438 Permit bindings of (and references to) associated types defined in supertraits. 2015-01-05 07:11:48 -05:00
Laurence Tratt
2c44195895 Make temporary directory names non-deterministic.
The previous scheme made it possible for another user/attacker to cause the
temporary directory creation scheme to panic. All you needed to know was the pid
of the process you wanted to target ('other_pid') and the suffix it was using
(let's pretend it's 'sfx') and then code such as this would, in essence, DOS it:

    for i in range(0u, 1001) {
        let tp = &Path::new(format!("/tmp/rs-{}-{}-sfx", other_pid, i));
        match fs::mkdir(tp, io::USER_RWX) { _ => () }
    }

Since the scheme retried only 1000 times to create a temporary directory before
dying, the next time the attacked process called TempDir::new("sfx") after that
would typically cause a panic. Of course, you don't necessarily need an attacker
to cause such a DOS: creating 1000 temporary directories without closing any of
the previous would be enough to DOS yourself.

This patch broadly follows the OpenBSD implementation of mkstemp. It uses the
operating system's random number generator to produce random directory names
that are impractical to guess (and, just in case someone manages to do that, it
retries creating the directory for a long time before giving up; OpenBSD
retries INT_MAX times, although 1<<31 seems enough to thwart even the most
patient attacker).

As a small additional change, this patch also makes the argument that
TempDir::new takes a prefix rather than a suffix. This is because 1) it more
closely matches what mkstemp and friends do 2) if you're going to have a
deterministic part of a filename, you really want it at the beginning so that
shell completion is useful.
2015-01-05 10:19:19 +00:00
Jared Roesch
c02fac471a Refactor struct parsing and add tests 2015-01-05 00:46:01 -08:00
Alex Crichton
0cb7a4062a serialize: Use assoc types + less old_orphan_check
This commit moves the libserialize crate (and will force the hand of the
rustc-serialize crate) to not require the `old_orphan_check` feature gate as
well as using associated types wherever possible. Concretely, the following
changes were made:

* The error type of `Encoder` and `Decoder` is now an associated type, meaning
  that these traits have no type parameters.

* The `Encoder` and `Decoder` type parameters on the `Encodable` and `Decodable`
  traits have moved to the corresponding method of the trait. This movement
  alleviates the dependency on `old_orphan_check` but implies that
  implementations can no longer be specialized for the type of encoder/decoder
  being implemented.

Due to the trait definitions changing, this is a:

[breaking-change]
2015-01-04 22:59:26 -08:00
bors
ed22606c83 auto merge of #20285 : FlaPer87/rust/oibit-send-and-friends, r=nikomatsakis
This commit introduces the syntax for negative implementations of traits
as shown below:

`impl !Trait for Type {}`

cc #13231
Part of RFC rust-lang/rfcs#127

r? @nikomatsakis
2015-01-05 04:20:46 +00:00
Jared Roesch
c54932cb12 Fix the parsing of where-clauses for structs 2015-01-04 17:33:31 -08:00
Flavio Percoco
c062fac835 Put negative trait implemtations behind a feature gate 2015-01-04 23:16:14 +01:00
Flavio Percoco
8b883ab268 Add syntax for negative implementations of traits
This commit introduces the syntax for negative implmenetations of traits
as shown below:

`impl !Trait for Type {}`

cc #13231
Part of RFC #3
2015-01-04 23:16:13 +01:00
Niko Matsakis
9b820d0d63 Correct the subtyping relations created by the pattern typechecking
code. Previously we were creating a subtyping relation in the wrong
direction. We now just unify types, which is stronger than necessary
but turns out fine.

Fixes #19552.
Fixes #19997.
2015-01-04 17:03:08 -05:00
bors
589c38a3af Merge pull request #20515 from tshepang/modernise-ping-pong-benchmark
bench: remove warnings from rt-messaging-ping-pong.rs

Reviewed-by: alexcrichton
2015-01-04 21:36:41 +00:00
bors
e9818564bd Merge pull request #20295 from eddyb/poly-const
Allow paths in constants to refer to polymorphic items.

Reviewed-by: nikomatsakis
2015-01-04 21:36:33 +00:00
bors
b2085d9674 auto merge of #20527 : nikomatsakis/rust/japaric-boxed-uc-ice-fix, r=aturon
This fixes an ICE that japaric was encountering in the wf checker.

r? @aturon
2015-01-04 19:06:46 +00:00
Niko Matsakis
71cdf76240 Fix ICE in WF checker when we encounter bound regions in object types. 2015-01-04 12:01:19 -05:00
Eduard Burtescu
9a90d436f6 rustc: allow paths in constants to refer to polymorphic items. 2015-01-04 18:47:58 +02:00
bors
260e46115b auto merge of #20443 : nikomatsakis/rust/autoderef-overloaded-calls, r=pcwalton
Use autoderef for call notation. This is consistent in that we now autoderef all postfix operators (`.`, `[]`, and `()`). It also means you can call closures without writing `(*f)()`. Note that this is rebased atop the rollup, so only the final commit is relevant.

r? @pcwalton
2015-01-04 16:36:41 +00:00
bors
856b90c400 auto merge of #20393 : japaric/rust/impl-any, r=aturon
Needs a snapshot that contains PR #20385

r? @aturon
2015-01-04 11:01:04 +00:00
Tshepang Lekhonkhobe
f863e82b32 bench: remove warnings from rt-messaging-ping-pong.rs 2015-01-04 11:45:22 +02:00
Alex Crichton
7d8d06f86b Remove deprecated functionality
This removes a large array of deprecated functionality, regardless of how
recently it was deprecated. The purpose of this commit is to clean out the
standard libraries and compiler for the upcoming alpha release.

Some notable compiler changes were to enable warnings for all now-deprecated
command line arguments (previously the deprecated versions were silently
accepted) as well as removing deriving(Zero) entirely (the trait was removed).

The distribution no longer contains the libtime or libregex_macros crates. Both
of these have been deprecated for some time and are available externally.
2015-01-03 23:43:57 -08:00
Chase Southwood
8cebb1f644 Rename raw_pointer_deriving lint to raw_pointer_derive
Due to the `#[deriving]` -> `#[derive]` switch.
2015-01-04 00:39:42 -06:00
Jorge Aparicio
5172b8046a remove Any[Mut]RefExt traits in favor of impl Any 2015-01-03 23:01:33 -05:00
Jorge Aparicio
351409a622 sed -i -s 's/#\[deriving(/#\[derive(/g' **/*.rs 2015-01-03 22:54:18 -05:00
Jorge Aparicio
8c5bb80d9b sed -i -s 's/\bmod}/self}/g' **/*.rs 2015-01-03 22:42:37 -05:00
Jorge Aparicio
56dcbd17fd sed -i -s 's/\bmod,/self,/g' **/*.rs 2015-01-03 22:42:21 -05:00
bors
c6c786671d auto merge of #20490 : japaric/rust/assoc-types, r=aturon
closes #20486 
closes #20474 
closes #20441

[breaking-change]

The `Index[Mut]` traits now have one less input parameter, as the return type of the indexing operation is an associated type. This breaks all existing implementations.

---

binop traits (`Add`, `Sub`, etc) now have an associated type for their return type. Also, the RHS input parameter now defaults to `Self` (except for the `Shl` and `Shr` traits). For example, the `Add` trait now looks like this:

``` rust
trait Add<Rhs=Self> {
    type Output;

    fn add(self, Rhs) -> Self::Output;
}
```

The `Neg` and `Not` traits now also have an associated type for their return type.

This breaks all existing implementations of these traits.

---
Affected traits:

- `Iterator { type Item }`
- `IteratorExt` no input/output types, uses `<Self as Iterator>::Item` in its methods
- `DoubleEndedIterator` no input/output types, uses `<Self as Iterator>::Item` in its methods
- `DoubleEndedIteratorExt` no input/output types, uses `<Self as Iterator>::Item` in its methods
- `RandomAccessIterator` no input/output types
- `ExactSizeIterator` no input/output types, uses `<Self as Iterator>::Item` in its methods

This breaks all the implementations of these traits.
2015-01-04 00:50:59 +00:00
Jorge Aparicio
ce8f748b4c add feature gate to some benchmarks 2015-01-03 17:29:27 -05:00
Jorge Aparicio
9aadbadb93 fix rpass/cfail tests 2015-01-03 16:30:49 -05:00