Commit Graph

4510 Commits

Author SHA1 Message Date
bors df044ea4ac auto merge of #11944 : nathanielherman/rust/vec_opt, r=alexcrichton
Closes #11733
2014-02-01 07:21:23 -08:00
bors 1d494198bb auto merge of #11930 : bjz/rust/next_power_of_two, r=huonw 2014-02-01 04:11:21 -08:00
bors ac000cd8e1 auto merge of #11789 : pongad/rust/master, r=kballard
All tests passing. #5268
2014-01-31 23:31:28 -08:00
Kevin Ballard cad4fcd21b Test for null buffer in CString.len()/.iter() and fail
Also change .as_str() to fail on null buffer.
2014-01-31 21:43:09 -08:00
Virgile Andreani b9a026afba Fix minor doc typos 2014-01-31 21:43:07 -08:00
Michael Darakananda d088e5fd94 Added minmax function.
Tests ok
2014-02-01 00:27:28 -05:00
bors cc6afe1ec0 auto merge of #11768 : nikomatsakis/rust/issue-11385-cell-and-variance, r=pnkfelix
Introduce marker types for indicating variance and for opting out
of builtin bounds.

Fixes #10834.
Fixes #11385.
cc #5922.

r? @pnkfelix (since you reviewed the variance inference in the first place)
2014-01-31 19:36:41 -08:00
bors a1f157b6ee auto merge of #11885 : bnoordhuis/rust/issue11694, r=alexcrichton
EINVAL means that the requested stack size is either not a multiple
of the system page size or that it's smaller than PTHREAD_STACK_MIN.
Figure out what the case is, fix it up and retry.  If it still fails,
give up, like before.

Suggestions for future improvements:

  * don't fail!() but instead signal a condition, or
  * silently ignore the error and use a default sized stack.

Fixes #11694.

The first two commits put the framework in place, the third one contains the meat.
2014-01-31 18:21:41 -08:00
Niko Matsakis 81d8328517 Introduce marker types for indicating variance and for opting out
of builtin bounds.

Fixes #10834.
Fixes #11385.
cc #5922.
2014-01-31 21:18:48 -05:00
Brendan Zabarauskas 1f15d24243 Move int and uint overflow tests into macros 2014-02-01 13:03:02 +11:00
Brendan Zabarauskas 1388c053a8 Remove free-standing div functions in std::uint 2014-02-01 13:03:02 +11:00
Brendan Zabarauskas 4109caffc3 Remove some unused imports 2014-02-01 13:03:01 +11:00
Brendan Zabarauskas 9a3583f06d Make next_power_of_two generic for unsigned integers
Also rename `next_power_of_two_opt` to `checked_next_power_of_two`.
2014-02-01 13:02:53 +11:00
Ben Noordhuis 431edacbef Use __pthread_get_minstack() when available.
glibc >= 2.15 has a __pthread_get_minstack() function that returns
PTHREAD_STACK_MIN plus however many bytes are needed for thread-local
storage.  Use it when it's available because just PTHREAD_STACK_MIN is
not enough in applications that have big thread-local storage
requirements.

Fixes #6233.
2014-01-31 13:47:25 +01:00
Ben Noordhuis b02b5cdcf4 Retry on EINVAL from pthread_attr_setstacksize()
Enforce that the stack size is > RED_ZONE + PTHREAD_STACK_MIN.  If the
call to pthread_attr_setstacksize() subsequently fails with EINVAL, it
means that the platform requires the stack size to be a multiple of the
page size.  In that case, round up to the nearest page and retry.

Fixes #11694.
2014-01-31 13:47:25 +01:00
Ben Noordhuis 464b2e2364 Add libc::consts::os::posix01::PTHREAD_STACK_MIN
Represents the minimum size of a thread's stack.  As such, it's both
platform and architecture-specific.

