Commit graph

9709 commits

Author SHA1 Message Date
Huon Wilson
7bcf7fb500 Use more associated types in core::iter.
This concretely improves type inference of some cases (see included
test). I assume the compiler struggles to reason about multiple layers
of generic type parameters (even with associated-type equalities) but
*can* understand pure associated types, since they are always directly
computable from the input types.
2015-03-05 22:50:09 +11:00
Felix S. Klock II
0d5bcb14ad Switched to Box::new in many places.
Many of the modifications putting in `Box::new` calls also include a
pointer to Issue 22405, which tracks going back to `box <expr>` if
possible in the future.

(Still tried to use `Box<_>` where it sufficed; thus some tests still
have `box_syntax` enabled, as they use a mix of `box` and `Box::new`.)

Precursor for overloaded-`box` and placement-`in`; see Issue 22181.
2015-03-03 21:05:55 +01:00
Felix S. Klock II
270f0eef73 Add : Box<_> or ::Box<_> type annotations to various places.
This is the kind of change that one is expected to need to make to
accommodate overloaded-`box`.

----

Note that this is not *all* of the changes necessary to accommodate
Issue 22181.  It is merely the subset of those cases where there was
already a let-binding in place that made it easy to add the necesasry
type ascription.

(For unnamed intermediate `Box` values, one must go down a different
route; `Box::new` is the option that maximizes portability, but has
potential inefficiency depending on whether the call is inlined.)

----

There is one place worth note, `run-pass/coerce-match.rs`, where I
used an ugly form of `Box<_>` type ascription where I would have
preferred to use `Box::new` to accommodate overloaded-`box`.  I
deliberately did not use `Box::new` here, because that is already done
in coerce-match-calls.rs.

----

Precursor for overloaded-`box` and placement-`in`; see Issue 22181.
2015-03-03 20:29:01 +01:00
bors
14f0942a49 Auto merge of #22532 - pnkfelix:arith-overflow, r=pnkfelix,eddyb
Rebase and follow-through on work done by @cmr and @aatch.

Implements most of rust-lang/rfcs#560. Errors encountered from the checks during building were fixed.

The checks for division, remainder and bit-shifting have not been implemented yet.

See also PR #20795

cc @Aatch ; cc @nikomatsakis
2015-03-03 14:18:03 +00:00
Manish Goregaokar
2e15a7d92e Rollup merge of #22977 - kmcallister:issue-15778, r=sfackler
Fixes #15778.

r? @sfackler
2015-03-03 17:02:24 +05:30
Manish Goregaokar
e7cc9774b9 Rollup merge of #22970 - pnkfelix:fsk-robust-backtrace-test-against-env, r=alexcrichton
Make `test/run-pass/backtrace.rs` more robust about own host environment

Namely, I have been annoyed in the past when I have done `RUST_BACKTRACE=1 make check` only to discover (again) that such a trick causes this test to fail, because it assumes that the `RUST_BACKTRACE` environment variable is not set.

Fix #22870
2015-03-03 17:02:23 +05:30
Manish Goregaokar
d0fcb1f53c Rollup merge of #22990 - japaric:privATe, r=alexcrichton
Associated types are now treated as part of the public API by the privacy checker.

If you were exposing a private type in your public API via an associated type, make that type public:

``` diff
  pub struct PublicType { .. }

- struct Struct { .. }
+ pub struct Struct { .. }

  pub trait PublicTrait {
      type Output;

      fn foo(&self) -> Self::Output;
  }

  impl PublicTrait for PublicType {
      type Output = Struct;

      fn foo(&self) -> Struct {  // `Struct` is part of the public API, it must be marked as `pub`lic
          ..
      }
  }
```

[breaking-change]

---

