Commit Graph

40578 Commits

Author SHA1 Message Date
Manish Goregaokar
abd747cd15 Rollup merge of #23847 - bcoopers:read_clarification, r=sfackler
This introduces no functional changes except for reducing a few unnecessary operations and variables.  Vec has the behavior that, if you request space past the capacity with reserve(), it will round up to the nearest power of 2.  What that effectively means is that after the first call to reserve(16), we are doubling our capacity every time.  So using the DEFAULT_BUF_SIZE and doubling cap_size() here is meaningless and has no effect on the call to reserve().

Note that with #23842 implemented this will hopefully have a clearer API and less of a need for commenting.  If #23842 is not implemented then the most clear implementation would be to call reserve_exact(buf.capacity()) at every step (and making sure that buf.capacity() is not zero at the beginning of the function of course).

Edit- functional change now introduced.  We will now zero 16 bytes of the vector first, then double to 32, then 64, etc. until we read 64kB.  This stops us from zeroing the entire vector when we double it, some of which may be wasted work.  Reallocation still follows the doubling strategy, but the responsibility has been moved to vec.extend(), which calls reserve() and push_back().
2015-04-02 00:40:38 +05:30
Manish Goregaokar
1d17e6eb1e Rollup merge of #23844 - kvark:try_unique, r=alexcrichton
While trying to implement parallel ECS processing, I stumbled upon the need to mutate `Arc` contents. The only existed method that allowed that was `make_unique`, but it has issues:
  - it may clone the data as if nothing happened, where the program may just need to crash
  - it forces `Clone` bound, which I don't have

The new `try_unique` allows accessing the contents mutably without `Clone` bound and error out if the pointer is not unique.
2015-04-02 00:40:38 +05:30
Manish Goregaokar
02b38a2497 Rollup merge of #23066 - michaelwoerister:unreachable-if, r=pnkfelix
This PR solves #21559 by making sure that unreachable if-expressions are not further translated.

Could someone who knows their way around `trans` take a look at the changes in `controlflow.rs`? I'm not sure if any other code relies on any side-effects of translating unreachable things.

cc @nikomatsakis @nrc @eddyb
2015-04-02 00:40:38 +05:30
bors
d528aa9960 Auto merge of #23109 - nikomatsakis:closure-region-hierarchy, r=pnkfelix
Adjust internal treatment of the region hierarchy around closures. Work towards #3696.

r? @pnkfelix
2015-04-01 14:42:16 +00:00
Niko Matsakis
f15813d086 Update comments 2015-04-01 08:40:42 -04:00
Niko Matsakis
ea5138eba0 Remove the Option<> since when computing LUB since I believe that the
case where `None` was returned should never happen in practice; it
amounts to comparing regions from two unrelated hierarchies. (I was also
not able to make it happen.)
2015-04-01 08:40:42 -04:00
Niko Matsakis
a53a22eab9 Implement the new region hierarchy rules, in which regions from distinct
hierarchies are judged based on the lexical relationship of their
respective fn bodies.
2015-04-01 08:40:42 -04:00
Niko Matsakis
bc959fdb28 Add a meta-hierarchy of trees -- in future, each fn body will inhabit
its own disjoint region tree, and the new table encodes the lexical
relationships between those trees.
2015-04-01 08:40:42 -04:00
bors
8943653624 Auto merge of #23936 - pnkfelix:rollup, r=pnkfelix
This is an attempt to fix #23922
2015-04-01 10:02:37 +00:00
Felix S. Klock II
2b71aed003 Update android tests to reflect API switch from os::env to env::vars. 2015-04-01 11:59:51 +02:00
Alex Crichton
8dff0ac143 Test fixes and rebase conflicts 2015-04-01 00:36:26 -07:00
Dzmitry Malyshau
39aa668a01 Added Arc::try_unique 2015-03-31 23:44:23 -04:00
Alex Crichton
6ebb6e60b9 rollup merge of #23923: steveklabnik/gh23688
Fixes #23688

r? @alexcrichton
2015-03-31 18:06:42 -07:00
Alex Crichton
1d5ef755de rollup merge of #23921: aturon/issue-17746
Closes #17746
2015-03-31 18:06:41 -07:00
Alex Crichton
4f643d79fc rollup merge of #23863: pnkfelix/arith-oflo-const-eval
const_eval : add overflow-checking for {`+`, `-`, `*`, `/`, `<<`, `>>`}.