I put it under posix01 even though it predates POSIX.1-2001 by some
years.  I believe it was first formalized in SUSv2.  I doubt anyone
cares, though.
2014-01-31 13:47:25 +01:00
bors 0a0f87b7b8 auto merge of #11918 : omasanori/rust/reduce-warnings, r=alexcrichton
Moving forward to green waterfall.
2014-01-31 04:21:29 -08:00
bors f910a977db auto merge of #11947 : alexcrichton/rust/osx-unwind, r=brson
On OSX 32-bit, the private fields are 5 words long, not 2. I found this
segfaulting before this change, and after this change it no longer segfaulted.
2014-01-30 23:51:28 -08:00
Alex Crichton 51b90004d9 Fix the size of the _Unwind_Exception struct
On OSX 32-bit, the private fields are 5 words long, not 2. I found this
segfaulting before this change, and after this change it no longer segfaulted.
2014-01-30 21:20:43 -08:00
bors b7f673a627 auto merge of #11784 : eminence/rust/fix_run_tests, r=alexcrichton
This test is designed to ensure that running a non-existent executable
results in a correct error message (FileNotFound in this case of this
test).  However, if you try to run an executable that doesn't exist, and
that requires searching through the $PATH, and one of the $PATH components
is not readable, then a PermissionDenied error will be returned, instead
of FileNotFound.

Using an absolute path skips the $PATH search logic in exec, thus by-passing the logic in exec that would have returned a PermissionDenied

In the specific case of my machine, /usr/bin/games was part of $PATH, but my user account wasn't in the games group (thus being unable to read /usr/bin/games)

See the man pages for execv and execve for more details.

I've tested this on Linux and OSX, and I am fairly certain that there will be no problems on Windows
2014-01-30 18:11:30 -08:00
Nathaniel Herman d9fadbc04f Make mut_last return Option instead of failing on empty vector (and add a test for mut_last) 2014-01-30 18:41:57 -05:00
Nathaniel Herman 339603426e Make pop_ref and mut_pop_ref return Option instead of failing on empty vectors 2014-01-30 18:41:43 -05:00
Nathaniel Herman d451c15057 Make shift_ref and mut_shift_ref return Option instead of failing 2014-01-30 18:41:20 -05:00
bors b3003e1e1a auto merge of #11895 : xales/rust/libstd, r=alexcrichton
Fixes #11814
2014-01-30 13:36:41 -08:00
bors 3cb72a3655 auto merge of #11672 : bjz/rust/remove-times, r=brson
`Times::times` was always a second-class loop because it did not support the `break` and `continue` operations. Its playful appeal (which I liked) was then lost after `do` was disabled for closures. It's time to let this one go.
2014-01-29 20:06:36 -08:00
Brendan Zabarauskas 729060dbb9 Remove Times trait
`Times::times` was always a second-class loop because it did not support the `break` and `continue` operations. Its playful appeal was then lost after `do` was disabled for closures. It's time to let this one go.
2014-01-30 14:52:25 +11:00
xales f17d972014 Remove seldom-used std::reference functions. 2014-01-29 20:31:03 -05:00
xales d547f7ac21 Remove double-use of logging. 2014-01-29 20:31:03 -05:00
xales d7f97e3018 Rename std::borrow to std::reference.
Fixes #11814
2014-01-29 20:31:03 -05:00
bors 704f93ff5e auto merge of #11893 : Armavica/rust/copyable-cloneable, r=huonw
I found awkward to have `MutableCloneableVector` and `CloneableIterator` on the one hand, and `CopyableVector` etc. on the other hand.

The concerned traits are:
* `CopyableVector` --> `CloneableVector`
* `OwnedCopyableVector` --> `OwnedCloneableVector`
* `ImmutableCopyableVector` --> `ImmutableCloneableVector`
* `CopyableTuple` --> `CloneableTuple`
2014-01-29 17:01:39 -08:00
OGINO Masanori 5281d874ef Append ; to #[allow(dead_code)].
Signed-off-by: OGINO Masanori <masanori.ogino@gmail.com>
2014-01-30 08:42:50 +09:00
OGINO Masanori d3270c215f Prefix _ to unused variables.
Signed-off-by: OGINO Masanori <masanori.ogino@gmail.com>
2014-01-30 08:42:50 +09:00
OGINO Masanori 96f0e9c74f Remove unused imports.
Signed-off-by: OGINO Masanori <masanori.ogino@gmail.com>
2014-01-30 08:42:50 +09:00
bors c3ae182d5c auto merge of #11754 : alexcrichton/rust/unused-result, r=brson
The general consensus is that we want to move away from conditions for I/O, and I propose a two-step plan for doing so:

1. Warn about unused `Result` types. When all of I/O returns `Result`, it will require you inspect the return value for an error *only if* you have a result you want to look at. By default, for things like `write` returning `Result<(), Error>`, these will all go silently ignored. This lint will prevent blind ignorance of these return values, letting you know that there's something you should do about them.

2. Implement a `try!` macro:

```
macro_rules! try( ($e:expr) => (match $e { Ok(e) => e, Err(e) => return Err(e) }) )
```

With these two tools combined, I feel that we get almost all the benefits of conditions. The first step (the lint) is a sanity check that you're not ignoring return values at callsites. The second step is to provide a convenience method of returning early out of a sequence of computations. After thinking about this for awhile, I don't think that we need the so-called "do-notation" in the compiler itself because I think it's just *too* specialized. Additionally, the `try!` macro is super lightweight, easy to understand, and works almost everywhere. As soon as you want to do something more fancy, my answer is "use match".

Basically, with these two tools in action, I would be comfortable removing conditions. What do others think about this strategy?

----

This PR specifically implements the `unused_result` lint. I actually added two lints, `unused_result` and `unused_must_use`, and the first commit has the rationale for why `unused_result` is turned off by default.
2014-01-29 09:46:34 -08:00
Alex Crichton c13a62593c Flag Result as #[must_use] and deal with fallout. 2014-01-29 08:35:49 -08:00
Scott Lawrence 25e7e7f807 Removing do keyword from libstd and librustc 2014-01-29 09:15:41 -05:00
Virgile Andreani 2d60691eb7 Rename CopyableTuple to CloneableTuple 2014-01-28 23:51:52 +01:00
Virgile Andreani 0c081afabd Rename ImmutableCopyableVector to ImmutableCloneableVector 2014-01-28 23:51:52 +01:00
Virgile Andreani 8642601551 Rename OwnedCopyableVector to OwnedCloneableVector 2014-01-28 23:51:52 +01:00
Virgile Andreani 8a71b53e6c Rename CopyableVector to CloneableVector 2014-01-28 23:51:52 +01:00
bors c6bd05303c auto merge of #11845 : xales/rust/libnative, r=alexcrichton
Fixes std::net test error when re-running too quickly.

Suggested by @cmr
2014-01-28 12:01:44 -08:00
bors a39be7ca2e auto merge of #11858 : huonw/rust/11841-followup, r=brson
Follow-up to #11841 which added this function.
2014-01-28 03:31:25 -08:00
xales e901c4caf3 Set SO_REUSEADDR by default in libnative.
Fixes std::net test error when re-running too quickly.
2014-01-27 20:59:15 -05:00
Huon Wilson 2e24adf521 std: comment about OOM & allocs in begin_unwind_fmt.
Follow-up to #11841 which added this function.
2014-01-28 12:19:17 +11:00
bors 760ddb3081 auto merge of #11723 : eddyb/rust/more-trans-cleanup, r=pcwalton 2014-01-27 13:26:46 -08:00
Eduard Burtescu e81ab4198c Removed take_glue from tydesc, inlining the equivalent refcount increment code instead. 2014-01-27 22:32:30 +02:00
bors feacb59466 auto merge of #11841 : huonw/rust/noinline-fail, r=alexcrichton
In two ways:
- for a plain `fail!(a)` we make the generic part of `begin_unwind` as small as possible (makes `fn main() { fail!() }` compile 2-3x faster, due to less monomorphisation bloat)
- for `fail!("format {}", "string")`, we avoid touching the generics completely by doing the formatting in a specialised function, which (with optimisations) saves a function call at the call-site of `fail!`. (This one has significantly less benefit than the first.)
2014-01-27 12:06:47 -08:00
David Manescu 28b987b99a Feature gate #[simd]
Fixes #11721
2014-01-28 01:04:15 +11:00
Huon Wilson b4bb8c0f4e std: add begin_unwind_fmt that reduces codesize for formatted fail!().
This ends up saving a single `call` instruction in the optimised code,
but saves a few hundred lines of non-optimised IR for `fn main() {
fail!("foo {}", "bar"); }` (comparing against the minimal generic
baseline from the parent commit).
2014-01-27 23:58:03 +11:00
Eduard Burtescu 15ba0c310a Demote self to an (almost) regular argument and remove the env param.
Fixes #10667 and closes #10259.
2014-01-27 14:31:24 +02:00