r? @nikomatsakis
closes #22912
2015-03-03 17:01:16 +05:30
Manish Goregaokar
90686df18c Rollup merge of #22960 - huonw:static-assert, r=huonw
The API this exposes is a little strange (being attached to `static`s),
so it makes sense to conservatively feature gate it. If it is highly
popular, it is possible to reverse this gating.
2015-03-03 17:01:15 +05:30
Manish Goregaokar
3b30b74692 Rollup merge of #22943 - ipetkov:lint-recursion, r=alexcrichton
* The lint visitor's visit_ty method did not recurse, and had a
  reference to the now closed #10894
* The newly enabled recursion has only affected the `deprectated` lint
  which now detects uses of deprecated items in trait impls and
  function return types
* Renamed some references to `CowString` and `CowVec` to `Cow<str>` and
  `Cow<[T]>`, respectively, which appear outside of the crate which
  defines them
* Replaced a few instances of `InvariantType<T>` with
  `PhantomData<Cell<T>>`
* Disabled the `deprecated` lint in several places that
  reference/implement traits on deprecated items which will get cleaned
  up in the future
* Unfortunately, this means that if a library declares
  `#![deny(deprecated)]` and marks anything as deprecated, it will have
  to disable the lint for any uses of said item, e.g. any impl the now
  deprecated item

For any library that denies deprecated items but has deprecated items
of its own, this is a [breaking-change]

I had originally intended for the lint to ignore uses of deprecated items that are declared in the same crate, but this goes against some previous test cases that expect the lint to capture *all* uses of deprecated items, so I maintained the previous approach to avoid changing the expected behavior of the lint.

Tested locally on OS X, so hopefully there aren't any deprecated item uses behind a `cfg` that I may have missed.
2015-03-03 17:01:15 +05:30
Manish Goregaokar
185c074798 Fix backtrace tests for Linux 2015-03-03 12:10:58 +01:00
Felix S. Klock II
b85b3c9b2b Fix span typo in the arithmetic overflow for array length reporting.
Added pair of regression tests that I should have made when I thought
of doing this in the first place.
2015-03-03 12:10:58 +01:00
Felix S. Klock II
8491c82c90 Update tests for const-eval error handling changes. 2015-03-03 12:10:58 +01:00
Felix S. Klock II
e919f82da1 Address arith-overflow and error-handling in const_eval.rs.
1. Detect and report arithmetic overflow during const-expr eval.

 2. Instead `eval_const_expr_partial` returning `Err(String)`, it now
    has a dedicated enum of different cases. The main benefit of this
    is the ability to pass along an interpretable payload, namely the
    two inputs that caused an overlfow.

I attempted to minimize fallout to error output in tests, but some was
unavoidable. Those changes are in a follow-on commit.
2015-03-03 12:10:57 +01:00
Felix S. Klock II
4394720dae Fix the overflowing tests in run-fail.
* The error patterns had a typo.

* Our current constant evaluation would silently allow the overflow
  (filed as Issue 22531).

* The overflowing-mul test was accidentally doing addition instead of
  multiplication.
2015-03-03 12:10:20 +01:00
Niko Matsakis
cf18e9c331 fix test generic-extern-mangle.rs 2015-03-03 12:10:19 +01:00
Corey Richardson
cdfff9db35 rustc: implement arithmetic overflow checking
Adds overflow checking to integer addition, multiplication, and subtraction
when `-Z force-overflow-checks` is true, or if `--cfg ndebug` is not passed to
the compiler. On overflow, it panics with `arithmetic operation overflowed`.
Also adds `overflowing_add`, `overflowing_sub`, and `overflowing_mul`
intrinsics for doing unchecked arithmetic.