One tricky detail here: There is some duplication of labor between `rustc::middle::const_eval` and `rustc_trans::trans::consts`. It might be good to explore ways to try to factor out the common structure to the two passes (by abstracting over the particular value-representation used in the compile-time interpreter).

----

Update: Rebased atop #23841

Fix #22531

Fix #23030

Fix #23221

Fix #23235
2015-03-31 18:06:35 -07:00
Felix S. Klock II
2a9de1d989 dealing with fallout to the tests, in particular diffs between 32- vs 64-bit targets.
See also #23926.
2015-04-01 02:56:08 +02:00
Felix S. Klock II
2243a2cced Unify handling of checking repeat-count validity. 2015-04-01 02:56:08 +02:00
Felix S. Klock II
1973f7ebe5 Fixes to compile-fail error messages post-rebase. 2015-04-01 02:56:08 +02:00
Felix S. Klock II
1f5e45b769 Include feature core to get access to wrapping_add. 2015-04-01 02:56:08 +02:00
Felix S. Klock II
41b3c86e9a Test cases for checking arithmetic overflow during const eval. 2015-04-01 02:56:07 +02:00
Felix S. Klock II
8d54ea3ec9 Fallout from changes for overflow-checking during constant evaluation. 2015-04-01 02:56:07 +02:00
Felix S. Klock II
6808e414c7 rustc_trans::trans::consts add overflow checking 2015-04-01 02:56:07 +02:00
Felix S. Klock II
b02f7d2fac rustc::middle::const_eval : add overflow-checking for {+, -, *}.
The overflow-checking attempts to accommodate early evaluation where
we do not have type information yet.

Also, add fixme note about something that has been bothering me.
2015-04-01 02:56:07 +02:00
Felix S. Klock II
2e93e386fd rust_llvm: Add way to reflectively ask if a ValueRef is a known constant int.
Add option-returning variants to `const_to_int`/`const_to_uint` that
never assert fail. (These will be used for overflow checking from
rustc_trans::trans::consts.)
2015-04-01 02:56:07 +02:00
Felix S. Klock II
7875dae83f ty.rs improve error feedback when const-eval errs during repeat count eval. 2015-04-01 02:56:07 +02:00
Felix S. Klock II
2f7658a528 Refactored ty::ctxt so node_types mutations must go through ty methods. 2015-04-01 02:56:07 +02:00
Felix S. Klock II
60289ac7e7 Added overflowing_{div,rem,shl,shr} method implementations to WrappingOps. 2015-04-01 02:56:07 +02:00
Felix S. Klock II
792f6aa425 Fix #23890: const-eval _ as usize, _ as isize must dispatch to target type. 2015-04-01 02:55:13 +02:00
Felix S. Klock II
0b57df77b3 fix post rebase. 2015-04-01 02:55:13 +02:00
Felix S. Klock II
36b6d0ecdc Added tests for discriminant overflows. 2015-04-01 02:55:13 +02:00
Felix S. Klock II
4e04d57efa Added type-specific overflow checks when computing enum discriminant values.
Moved such overflow checking into one place (in `rustc::middle::ty`,
since it needs to be run on-demand during `const_eval` in some
scenarios), and revised `rustc_typeck` accordingly.

(Note that we only check for overflow if program did not provide a
discriminant value explicitly.)

Fix #23030

Fix #23221

Fix #23235
2015-04-01 02:55:13 +02:00
Alex Crichton
72f59732d7 Test fixes and rebase conflicts, round 3 2015-03-31 17:39:24 -07:00
Steve Klabnik
371ba00da2 Add description of + for multiple trait bounds
Fixes #23688
2015-03-31 19:45:09 -04:00
Aaron Turon
55e531dc26 Add test for #17746
Closes #17746
2015-03-31 16:22:23 -07:00
Alex Crichton
50b3ecf3bc rollup merge of #23919: alexcrichton/stabilize-io-error
Conflicts:
	src/libstd/fs/tempdir.rs
	src/libstd/io/error.rs
2015-03-31 16:18:55 -07:00
Alex Crichton
85e997adff rollup merge of #23899: steveklabnik/gh23851
Conflicts:
	src/libcore/iter.rs
2015-03-31 16:18:27 -07:00
Alex Crichton
ac77392f8a std: Stabilize last bits of io::Error
This commit stabilizes a few remaining bits of the `io::Error` type:

* The `Error::new` method is now stable. The last `detail` parameter was removed
  and the second `desc` parameter was generalized to `E: Into<Box<Error>>` to
  allow creating an I/O error from any form of error. Currently there is no form
  of downcasting, but this will be added in time.

* An implementation of `From<&str> for Box<Error>` was added to liballoc to
  allow construction of errors from raw strings.

* The `Error::raw_os_error` method was stabilized as-is.

* Trait impls for `Clone`, `Eq`, and `PartialEq` were removed from `Error` as it
  is not possible to use them with trait objects.

This is a breaking change due to the modification of the `new` method as well as
the removal of the trait implementations for the `Error` type.

[breaking-change]
2015-03-31 16:12:48 -07:00
Alex Crichton
66598656a5 rollup merge of #23920: steveklabnik/gh23881
Fixes #23881
2015-03-31 16:12:38 -07:00
Alex Crichton
9ab6cc9f32 rollup merge of #23901: steveklabnik/fix_links_str
Remove broken links that should just point to the current page, and while we're at it, re-wrap to 100 chars.
2015-03-31 16:12:36 -07:00
Steve Klabnik
8da08317a6 Move benchmark tests to unstable section
Fixes #23881
2015-03-31 19:02:32 -04:00
Alex Crichton
3422be3666 rollup merge of #23288: alexcrichton/issue-19470
This is a deprecated attribute that is slated for removal, and it also affects
all implementors of the trait. This commit removes the attribute and fixes up
implementors accordingly. The primary implementation which was lost was the
ability to compare `&[T]` and `Vec<T>` (in that order).

This change also modifies the `assert_eq!` macro to not consider both directions
of equality, only the one given in the left/right forms to the macro. This
modification is motivated due to the fact that `&[T] == Vec<T>` no longer
compiles, causing hundreds of errors in unit tests in the standard library (and
likely throughout the community as well).

Closes #19470
[breaking-change]
2015-03-31 15:59:35 -07:00
Alex Crichton
30283d45bb rollup merge of #23908: aturon/stab-more-stragglers
* The `io::Seek` trait.
* The `Iterator::{partition, unsip}` methods.
* The `Vec::into_boxed_slice` method.
* The `LinkedList::append` method.
* The `{or_insert, or_insert_with` methods in the `Entry` APIs.

r? @alexcrichton
2015-03-31 15:58:58 -07:00
Alex Crichton
a37311d486 rollup merge of #23907: alexcrichton/impl-exit
This commit is an implementation of [RFC #1011][rfc] which adds an `exit`
function to the standard library for immediately terminating the current process
with a specified exit code.

[rfc]: https://github.com/rust-lang/rfcs/pull/1011

Closes #23914
2015-03-31 15:58:57 -07:00
Alex Crichton
0cac5b6158 rollup merge of #23906: steveklabnik/spellin 2015-03-31 15:58:57 -07:00
Alex Crichton
82889f709e rollup merge of #23902: freebroccolo/master 2015-03-31 15:58:57 -07:00
Alex Crichton
30532884f8 Test fixes and rebase conflicts, round 2 2015-03-31 15:56:33 -07:00
Alex Crichton
554946c81e rollup merge of #23873: alexcrichton/remove-deprecated
Conflicts:
	src/libcollectionstest/fmt.rs
	src/libcollectionstest/lib.rs
	src/libcollectionstest/str.rs
	src/libcore/error.rs
	src/libstd/fs.rs
	src/libstd/io/cursor.rs
	src/libstd/os.rs
	src/libstd/process.rs
	src/libtest/lib.rs
	src/test/run-pass-fulldeps/compiler-calls.rs
2015-03-31 15:54:44 -07:00
Alex Crichton
e10ee2c857 rollup merge of #23879: seanmonstar/del-from-error
Conflicts:
	src/libcore/error.rs
2015-03-31 15:53:39 -07:00
Alex Crichton
da04788efc rollup merge of #23875: aturon/revise-convert-2
* Marks `#[stable]` the contents of the `std::convert` module.

* Added methods `PathBuf::as_path`, `OsString::as_os_str`,
  `String::as_str`, `Vec::{as_slice, as_mut_slice}`.

* Deprecates `OsStr::from_str` in favor of a new, stable, and more
  general `OsStr::new`.

* Adds unstable methods `OsString::from_bytes` and `OsStr::{to_bytes,
  to_cstring}` for ergonomic FFI usage.

[breaking-change]

r? @alexcrichton
2015-03-31 15:53:26 -07:00
Alex Crichton
94137a37e9 Test fixes and rebase conflicts, round 1 2015-03-31 15:53:25 -07:00