[breaking-change]
2015-03-03 12:09:07 +01:00
Felix S. Klock II
00ccc7af1e Make test/run-pass/backtrace.rs more robust about own host environment.
Namely, I have been annoyed in the past when I have done
`RUST_BACKTRACE=1 make check` only to discover (again) that such a
trick causes this test to fail, because it assumes that the
`RUST_BACKTRACE` environment variable is not set.
2015-03-03 12:09:06 +01:00
Jorge Aparicio
89776aee49 fix fallout 2015-03-03 01:28:23 -05:00
Jorge Aparicio
ac84af24db privacy: walk associated types in trait impls 2015-03-03 01:28:20 -05:00
Huon Wilson
c195783c05 Feature gate #[static_assert].
The API this exposes is a little strange (being attached to `static`s),
so it makes sense to conservatively feature gate it. If it is highly
popular, it is possible to reverse this gating.
2015-03-03 13:00:10 +11:00
Brian Anderson
76e9fa63ba core: Audit num module for int/uint
* count_ones/zeros, trailing_ones/zeros return u32, not usize
* rotate_left/right take u32, not usize
* RADIX, MANTISSA_DIGITS, DIGITS, BITS, BYTES are u32, not usize

Doesn't touch pow because there's another PR for it.

[breaking-change]
2015-03-02 16:12:46 -08:00
Ivan Petkov
2b03718618 Enable recursion for visit_ty in lint visitor
* The lint visitor's visit_ty method did not recurse, and had a
  reference to the now closed #10894
* The newly enabled recursion has only affected the `deprectated` lint
  which now detects uses of deprecated items in trait impls and
  function return types
* Renamed some references to `CowString` and `CowVec` to `Cow<str>` and
  `Cow<[T]>`, respectively, which appear outside of the crate which
  defines them
* Replaced a few instances of `InvariantType<T>` with
  `PhantomData<Cell<T>>`
* Disabled the `deprecated` lint in several places that
  reference/implement traits on deprecated items which will get cleaned
  up in the future
* Disabled the `exceeding_bitshifts` lint for
  compile-fail/huge-array-simple test so it doesn't shadow the expected
  error on 32bit systems
* Unfortunately, this means that if a library declares
  `#![deny(deprecated)]` and marks anything as deprecated, it will have
  to disable the lint for any uses of said item, e.g. any impl the now
  deprecated item

For any library that denies deprecated items but has deprecated items
of its own, this is a [breaking-change]
2015-03-02 15:35:48 -08:00
Keegan McAllister
daef3b9b53 Add regression tests for #15778
Fixes #15778.
2015-03-02 13:22:03 -08:00
Felix S. Klock II
c6b66034d6 Make test/run-pass/backtrace.rs more robust about own host environment.
Namely, I have been annoyed in the past when I have done
`RUST_BACKTRACE=1 make check` only to discover (again) that such a
trick causes this test to fail, because it assumes that the
`RUST_BACKTRACE` environment variable is not set.

Fix #22870
2015-03-02 18:32:39 +01:00
Niko Matsakis
00fcf79448 Remove the synthetic "region bound" from closures and instead update how
type-outlives works for closure types so that it ensures that all upvars
outlive the region in question. This gives the same guarantees but
without introducing artificial regions (and gives better error messages
to boot).
2015-03-02 05:45:41 -05:00
bors
c5142056f7 Auto merge of #22797 - alexcrichton:io-stdio, r=aturon
This is an implementation of RFC 899 and adds stdio functionality to the new
`std::io` module. Details of the API can be found on the RFC, but from a high
level:

* `io::{stdin, stdout, stderr}` constructors are now available. There are also
  `*_raw` variants for unbuffered and unlocked access.
* All handles are globally shared (excluding raw variants).
* The stderr handle is no longer buffered.
* All handles can be explicitly locked (excluding the raw variants).

The `print!` and `println!` machinery has not yet been hooked up to these
streams just yet. The `std::fmt::output` module has also not yet been
implemented as part of this commit.
2015-03-02 07:10:14 +00:00
Manish Goregaokar
69881574f7 Rollup merge of #22944 - Manishearth:patch-1, r=sfackler
Been breaking tests lately. Somehow nondeterministic?
2015-03-02 06:04:39 +05:30
Manish Goregaokar
e955f4323b Fix unknown attribute in test 2015-03-02 05:31:34 +05:30
Manish Goregaokar
c84e3a1f19 Rollup merge of #22941 - sfackler:re-disable, r=sfackler
Seems to be blocking forever
2015-03-02 04:43:32 +05:30
Steven Fackler
1f1c5d54bf Ignore issue #16671 test on android (again)
Seems to be blocking forever
2015-03-01 15:11:09 -08:00
Manish Goregaokar
85bdb31306 Rollup merge of #22777 - pnkfelix:issue-22443, r=nikomatsakis
Check for unbounded recursion during dropck.

Such recursion can be introduced by the erroneous use of non-regular types (aka types employing polymorphic recursion), which Rust does not support.

Fix #22443
2015-03-02 03:53:48 +05:30
Manish Goregaokar
fb19cd7fb7 Rollup merge of #22504 - GuillaumeGomez:audit-integer-libcore, r=Manishearth
Part of #22240.
2015-03-02 03:53:41 +05:30
Guillaume Gomez
df126589b9 Remove int/uint from libstd/lib.rs 2015-03-01 13:03:44 +01:00
Felix S. Klock II
180ef47af2 Add regression tests for issue 22443.
Fix #22443.
2015-03-01 11:16:11 +01:00
bors
0eb0ba38d0 Auto merge of #22087 - GuillaumeGomez:int-pow, r=alexcrichton
Fixes issue #22016
2015-03-01 08:59:29 +00:00
Alex Crichton
94d71f8836 std: Implement stdio for std::io
This is an implementation of RFC 899 and adds stdio functionality to the new
`std::io` module. Details of the API can be found on the RFC, but from a high
level:

* `io::{stdin, stdout, stderr}` constructors are now available. There are also
  `*_raw` variants for unbuffered and unlocked access.
* All handles are globally shared (excluding raw variants).
* The stderr handle is no longer buffered.
* All handles can be explicitly locked (excluding the raw variants).

The `print!` and `println!` machinery has not yet been hooked up to these
streams just yet. The `std::fmt::output` module has also not yet been
implemented as part of this commit.
2015-02-28 23:13:02 -08:00
bors
0905c8a5ec Auto merge of #22909 - Manishearth:rollup, r=Manishearth
r? @Manishearth
2015-03-01 06:32:54 +00:00
Manish Goregaokar
4495bdb52c Add import of usize (fixup #22901) 2015-03-01 09:49:50 +05:30
Manish Goregaokar
d9fb9765a1 Rollup merge of #22907 - dotdash:static_assert_bool, r=eddyb
static_assert is documented as working on static with type `bool`, but
we currently accept it on any const static and crash when the const has
an non-integral type.

This is a breaking-change for anyone who used static_assert on types
likes i32, which happened to work but seems like an unintended
consequence of the missing error checking.

[breaking-change]

Fixes #22056
2015-03-01 09:49:48 +05:30
Manish Goregaokar
87391ed52a Rollup merge of #22901 - thepowersgang:patch-1, r=eddyb
A misplaced uint->u32 instead of usize in fmt::Pointer. Added a basic test.
2015-03-01 09:49:43 +05:30
Guillaume Gomez
1c4fb909ff Make Int::pow() take exp as u32 instead usize 2015-03-01 01:58:55 +01:00
bors
8902936552 Auto merge of #21521 - defuz:interval-with-path, r=pnkfelix
Fixing #21475. Right now this code can not be parsed:

```rust
use m::{START, END};

fn main() {
    match 42u32 {
        m::START...m::END => {}, // error: expected one of `::`, `=>`, or `|`, found `...`
        _  => {},
    }
}

mod m {
  pub const START: u32 = 4;
  pub const END:   u32 = 14;
}
```

I fixed the parser and added test for this case, but now there are still problems with mixing literals and paths in interval:

```rust
    match 42u32 {
        0u32...m::END => {},       // mismatched types in range [E0031]
        m::START...59u32 => {},    // mismatched types in range [E0031]
        _  => {},
    }
}
```

I'll try fix this problem and need review.
2015-02-28 18:36:00 +00:00
Björn Steinbrink
d11b48c85c Error out when using static_assert on a non-boolean value
static_assert is documented as working on static with type `bool`, but
we currently accept it on any const static and crash when the const has
an non-integral type.

This is a breaking-change for anyone who used static_assert on types
likes i32, which happened to work but seems like an unintended
consequence of the missing error checking.

[breaking-change]

Fixes #22056
2015-02-28 19:28:49 +01:00
John Hodge
c22d026326 ifmt - Add a basic test for {:p} getting truncated 2015-02-28 22:51:29 +08:00
Manish Goregaokar
040a811b91 Rollup merge of #22884 - japaric:obsolete, r=alexcrichton
This is leftover from #21843

If you still have `|&:| {}` closures in your code, simply remove the `&:` part.

[breaking-change]
2015-02-28 19:19:00 +05:30
Manish Goregaokar
37760c1f25 Rollup merge of #22875 - kmcallister:maceager, r=sfackler
MacEager is a MacResult implementation for the common case where you've already built each form of AST that you might return.

Fixes #17637. Based on #18814.

This is a [breaking-change] for syntax extensions:

  * MacExpr::new becomes MacEager::expr.

  * MacPat::new becomes MacEager::pat.

  * MacItems::new becomes MacEager::items. It takes a SmallVector directly,
    not an iterator.

r? @sfackler
2015-02-28 19:18:59 +05:30
bors
6f8d831406 Auto merge of #22851 - FlaPer87:oibit-send-and-friends, r=nikomatsakis
Fixes #22828
Fixes #22629

r? @nikomatsakis
2015-02-28 11:02:32 +00:00
defuz
f84c25721e FIX #21475: mixing literals and paths in interval 2015-02-28 10:56:46 +02:00
defuz
52fa187431 FIX #21475: Interval match patterns won't parse namespace specifiers correctly 2015-02-28 10:56:46 +02:00
bors
8519e7833d Auto merge of #22839 - lifthrasiir:better-backtrace, r=alexcrichton
Fixes #20978 for supported platforms (i.e. non-Android POSIX).

This uses `backtrace_pcinfo` to inspect the DWARF debug info and list the file and line pairs for given stack frame. Such pair is not unique due to the presence of inlined functions and the updated routine correctly handles this case. The code is modelled after libbacktrace's `backtrace_full` routine.

There is one known issue with this approach. Macros, when invoked, take over the current frame and shadows the file and line pair which has invoked a macro. In particular, this makes many panicking
macros a bit harder to inspect. This really is a debuginfo problem, and the backtrace routine should print them correctly with a correct debuginfo.

Some example trace:

```
thread '<main>' panicked at 'explicit panic', /home/arachneng/Works/git/rust/src/test/run-pass/backtrace-debuginfo.rs:74
stack backtrace:
   1:         0xd964702f - sys::backtrace::write::h32d93fffb64131b2yxC
   2:         0xd9670202 - panicking::on_panic::h3a4fcb37b873aefeooM
   3:         0xd95b396a - rt::unwind::begin_unwind_inner::h576b3df5f626902dJ2L
   4:         0xd9eb88df - rt::unwind::begin_unwind::h16852273847167740350
   5:         0xd9eb8afb - aux::callback::h15056955655605709172
                        at /home/arachneng/Works/git/rust/<std macros>:3
                        at src/test/run-pass/backtrace-debuginfo-aux.rs:15
   6:         0xd9eb8caa - outer::h2cf96412459fceb6ema
                        at src/test/run-pass/backtrace-debuginfo.rs:73
                        at src/test/run-pass/backtrace-debuginfo.rs:88
   7:         0xd9ebab24 - main::h3f701287441442edasa
                        at src/test/run-pass/backtrace-debuginfo.rs:134
   8:         0xd96daba8 - rust_try_inner
   9:         0xd96dab95 - rust_try
  10:         0xd9671af4 - rt::lang_start::h7da0de9529b4c394liM
  11:         0xd8f3aec4 - __libc_start_main
  12:         0xd9eb8148 - <unknown>
  13:         0xffffffff - <unknown>
```
2015-02-28 08:30:19 +00:00