Commit Graph

3857 Commits

Author SHA1 Message Date
Manish Goregaokar
cf2c14f81b Rollup merge of #22730 - ipetkov:lint-docs, r=alexcrichton
This is a breaking change if missing docs are forbidden in any module or crate.

I had to add documentation to undocumented associated types in libstd and libcore, please let me know if the documentation is inadequate anywhere!

Fixes #20648
2015-02-24 12:08:35 +05:30
Manish Goregaokar
eaacc7aad5 Rollup merge of #22632 - nagisa:kill-show-string-with-fire!, r=alexcrichton
Toss the tomatoes!

r? @aturon

Fixes #22478. The underlying bug(?) behind that issue still exists though and there’s another issue that reports it.
2015-02-24 12:08:33 +05:30
Manish Goregaokar
47377904a1 Rollup merge of #22680 - FlaPer87:type_builtin, r=nikomatsakis
Fixes #20302
2015-02-24 12:08:21 +05:30
Ivan Petkov
fcf70230eb Properly reimplement unsafe-code lint to honor changing lint attributes 2015-02-23 22:32:58 -08:00
bors
2890508d97 Auto merge of #21689 - FlaPer87:oibit-send-and-friends, r=nikomatsakis
This is one more step towards completing #13231

This series of commits add support for default trait implementations. The changes in this PR don't break existing code and they are expected to preserve the existing behavior in the compiler as far as built-in bounds checks go.

The PR adds negative implementations of `Send`/`Sync` for some types and it removes the special cases for `Send`/`Sync` during the trait obligations checks. That is, it now fully relies on the traits check rather than lang items.

Once this patch lands and a new snapshot is created, it'll be possible to add default impls for `Send` and `Sync` and remove entirely the use of `BuiltinBound::{BoundSend,BoundSync}` for positive implementations as well.

This PR also removes the restriction on negative implementations. That is, it is now possible to add negative implementations for traits other than `Send`/`Sync`
2015-02-24 02:22:44 +00:00
Niko Matsakis
d443f98f22 Apply borrowck to fns that appear in const declarations.
Fixes #22382.
2015-02-23 17:22:51 -05:00
Niko Matsakis
fd9f7da68e Make traits with by-value-self be considered object safe. 2015-02-23 15:28:27 -05:00
Niko Matsakis
fe512dacc8 Remove awful hack concerning Trait impl Trait in method resolution code that I've been longing to remove for quite some time. 2015-02-23 15:28:27 -05:00
Niko Matsakis
8f5d225933 Extend object safety so that methods with Sized:Self are exempt. 2015-02-23 15:28:26 -05:00
Manish Goregaokar
3b69d1b941 Rollup merge of #22490 - nagisa:inline-args, r=alexcrichton 2015-02-23 11:43:58 -08:00
Manish Goregaokar
f1a6d67e5e Rollup merge of #22544 - bombless:fix-pattern, r=pnkfelix 2015-02-23 11:43:57 -08:00
Manish Goregaokar
8f921502bd Rollup merge of #22667 - dotdash:retslot_cast.rs, r=huonw
We already do this for the function arguments, but miss it for the
retslot pointer, which can lead to LLVM assertions because the retslot
has the wrong type.

Fixes #22663
2015-02-23 11:43:56 -08:00
Ivan Petkov
2e9521c126 Update missing-doc test to explicitly check errors
This way we can be sure the correct error is displayed for the
respective code type.
2015-02-23 11:33:52 -08:00
Ivan Petkov
717a91d665 Update missing-docs lint to check associated type declarations
[breaking-change]

Fixes #20648
2015-02-23 11:07:37 -08:00
Manish Goregaokar
af81ec2f43 Rollup merge of #22559 - kmcallister:borrowck-readme, r=nikomatsakis
And minor fixes to other docs.

r? @nikomatsakis
2015-02-23 23:28:46 +05:30
Flavio Percoco
7ff11d7be8 Unify lifetime/type arguments error messages for (non-)builtin bounds 2015-02-22 16:31:19 +01:00
Flavio Percoco
a1945197c3 continue when builtin bounds are registered 2015-02-22 16:31:19 +01:00
Ahmed Charles
3ebdbac265 Do not permit type parameters on builtin bounds. 2015-02-22 16:31:19 +01:00
Niko Matsakis
3dcc631dee Add additional test case for superregion 2015-02-22 13:17:50 +01:00
Björn Steinbrink
b593c60c33 Add missing cast for retslots in case of "subtyping" due to trait bounds
We already do this for the function arguments, but miss it for the
retslot pointer, which can lead to LLVM assertions because the retslot
has the wrong type.

Fixes #22663
2015-02-22 12:47:27 +01:00
Simonas Kazlauskas
c9d0967383 Validate inline attribute arguments 2015-02-22 13:44:28 +02:00
James Miller
4bae133070 revise handling of match expressions so that arms branch to next arm.
Update the graphviz tests accordingly.

Fixes #22073. (Includes regression test for the issue.)

(Factoring of aatch CFG code, Part 4.)
2015-02-22 12:43:08 +01:00
bors
dcc6ce2c77 Auto merge of #22574 - huonw:remove-lame-statics, r=alexcirchton
Add a basic test that checks that the types catch the most glaring
errors that could occur.

cc #22444
2015-02-22 10:27:08 +00:00
Flavio Percoco
753db88914 allow negative impls for traits that have a default impl 2015-02-22 02:14:27 +01:00
Flavio Percoco
d021c55fb9 Restore the coherence visitor and fix fallouts 2015-02-22 02:14:27 +01:00
Niko Matsakis
3343e9c169 Add new test for impl precedence and remove unnecessary coherence rules that prevent the test from compiling. 2015-02-22 02:14:27 +01:00
Flavio Percoco
6d1844c806 Record default implementations in a separate step 2015-02-22 02:14:27 +01:00
Niko Matsakis
640000a7c0 fix treatment of parameters and associated types 2015-02-22 02:14:27 +01:00
Niko Matsakis
24bdce4bbf some comments and nits 2015-02-22 02:14:26 +01:00
Flavio Percoco
64d33d892a check supertraits 2015-02-22 02:14:26 +01:00
Niko Matsakis
f7a75e0341 Add new test case showing that supertraits are not enough 2015-02-22 02:14:26 +01:00
Flavio Percoco
7213ef1a8f Test all the things 2015-02-22 02:14:26 +01:00
Flavio Percoco
0be1e430cf Fix error codes 2015-02-22 02:14:26 +01:00
Manish Goregaokar
d316a34ec2 Fix lint-unsafe-code test from #22542 2015-02-22 01:53:18 +05:30
Manish Goregaokar
494dbe9c07 Rollup merge of #22516 - leejunseok:nonpub_field_sugg, r=jakub-
closes #22421
2015-02-22 01:52:22 +05:30
Manish Goregaokar
98ec45ee0b Rollup merge of #22542 - ipetkov:unsafe-lint, r=huonw
This allows warning or forbidding all uses of unsafe code, whereas
previously only unsafe blocks were caught by the lint.

The lint has been renamed from `unsafe-blocks` to `unsafe-code` to
reflect its new purpose.

This is a minor [breaking-change]

Closes #22430
2015-02-22 01:50:53 +05:30
Manish Goregaokar
f308550c16 Rollup merge of #22527 - dotdash:if-loop, r=huonw
In `if loop {} {}`, the `if` is actually unreachable, but we didn't
handle that correctly and when trying to translate the `if` we tried to
branch on the \"return value\" of the loop expression, which is not an
`i1` and therefore triggered an LLVM assertion.
2015-02-22 01:47:28 +05:30
Simonas Kazlauskas
e3104d8f0c Kill fmt::Show and fmt::String with fire!
Toss the tomatoes!
2015-02-21 16:27:55 +02:00
Huon Wilson
380d23b5d4 Remove 'static bound from sync::mpsc, Mutex and RwLock.
Adds some basic tests to check that the types still catch the most
glaring errors that could occur.

cc #22444.
2015-02-21 16:51:49 +11:00
Junseok Lee
9b67d07acc added license header to test 2015-02-20 16:16:09 -08:00
Junseok Lee
3419d51199 added local crate struct with priv field to test 2015-02-20 16:16:09 -08:00
Junseok Lee
85069e0529 added 'suggest-private-fields' cfail test 2015-02-20 16:16:09 -08:00
Ivan Petkov
be0dc49675 Unsafe lint will also check for other unsafe code
Checks include declaration/implementation of unsafe functions, traits,
and methods.

This allows warning or forbidding all uses of unsafe code, whereas
previously only unsafe blocks were caught by the lint.

The lint has been renamed from `unsafe-blocks` to `unsafe-code` to
reflect its new purpose.

This is a minor [breaking-change]

Closes #22430
2015-02-19 20:43:09 -08:00
bombless
0643494bc4 Fix tests 2015-02-20 03:10:31 +08:00
Alex Crichton
0cd54b85ef Round 5 test fixes and rebase conflicts 2015-02-19 07:03:18 -08:00
bombless
61ea8b33d0 Fix issue #22426 #22447 2015-02-19 22:01:57 +08:00
Björn Steinbrink
07c0faa407 Fix an ICE when translating if loop {} {}
In `if loop {} {}`, the `if` is actually unreachable, but we didn't
handle that correctly and when trying to translate the `if` we tried to
branch on the "return value" of the loop expression, which is not an
`i1` and therefore triggered an LLVM assertion.
2015-02-19 11:46:47 +01:00
bors
149f002437 Auto merge of #22497 - nikomatsakis:suffixes, r=alexcrichton
The old suffixes now issue warnings unless a feature-gate is given.

Fixes #22496.

r? @alexcrichton
2015-02-19 07:59:27 +00:00
Keegan McAllister
f051e13238 Fix references to doc.rs throughout the code 2015-02-18 19:54:45 -08:00
Alex Crichton
cb29c468f3 Fix from niko for cfail tests 2015-02-18 18:01:03 -08:00
Alex Crichton
b7c0813eb7 Round 4 test fixes and rebase conflicts 2015-02-18 17:57:35 -08:00
Niko Matsakis
63f51ee90c Exempt phantom fns from the object safety check 2015-02-18 16:38:17 -08:00
Alex Crichton
d6e939a2df Round 3 test fixes and conflicts 2015-02-18 16:34:04 -08:00
Alex Crichton
1506b34e0c rollup merge of #22286: nikomatsakis/variance-4b
Conflicts:
	src/librustc/middle/infer/combine.rs
	src/librustc_typeck/check/wf.rs
2015-02-18 15:52:01 -08:00
Alex Crichton
231eeaa35b rollup merge of #22502: nikomatsakis/deprecate-bracket-bracket
Conflicts:
	src/libcollections/slice.rs
	src/libcollections/str.rs
	src/librustc/middle/lang_items.rs
	src/librustc_back/rpath.rs
	src/librustc_typeck/check/regionck.rs
	src/libstd/ffi/os_str.rs
	src/libsyntax/diagnostic.rs
	src/libsyntax/parse/parser.rs
	src/libsyntax/util/interner.rs
	src/test/run-pass/regions-refcell.rs
2015-02-18 15:48:40 -08:00
Alex Crichton
2cdbd288ac rollup merge of #22210: aturon/stab-final-borrow
Conflicts:
	src/libcollections/btree/map.rs
	src/libcollections/str.rs
	src/libcollections/vec.rs
	src/libcore/borrow.rs
	src/libcore/hash/mod.rs
	src/libstd/collections/hash/map.rs
	src/libstd/collections/hash/set.rs
2015-02-18 15:34:48 -08:00
Aaron Turon
a99e698628 Stabilize std::borrow
This commit stabilizes `std::borrow`, making the following modifications
to catch up the API with language changes:

* It renames `BorrowFrom` to `Borrow`, as was originally intended (but
  blocked for technical reasons), and reorders the parameters
  accordingly.

* It moves the type parameter of `ToOwned` to an associated type. This
  is somewhat less flexible, in that each borrowed type must have a
  unique owned type, but leads to a significant simplification for
  `Cow`. Flexibility can be regained by using newtyped slices, which is
  advisable for other reasons anyway.

* It removes the owned type parameter from `Cow`, making the type much
  less verbose.

* Deprecates the `is_owned` and `is_borrowed` predicates in favor of
  direct matching.

The above API changes are relatively minor; the basic functionality
remains the same, and essentially the whole module is now marked
`#[stable]`.

[breaking-change]
2015-02-18 15:23:58 -08:00
Niko Matsakis
64cd30e0ca Declare &foo[] to be obsolete syntax. Modify the obsolete mechanism to
support warnings.
2015-02-18 17:35:50 -05:00
Alex Crichton
5250a82f79 rollup merge of #22497: nikomatsakis/suffixes
Conflicts:
	src/librustc_trans/trans/tvec.rs
2015-02-18 14:35:01 -08:00
Alex Crichton
9774b7e64b rollup merge of #22480: alexcrichton/hashv3
This commit is an implementation of [RFC 823][rfc] which is another pass over
the `std::hash` module for stabilization. The contents of the module were not
entirely marked stable, but some portions which remained quite similar to the
previous incarnation are now marked `#[stable]`. Specifically:

[rfc]: https://github.com/rust-lang/rfcs/blob/master/text/0823-hash-simplification.md

* `std::hash` is now stable (the name)
* `Hash` is now stable
* `Hash::hash` is now stable
* `Hasher` is now stable
* `SipHasher` is now stable
* `SipHasher::new` and `new_with_keys` are now stable
* `Hasher for SipHasher` is now stable
* Many `Hash` implementations are now stable

All other portions of the `hash` module remain `#[unstable]` as they are less
commonly used and were recently redesigned.

This commit is a breaking change due to the modifications to the `std::hash` API
and more details can be found on the [RFC][rfc].

Closes #22467
[breaking-change]
2015-02-18 14:32:03 -08:00
Alex Crichton
261364d45d rollup merge of #22452: nikomatsakis/issue-22040-18956-Self
The big change here is that we update the object-safety rules to prohibit references to `Self` in the supertrait listing. See #22040 for the motivation. The other change is to handle the interaction of defaults that reference `Self` and object types (where `Self` is erased). We force users to give an explicit type in that scenario.

r? @aturon
2015-02-18 14:32:02 -08:00
Alex Crichton
754db0f7ac rollup merge of #22436: nikomatsakis/issue-22246-bound-lifetimes-of-assoc-types
Take 2. This PR includes a bunch of refactoring that was part of an experimental branch implementing [implied bounds]. That particular idea isn't ready to go yet, but the refactoring proved useful for fixing #22246. The implied bounds branch also exposed #22110 so a simple fix for that is included here. I still think some more refactoring would be a good idea here -- in particular I think most of the code in wf.rs is kind of duplicating the logic in implicator and should go, but I decided to post this PR and call it a day before diving into that. I'll write a bit more details about the solutions I adopted in the various bugs. I patched the two issues I was concerned about, which was the handling of supertraits and HRTB (the latter turned out to be fine, so I added a comment explaining why.)

r? @pnkfelix (for now, anyway)
cc @aturon

[implied bounds]: http://smallcultfollowing.com/babysteps/blog/2014/07/06/implied-bounds/
2015-02-18 14:31:58 -08:00
Niko Matsakis
9f8b9d6847 Update tests to use #[feature(rustc_attrs)] 2015-02-18 17:31:42 -05:00
Alex Crichton
c5fddd81ab rollup merge of #22118: fhahn/separate-parse-fail-2
After making `rustc` fail on errors at a stop point, like `-Z parse-only`, in #22117, the files in this PR also fail during the parse stage and should be moved as well. Sorry for spliting this move up in two PRs.
2015-02-18 14:31:23 -08:00
Niko Matsakis
d622235b30 Add deprecated versions of the old markers and integrate them back into the variance analysis. 2015-02-18 17:14:27 -05:00
Niko Matsakis
9bb3b3772d Add rustc_attrs feature to test. 2015-02-18 15:24:20 -05:00
Niko Matsakis
2939e483fd Extend the implicator so it produces general obligations and also so
that it produces "outlives" relations for associated types. Add
several tests relating to #22246.
2015-02-18 15:23:34 -05:00
Niko Matsakis
811c48fe22 For now, accept the i, u, is, and us suffixes, but warn when
they are used without a feature-gate. This is both kinder to existing
code and should make it easier to land this PR, since we don't
have to catch EVERY SINGLE SUFFIX.
2015-02-18 15:08:40 -05:00
Alex Crichton
f83e23ad7c std: Stabilize the hash module
This commit is an implementation of [RFC 823][rfc] which is another pass over
the `std::hash` module for stabilization. The contents of the module were not
entirely marked stable, but some portions which remained quite similar to the
previous incarnation are now marked `#[stable]`. Specifically:

[rfc]: https://github.com/rust-lang/rfcs/blob/master/text/0823-hash-simplification.md

* `std::hash` is now stable (the name)
* `Hash` is now stable
* `Hash::hash` is now stable
* `Hasher` is now stable
* `SipHasher` is now stable
* `SipHasher::new` and `new_with_keys` are now stable
* `Hasher for SipHasher` is now stable
* Many `Hash` implementations are now stable

All other portions of the `hash` module remain `#[unstable]` as they are less
commonly used and were recently redesigned.

This commit is a breaking change due to the modifications to the `std::hash` API
and more details can be found on the [RFC][rfc].

Closes #22467
[breaking-change]
2015-02-18 08:26:20 -08:00
Niko Matsakis
e8cb11c7e3 Missing test. 2015-02-18 10:38:25 -05:00
Niko Matsakis
d179bb56b0 Add regression test for #20533. Fixes #20533. 2015-02-18 10:38:25 -05:00
Niko Matsakis
872ce47955 Fallout: tests. As tests frequently elide things, lots of changes
here.  Some of this may have been poorly rebased, though I tried to be
careful and preserve the spirit of the test.
2015-02-18 10:25:28 -05:00
Niko Matsakis
8c841f2a31 Extend coherence check to understand subtyping. 2015-02-18 10:24:55 -05:00
Niko Matsakis
91eedfe18b Report errors for type parameters that are not constrained, either by
variance or an associated type.
2015-02-18 10:24:55 -05:00
Niko Matsakis
2594d56e32 Introduce the new phantomdata/phantomfn markers and integrate them
into variance inference; fix various bugs in variance inference
so that it considers the correct set of constraints; modify infer to
consider the results of variance inference for type arguments.
2015-02-18 10:24:55 -05:00
Niko Matsakis
72eb214ee4 Update suffixes en masse in tests using perl -p -i -e 2015-02-18 09:10:10 -05:00
Niko Matsakis
01615b04c6 Convert required suffixes into a use of as. 2015-02-18 09:09:13 -05:00
Niko Matsakis
2b5720a15f Remove i, is, u, or us suffixes that are not necessary. 2015-02-18 09:09:12 -05:00
Alex Crichton
665ea963d3 Test fixes and rebase conflicts 2015-02-17 19:42:28 -08:00
Alex Crichton
ba8ce4c2c2 rollup merge of #22319: huonw/send-is-not-static
Conflicts:
	src/libstd/sync/task_pool.rs
	src/libstd/thread.rs
	src/libtest/lib.rs
	src/test/bench/shootout-reverse-complement.rs
	src/test/bench/shootout-spectralnorm.rs
2015-02-17 17:32:16 -08:00
Alex Crichton
6ac3799b75 Test fixes and rebase conflicts 2015-02-17 17:27:46 -08:00
Alex Crichton
d8450d69bb rollup merge of #22435: aturon/final-stab-thread
Conflicts:
	src/test/bench/rt-messaging-ping-pong.rs
	src/test/bench/rt-parfib.rs
	src/test/bench/task-perf-spawnalot.rs
2015-02-17 17:27:44 -08:00
Alex Crichton
d8ba8b00a7 rollup merge of #22459: alexcrichton/feature-names
Conflicts:
	src/rustbook/main.rs
2015-02-17 17:26:59 -08:00
Huon Wilson
7a14f4994e Update tests for the Send - 'static change. 2015-02-18 11:27:51 +11:00
Aaron Turon
d0de2b46e9 Fallout from stabilization 2015-02-17 15:14:17 -08:00
Alex Crichton
f492095eb4 rollup merge of #22024: alexcrichton/ascii
* Move the type parameter on the `AsciiExt` trait to an associated type named
  `Owned`.
* Move `ascii::escape_default` to using an iterator.

This is a breaking change due to the removal of the type parameter on the
`AsciiExt` trait as well as the modifications to the `escape_default` function
to returning an iterator. Manual implementations of `AsciiExt` (or `AsciiExt`
bounds) should be adjusted to remove the type parameter and using the new
`escape_default` should be relatively straightforward.

[breaking-change]
2015-02-17 15:13:20 -08:00
Niko Matsakis
ff388c1277 Traits that reference Self in the supertrait list are not object-safe. Fixes #22040. 2015-02-17 17:15:27 -05:00
Alex Crichton
a2ebb24ee6 std: Rename io/path features with old_ prefix
This commit renames the features for the `std::old_io` and `std::old_path`
modules to `old_io` and `old_path` to help facilitate migration to the new APIs.

This is a breaking change as crates which mention the old feature names now need
to be renamed to use the new feature names.

[breaking-change]
2015-02-17 14:02:45 -08:00
Alex Crichton
0cf2d00f0e rustc: Track stability of trait implementations
Previously an implementation of a stable trait allows implementations of
unstable methods. This updates the stability pass to ensure that all items of an
impl block of a trait are indeed stable on the trait itself.
2015-02-17 13:56:06 -08:00
Huon Wilson
22c88323f3 Add tests for the removal of the 'static superbound from Send. 2015-02-18 08:19:22 +11:00
Niko Matsakis
02e1d5ec06 When converting parameters for an object type, be careful of defaults that reference Self.
Fixes #18956.
2015-02-17 11:21:52 -05:00
Manish Goregaokar
a6724989ce Fix failing tests 2015-02-17 17:34:00 +05:30
Manish Goregaokar
020e4e4ad9 Rollup merge of #22383 - pnkfelix:pass-features-along-during-expansion, r=huonw
Pass features along during expansion

Use the set of passed features to detect uses of feature-gated macros without the corresponding feature enabled.

Fix #22234.

----

Also, the framework this add (passing along a reference to the features in the expansion context) is a necessary precursor for landing a properly feature-gated desugaring-based overloaded-`box` and placement-`in` (#22181).

----

This is fixing a bug, but since there might be code out there that is unknowingly taking advantage of that bug, I feel obligated to mark this as a:

[breaking-change]
2015-02-17 17:33:20 +05:30
Manish Goregaokar
4647d89205 Rollup merge of #22364 - Manishearth:rfc-572-forbid-attr, r=nikomatsakis
fixes #22203

r? @nikomatsakis

This breaks code that might be using attributes randomly, so it's technically a

[breaking-change]
2015-02-17 17:33:19 +05:30
Manish Goregaokar
bc48107a85 Rollup merge of #22418 - japaric:diagnostics, r=nikomatsakis
closes #22388

r? @nikomatsakis
cc @insaneinside
2015-02-17 06:25:03 +05:30
Manish Goregaokar
1bbf7187ad Fix tests for rustc_* 2015-02-17 02:26:53 +05:30
bors
81bce5290f Auto merge of #22230 - nikomatsakis:object-lifetime-defaults-2, r=pnkfelix
Implement rules described in rust-lang/rfcs#599.

Fixes https://github.com/rust-lang/rust/issues/22211.

~~Based atop PR https://github.com/rust-lang/rust/pull/22182, so the first few commits (up to and including "Pacify the mercilous nrc") have already been reviewed.~~
2015-02-16 20:31:15 +00:00
Florian Hahn
5550bebcaa Move remaning compile-fail tests that are rejected by the parser to parse-fail 2015-02-16 20:52:39 +01:00
Jorge Aparicio
9462a207ff Make orphan check diagnostics clearer
closes #22388
2015-02-16 14:42:20 -05:00
Manish Goregaokar
1fffdafe41 fix linkage tests 2015-02-17 00:49:42 +05:30
Niko Matsakis
503e15b7c9 Address nits by @pnkfelix 2015-02-16 11:58:47 -05:00
Niko Matsakis
369adaf515 Implement the rules for RFC 599, and add various tests.
Fixes #22211.
2015-02-16 10:55:37 -05:00
Niko Matsakis
931a3c4f9d Detect and store object-lifetime-defaults. 2015-02-16 10:55:36 -05:00
Eduard Burtescu
f4473a4664 rustc_trans: promote constant rvalues in functions as an optimization. 2015-02-16 17:13:47 +02:00
Eduard Burtescu
08967c7a7f tests: fix fallout from changed error messages. 2015-02-16 17:13:47 +02:00
Eduard Burtescu
cb3c9a1e88 rustc: teach const_eval more about types. 2015-02-16 16:29:22 +02:00
Eduard Burtescu
4d8f995c3a rustc: merge check_static into check_const. 2015-02-16 16:29:21 +02:00
Manish Goregaokar
d5c3194c59 Add cfail test for custom attribute gate 2015-02-16 11:49:09 +05:30
Manish Goregaokar
0001817485 Add custom_attribute gate to tests which need them 2015-02-16 11:49:09 +05:30
Felix S. Klock II
dc0797c0c9 Address the other cases of #22234; fix #22234.
The other cases: `concat_idents!`, `log_syntax!`, and `trace_macros!`,
(these macros, with `asm!`, are handled (eagerly) in feature_gate.rs).
2015-02-16 01:36:06 +01:00
Felix S. Klock II
52bdda778a Address the asm! case of #22234. 2015-02-15 22:14:03 +01:00
Manish Goregaokar
16b24f15bd Rollup merge of #22285 - kmcallister:pub-macro, r=nick29581
It's not clear what this means, because a macro in item position can expand to zero or more items.  For now we disallow it, which is technically a

    [breaking-change]

but is landing without an RFC.  The `pub` keyword previously had no effect, which seems quite unintended.

Fixes #18317.
Fixes #14660.
2015-02-15 18:42:48 +05:30
Manish Goregaokar
a2840f3560 Rollup merge of #22278 - nikomatsakis:rustc-error, r=nikomatsakis
Add `#[rustc_error]` annotation, which causes trans to signal an error
if found on the `main()` function. This lets you write tests that live
in `compile-fail` but are expected to compile successfully. This is
handy when you have many small variations on a theme that you want to
keep together, and you are just testing the type checker, not the
runtime semantics.

r? @pnkfelix
2015-02-15 18:42:43 +05:30
bors
b63cee4a11 Auto merge of #22158 - Kimundi:the_lonely_uppercase_keyword, r=pnkfelix
It is only allowed in paths now, where it will either work inside a `trait`
or `impl` item, or not resolve outside of it.

[breaking-change]

Closes #22137
2015-02-14 17:01:11 +00:00
Keegan McAllister
dcd4cef119 Forbid pub mymacro!();
It's not clear what this means, because a macro in item position can expand to
zero or more items.  For now we disallow it, which is technically a

    [breaking-change]

but is landing without an RFC.  The `pub` keyword previously had no effect,
which seems quite unintended.

Fixes #18317.
Fixes #14660.
2015-02-13 13:48:09 -08:00
Niko Matsakis
fb05f282d7 Add #[rustc_error] annotation, which causes trans to signal an error
if found on the `main()` function. This lets you write tests that live
in `compile-fail` but are expected to compile successfully. This is
handy when you have many small variations on a theme that you want to
keep together, and you are just testing the type checker, not the
runtime semantics.
2015-02-13 11:10:51 -05:00
bors
cf636c233d Auto merge of #22093 - petrochenkov:builtin, r=pnkfelix
Names of structs, enums, traits, type aliases and type parameters (i.e. all identifiers that can be used as full paths in type position) are not allowed to match the names of primitive types.
See #20427 for more information.

This is a minor [breaking-change]
2015-02-13 07:44:41 +00:00
Marvin Löbel
07d00deab2 Made Self a keyword.
It is only allowed in paths now, where it will either work inside a `trait`
or `impl` item, or not resolve outside of it.

[breaking-change]

Closes #22137
2015-02-12 22:04:31 +01:00
Kevin Butler
32d0dbd49a librustc: Forbid partial reinitialization of uninitialized structures or
enumerations that implement the `Drop` trait.

This breaks code like:

    struct Struct {
        f: String,
        g: String,
    }

    impl Drop for Struct { ... }

    fn main() {
        let x = Struct { ... };
        drop(x);
        x.f = ...;
    }

Change this code to not create partially-initialized structures. For
example:

    struct Struct {
        f: String,
        g: String,
    }

    impl Drop for Struct { ... }

    fn main() {
        let x = Struct { ... };
        drop(x);
        x = Struct {
            f: ...,
            g: ...,
        }
    }

Closes #18571.

[breaking-change]

----

(Joint authorship by pcwalton and Ryman; thanks all!)
2015-02-12 13:55:08 +01:00
Alex Crichton
7362bd57a9 rollup merge of #22167: kmcallister/undef-macro
Fixes #21062.
2015-02-11 14:02:15 -08:00
Alex Crichton
84e5c11785 rollup merge of #22127: alexcrichton/stability-holes
There are a number of holes that the stability lint did not previously cover,
including:

* Types
* Bounds on type parameters on functions and impls
* Where clauses
* Imports
* Patterns (structs and enums)

These holes have all been fixed by overriding the `visit_path` function on the
AST visitor instead of a few specialized cases. This change also necessitated a
few stability changes:

* The `collections::fmt` module is now stable (it was already supposed to be).
* The `thread_local:👿:Key` type is now stable (it was already supposed to
  be).
* The `std::rt::{begin_unwind, begin_unwind_fmt}` functions are now stable.
  These are required via the `panic!` macro.
* The `std::old_io::stdio::{println, println_args}` functions are now stable.
  These are required by the `print!` and `println!` macros.
* The `ops::{FnOnce, FnMut, Fn}` traits are now `#[stable]`. This is required to
  make bounds with these traits stable. Note that manual implementations of
  these traits are still gated by default, this stability only allows bounds
  such as `F: FnOnce()`.

Closes #8962
Closes #16360
Closes #20327
2015-02-11 14:02:04 -08:00
Alex Crichton
8b8331ad09 rollup merge of #21881: richo/lint-no-mangle-const
This renames the PrivateNoMangleFns lint to allow both to happen in a
single pass, since they do roughly the same work.

Closes #21856

Open questions:

[ ]: Do the tests actually pass (I'm running make check and running out the door now)
[ ]: Is the name of this lint ok. it seems to mostly be fine with [convention](cc53afbe5d/text/0344-conventions-galore.md (lints))
[ ]: I'm not super thrilled about the warning text

r? @kmcallister (Shamelessly nominating because you were looking at my other ticket)
2015-02-11 14:02:00 -08:00
Alex Crichton
bbbb571fee rustc: Fix a number of stability lint holes
There are a number of holes that the stability lint did not previously cover,
including:

* Types
* Bounds on type parameters on functions and impls
* Where clauses
* Imports
* Patterns (structs and enums)

These holes have all been fixed by overriding the `visit_path` function on the
AST visitor instead of a few specialized cases. This change also necessitated a
few stability changes:

* The `collections::fmt` module is now stable (it was already supposed to be).
* The `thread_local:👿:Key` type is now stable (it was already supposed to
  be).
* The `std::rt::{begin_unwind, begin_unwind_fmt}` functions are now stable.
  These are required via the `panic!` macro.
* The `std::old_io::stdio::{println, println_args}` functions are now stable.
  These are required by the `print!` and `println!` macros.
* The `ops::{FnOnce, FnMut, Fn}` traits are now `#[stable]`. This is required to
  make bounds with these traits stable. Note that manual implementations of
  these traits are still gated by default, this stability only allows bounds
  such as `F: FnOnce()`.

Additionally, the compiler now has special logic to ignore its own generated
`__test` module for the `--test` harness in terms of stability.

Closes #8962
Closes #16360
Closes #20327

[breaking-change]
2015-02-11 12:14:59 -08:00
bors
e29f420255 Auto merge of #21972 - pnkfelix:new-dtor-semantics-6, r=nikomatsakis
This is a resurrection and heavy revision/expansion of a PR that pcwalton did to resolve #8861.

The most relevant, user-visible semantic change is this: #[unsafe_destructor] is gone. Instead, if a type expression for some value has a destructor, then any lifetimes referenced within that type expression must strictly outlive the scope of the value.

See discussion on https://github.com/rust-lang/rfcs/pull/769
2015-02-11 17:59:37 +00:00
Felix S. Klock II
cdd8a5ad74 Generalize all error messages with "experimental in alpha release" to
just say "experimental."
2015-02-11 14:13:33 +01:00
Felix S. Klock II
c1cda0793e compile-fail tests.
Some compile-fail tests illustrated cases to be rejected by dropck,
including ones that check cyclic data cases designed to exposed bugs
if they are actually tricked into running by an unsound analysis.

E.g. these exposed bugs in earlier broken ways of handling `Vec<T>`.

(Note that all the uses of `unsafe_destructor` are just placating the
simple analysis used for that feature, which will eventually go away
once we have put the dropck through its paces.)
2015-02-11 13:51:21 +01:00
Felix S. Klock II
23e9d7cbe4 Opt into box_patterns feature gate in all tests that use them. 2015-02-11 11:47:14 +01:00
Keegan McAllister
d4288717c4 Forbid undefined names in macro use / macro reexport
Fixes #21062.
2015-02-10 19:36:31 -08:00
Alex Crichton
3e10785e21 Test fixes and rebase conflicts 2015-02-10 11:51:38 -08:00
Alex Crichton
1138f88f82 rollup merge of #22144: pnkfelix/fru-privacy-rfc-736 2015-02-10 09:05:17 -08:00
Alex Crichton
df55acf1d0 rollup merge of #22143: pnkfelix/fix-issue-20801
Add error message (i.e. do not ICE) when moving out of unsafe pointers.

Fix #20801.
2015-02-10 08:43:18 -08:00
Alex Crichton
bbc8a54c63 rollup merge of #22116: kmcallister/cfg_attr
Fixes #22070.
Fixes #19372.

r? @sfackler
2015-02-10 08:43:01 -08:00
Alex Crichton
6cf75ca05a rollup merge of #21918: ranma42/replace-be
Conflicts:
	src/test/compile-fail/reserved-be.rs
	src/test/compile-fail/reserved-become.rs
	src/test/parse-fail/reserved-be.rs
2015-02-10 08:41:30 -08:00
Felix S. Klock II
3f5af9f34d add //~ ERROR line to test for privacy respecting FRU (RFC 736). 2015-02-10 17:32:39 +01:00
Felix S. Klock II
0b1d5f0182 Make FRU respect privacy of all struct fields, mentioned or unmentioned.
This is RFC 736.

Fix #21407.
2015-02-10 15:29:29 +01:00
Felix S. Klock II
3513c97302 Add error message (i.e. do not ICE) when moving out of unsafe pointers.
Fix #20801.
2015-02-10 15:01:31 +01:00
bors
94c06a1be0 Auto merge of #22026 - kmcallister:plugin, r=sfackler
```rust
#[plugin] #[no_link] extern crate bleh;
```

becomes a crate attribute

```rust
#![plugin(bleh)]
```

The feature gate is still required.

It's almost never correct to link a plugin into the resulting library / executable, because it will bring all of libsyntax and librustc with it. However if you really want this behavior, you can get it with a separate `extern crate` item in addition to the `plugin` attribute.

Fixes #21043.
Fixes #20769.

[breaking-change]
2015-02-10 11:15:52 +00:00
Nick Cameron
f9c577e514 Tests 2015-02-10 16:54:23 +13:00
Keegan McAllister
1aedc45f85 Add a help message for deprecated #[plugin] extern crate 2015-02-09 14:25:47 -08:00
Keegan McAllister
93b642d974 Use a crate attribute to load plugins
#[plugin] #[no_link] extern crate bleh;

becomes a crate attribute

    #![plugin(bleh)]

The feature gate is still required.

It's almost never correct to link a plugin into the resulting library /
executable, because it will bring all of libsyntax and librustc with it.
However if you really want this behavior, you can get it with a separate
`extern crate` item in addition to the `plugin` attribute.

Fixes #21043.
Fixes #20769.

[breaking-change]
2015-02-09 13:27:27 -08:00
Keegan McAllister
5354317037 Process cfg_attr right before stripping cfg
Fixes #22070.
Fixes #19372.
2015-02-09 10:12:14 -08:00
we
6457c9fce2 Fix issue #20427 2015-02-08 19:29:47 +03:00
bors
bfdcd34e82 Auto merge of #22054 - LeoTestard:include-parse-errors, r=alexcrichton
Makes the compilation abort when a parse error is encountered while
trying to parse an item in an included file. The previous behaviour was
to stop processing the file when a token that can't start an item was
encountered, without producing any error. Fixes #21146.
2015-02-08 14:41:02 +00:00
bors
725cc06464 Auto merge of #22011 - fhahn:separate-parse-fail-tests, r=nikomatsakis
This PR moves all `compile-fail` tests that fail at the parsing stage to a `parse-fail` directory, in order to use the tests in the `parse-fail` directory to test if the new LALR parser rejects the same files as the Rust parser. I also adjusted the `testparser.py` script to handle the tests in `parse-fail` differently.

However during working on this, I discovered, that Rust's parser sometimes fails during parsing, but does not return a nonzero return code, e.g. compiling `/test/compile-fail/doc-before-semi.rs` with `-Z parse-only` prints an error message, but returns status code 0. Compiling the same file without `-Z parse-only`, the same error message is displayed, but error code 101 returned. I'll look into that over the next week.
2015-02-08 12:35:03 +00:00
Keegan McAllister
d788588dce Feature-gate #![no_std]
Fixes #21833.

[breaking-change]
2015-02-07 10:49:58 -08:00
Keegan McAllister
67350bc868 Don't use std:: paths in syntax extensions when compiling a #![no_std] crate
Fixes #16803.
Fixes #14342.
Fixes half of #21827 -- slice syntax is still broken.
2015-02-07 10:49:57 -08:00
Leo Testard
8f2ab66ab6 Fix handling of parse errors when using include!().
Makes the compilation abort when a parse error is encountered while
trying to parse an item in an included file. The previous behaviour was
to stop processing the file when a token that can't start an item was
encountered, without producing any error. Fixes #21146.
2015-02-07 19:14:35 +01:00
Felix S. Klock II
4583272bf5 Updates to tests reflecting array-move restrictions.
Note that the change to the error message in
borrowck-use-in-index-lvalue.rs, where we report that `*w` is
uninitialized rather than `w`, was unintended fallout from the
implementation strategy used here.

The change appears harmless to me, but I welcome advice on how to
bring back the old message, which was slightly cleaner (i.e. less
unintelligible).

----

drive-by: revise compile-fail/borrowck-vec-pattern-move-tail to make
it really clear that there is a conflict that must be signaled.

(A hypothetical future version of Rust might be able to accept the
prior version of the code, since the previously updated index was not
actually aliased.)
2015-02-07 13:44:06 +01:00
Felix S. Klock II
128ac9dfcb Add tests of move-into-dead-array restriction. 2015-02-07 13:44:06 +01:00
Felix S. Klock II
ce341f79b4 Add tests of move-out-of-array restriction. 2015-02-07 13:44:06 +01:00
Jorge Aparicio
724bf7bce2 make IndexMut a super trait over Index
closes #21630
2015-02-06 21:11:59 -05:00
Florian Hahn
01db9a46af Move compile-fail tests that are rejected by the parser to parse-fail 2015-02-06 22:23:16 +01:00
Manish Goregaokar
703364f214 Rollup merge of #21968 - nikomatsakis:issue-21965-duplicate-preds-in-env, r=pnkfelix
We were already building a hashset to check for duplicates, but we assumed that the initial vector had no duplicates. Fixes #21965.

r? @pnkfelix
2015-02-06 16:21:13 +05:30
Manish Goregaokar
8e4c00b939 Rollup merge of #21958 - brson:stable-features, r=alexcrichton
....

The 'stable_features' lint helps people progress from unstable to
stable Rust by telling them when they no longer need a `feature`
attribute because upstream Rust has declared it stable.

This compares to the existing 'unstable_features' lint, which is used
to implement feature staging, and triggers on *any* use
of `#[feature]`.
2015-02-06 16:21:11 +05:30
Manish Goregaokar
67b51291f0 Rollup merge of #21925 - sfackler:allow-missing-copy, r=alexcrichton
This was particularly helpful in the time just after OIBIT's
implementation to make sure things that were supposed to be Copy
continued to be, but it's now creates a lot of noise for types that
intentionally don't want to be Copy.

r? @alexcrichton
2015-02-06 16:21:08 +05:30
Manish Goregaokar
6bf0cd8f00 Rollup merge of #21955 - jbcrail:fix-test-comments, r=steveklabnik
Just spelling corrections.
2015-02-06 16:21:05 +05:30
bors
715f9a5e8d Auto merge of #21947 - bluss:full-range-syntax, r=brson
Implement step 1 of rust-lang/rfcs#702

Allows the expression `..` (without either endpoint) in general, can be
used in slicing syntax `&expr[..]` where we previously wrote `&expr[]`.

The old syntax &expr[] is not yet removed or warned for.
2015-02-06 03:11:34 +00:00
Niko Matsakis
fab32b4167 Now that the elaboration mechanism is suppressing defaults, we can remove this overeager code that was pruning out ambig where-clause matches in trait selection. cc #21974. 2015-02-05 16:34:54 -05:00
Jorge Aparicio
17bc7d8d5b cleanup: replace as[_mut]_slice() calls with deref coercions 2015-02-05 13:45:01 -05:00
Ulrik Sverdrup
7d527fa96b Implement pretty-printing of .. and update tests.
Update tests to change all `&expr[]` to `&expr[..]` to make sure pretty printing
passes.
2015-02-05 18:09:12 +01:00
Brian Anderson
456d23e73e Add a lint for writing #[feature] for stable features, warn by default.
The 'stable_features' lint helps people progress from unstable to
stable Rust by telling them when they no longer need a `feature`
attribute because upstream Rust has declared it stable.

This compares to the existing 'unstable_features', which is used
to implement feature staging, and triggers on *any* use
of `#[feature]`.
2015-02-04 23:18:24 -08:00
Joseph Crail
fc0fd289c9 Fix for misspelled comments in tests.
Just spelling corrections.
2015-02-04 23:04:10 -05:00
Jorge Aparicio
571cc7f8e9 remove all kind annotations from closures 2015-02-04 20:06:08 -05:00
Ulrik Sverdrup
75239142a8 Implement .. syntax for RangeFull as expression
Allows the expression `..` (without either endpoint) in general, can be
used in slicing syntax `&expr[..]` where we previously wrote `&expr[]`.

The old syntax &expr[] is not yet removed or warned for.
2015-02-04 23:23:12 +01:00
bors
c3e1f77291 Auto merge of #21892 - huonw:deprecate-rand, r=alexcrichton
Use [`rand`](https://crates.io/crates/rand) and [`derive_rand`](https://crates.io/crates/derive_rand) from crates.io.

[breaking-change]
2015-02-04 08:47:27 +00:00
Steven Fackler
85a85c2070 Switch missing_copy_implementations to default-allow
This was particularly helpful in the time just after OIBIT's
implementation to make sure things that were supposed to be Copy
continued to be, but it's now creates a lot of noise for types that
intentionally don't want to be Copy.
2015-02-03 23:31:07 -08:00
Alex Crichton
d0029a47c2 rollup merge of #21910: Manishearth/missing_stability
Currently, if a `#![staged_api]` crate contains an exported item without a stability marker (or inherited stability),
the item is useless.

This change introduces a check to ensure that all exported items have a defined stability.

it also introduces the `unmarked_api` feature, which lets users import unmarked features. While this PR should in theory forbid these from existing,
in practice we can't be so sure; so this lets users bypass this check instead of having to wait for the library and/or compiler to be fixed (since otherwise this is a hard error).

r? @aturon
2015-02-03 20:11:20 -08:00
Alex Crichton
74f7e06939 rollup merge of #21899: nikomatsakis/closure-unify-anyhow
This *almost* completes the job for #16440. The idea is that even if we do not know whether some closure type `C` implements `Fn` or `FnMut` (etc), we still know its argument and return types. So if we see an obligation `C : Fn(_0)`, we can unify `_0` with those argument types while still considering the obligation ambiguous and unsatisfied. This helps to make a lot of progress with type inference even before closure kind inference is done.

As part of this PR, the explicit `:` syntax is removed from the AST and completely ignored. We still infer the closure kind based on the expected type if that is available. There are several reasons for this. First, deciding the closure kind earlier is always better, as it allows us to make more progress. Second, this retains a (admittedly obscure) way for users to manually specify the closure kind, which is useful for writing tests if nothing else. Finally, there are still some cases where inference can fail, so it may be useful to have this manual override. (The expectation is that we will eventually revisit an explicit syntax for specifying the closure kind, but it will not be `:` and may be some sort of generalization of the `||` syntax to handle other traits as well.)

This commit does not *quite* fix #16640 because a snapshot is still needed to enable the obsolete syntax errors for explicit `&mut:` and friends.

r? @eddyb as he reviewed the prior patch in this direction
2015-02-03 20:11:20 -08:00
Andrea Canciani
8f7c2d518d Replace be with become
As per rust-lang/rfcs#601, replace `be` with `become` as reserved
keyword for tail call optimization.
2015-02-04 01:25:24 +01:00
Huon Wilson
df1ac7aa63 Deprecate in-tree rand, std::rand and #[derive(Rand)].
Use the crates.io crate `rand` (version 0.1 should be a drop in
replacement for `std::rand`) and `rand_macros` (`#[derive_Rand]` should
be a drop-in replacement).

[breaking-change]
2015-02-04 09:39:40 +11:00
Aaron Turon
3e39f0bc0e Rename std::path to std::old_path
As part of [RFC 474](https://github.com/rust-lang/rfcs/pull/474), this
commit renames `std::path` to `std::old_path`, leaving the existing path
API in place to ease migration to the new one. Updating should be as
simple as adjusting imports, and the prelude still maps to the old path
APIs for now.

[breaking-change]
2015-02-03 14:34:42 -08:00
Manish Goregaokar
f5e5bdb197 Fix test 2015-02-04 03:20:12 +05:30
Manish Goregaokar
4aa661ab36 Add test for missing stability checker 2015-02-04 02:30:31 +05:30
Niko Matsakis
47f18659ff Update compile-fail tests to use the expected type to force the
closure kind, thereby detecting what happens if there are
mismatches. Simply removing the `:` annotations caused most of these
tests to pass or produce other errors, because the inference would
convert the closure into a more appropriate kind. (The ability to
override the inference by using the expected type is an important
backdoor partly for this reason.)
2015-02-03 11:55:46 -05:00
bors
3d072a193b Auto merge of #21675 - huonw:less-false-positives, r=nikomatsakis
That is, when offering suggestions for unresolved method calls, avoid
suggesting traits for which implementing the trait for the receiver type
either makes little sense (e.g. type errors, or sugared unboxed
closures), or violates coherence.

The latter is approximated by ensuring that at least one of `{receiver
type, trait}` is local. This isn't precisely correct due to
multidispatch, but the error messages one encounters in such situation
are useless more often than not; it is better to be conservative and
miss some cases, than have overly many false positives (e.g. writing
`some_slice.map(|x| ...)` uselessly suggested that one should implement
`IteratorExt` for `&[T]`, while the correct fix is to call `.iter()`).

Closes #21420.
2015-02-03 12:49:21 +00:00
Huon Wilson
e81ae40770 Try to only suggest implementable traits for method calls.
That is, when offering suggestions for unresolved method calls, avoid
suggesting traits for which implementing the trait for the receiver type
either makes little sense (e.g. type errors, or sugared unboxed
closures), or violates coherence.

The latter is approximated by ensuring that at least one of `{receiver
type, trait}` is local. This isn't precisely correct due to
multidispatch, but the error messages one encounters in such situation
are useless more often than not; it is better to be conservative and
miss some cases, than have overly many false positives (e.g. writing
`some_slice.map(|x| ...)` uselessly suggested that one should implement
`IteratorExt` for `&[T]`, while the correct fix is to call `.iter()`).

Closes #21420.
2015-02-03 22:33:54 +11:00
Seo Sanghyeon
b042ffc4a7 Extend dead code lint to detect more unused enum variants 2015-02-03 20:28:17 +09:00
Richo Healey
73d5d89567 lint: Warn about no-mangled statics that are not exported 2015-02-02 23:11:24 -08:00
Richo Healey
51ed1ecefd lint: Deny #[no_mangle] const items
This renames the PrivateNoMangleFns lint to allow both to happen in a
single pass, since they do roughly the same work.
2015-02-02 23:11:23 -08:00
Alex Crichton
9ece22ee00 Test fixes and rebase conflicts 2015-02-02 18:50:23 -08:00
Alex Crichton
3ef2df9e88 rollup merge of #21845: Potpourri/import-syntax
syntax like `use foo::bar::;` and `use foo:: as bar;` should be rejected, see issue #21629
2015-02-02 11:01:17 -08:00
Alex Crichton
7335c7dd63 rollup merge of #21830: japaric/for-cleanup
Conflicts:
	src/librustc/metadata/filesearch.rs
	src/librustc_back/target/mod.rs
	src/libstd/os.rs
	src/libstd/sys/windows/os.rs
	src/libsyntax/ext/tt/macro_parser.rs
	src/libsyntax/print/pprust.rs
	src/test/compile-fail/issue-2149.rs
2015-02-02 11:01:12 -08:00
Alex Crichton
c64b73e520 rollup merge of #21817: edwardw/symmetric-binop
For "symmetric" binary operators, meaning the types of two sides must be
equal, if the type of LHS doesn't know yet but RHS does, use that as an
hint to infer LHS' type.

Closes #21634
2015-02-02 10:58:10 -08:00
Alex Crichton
22fdf97035 rollup merge of #21815: nagisa/overflowing-lints 2015-02-02 10:58:09 -08:00
Alex Crichton
902abab144 rollup merge of #21787: alexcrichton/std-env
Conflicts:
	src/libstd/sys/unix/backtrace.rs
	src/libstd/sys/unix/os.rs
2015-02-02 10:58:01 -08:00
Jorge Aparicio
d5f61b4332 for x in xs.iter_mut() -> for x in &mut xs
Also `for x in option.iter_mut()` -> `if let Some(ref mut x) = option`
2015-02-02 13:40:18 -05:00
Jorge Aparicio
d5d7e6565a for x in xs.iter() -> for x in &xs 2015-02-02 13:40:18 -05:00
P1start
597b4fa984 Tweak some ‘expected…’ error messages
Fixes #21153.
2015-02-02 15:30:35 +13:00
Potpourri
0828efd72f Reject syntax like use foo::bar::; and use foo:: as bar; and keywords in view path idents 2015-02-01 23:31:21 +03:00
Alex Crichton
70ed3a48df std: Add a new env module
This is an implementation of [RFC 578][rfc] which adds a new `std::env` module
to replace most of the functionality in the current `std::os` module. More
details can be found in the RFC itself, but as a summary the following methods
have all been deprecated:

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

* `os::args_as_bytes`   => `env::args`
* `os::args`            => `env::args`
* `os::consts`          => `env::consts`
* `os::dll_filename`    => no replacement, use `env::consts` directly
* `os::page_size`       => `env::page_size`
* `os::make_absolute`   => use `env::current_dir` + `join` instead
* `os::getcwd`          => `env::current_dir`
* `os::change_dir`      => `env::set_current_dir`
* `os::homedir`         => `env::home_dir`
* `os::tmpdir`          => `env::temp_dir`
* `os::join_paths`      => `env::join_paths`
* `os::split_paths`     => `env::split_paths`
* `os::self_exe_name`   => `env::current_exe`
* `os::self_exe_path`   => use `env::current_exe` + `pop`
* `os::set_exit_status` => `env::set_exit_status`
* `os::get_exit_status` => `env::get_exit_status`
* `os::env`             => `env::vars`
* `os::env_as_bytes`    => `env::vars`
* `os::getenv`          => `env::var` or `env::var_string`
* `os::getenv_as_bytes` => `env::var`
* `os::setenv`          => `env::set_var`
* `os::unsetenv`        => `env::remove_var`

Many function signatures have also been tweaked for various purposes, but the
main changes were:

* `Vec`-returning APIs now all return iterators instead
* All APIs are now centered around `OsString` instead of `Vec<u8>` or `String`.
  There is currently on convenience API, `env::var_string`, which can be used to
  get the value of an environment variable as a unicode `String`.

All old APIs are `#[deprecated]` in-place and will remain for some time to allow
for migrations. The semantics of the APIs have been tweaked slightly with regard
to dealing with invalid unicode (panic instead of replacement).

The new `std::env` module is all contained within the `env` feature, so crates
must add the following to access the new APIs:

    #![feature(env)]

[breaking-change]
2015-02-01 11:08:15 -08:00
bors
c2bda2a5bb Auto merge of #21806 - edwardw:new-range-impl, r=alexcrichton
The new `::ops::Range` has separated implementations for each of the
numeric types, while the old `::iter::Range` has one for type `Int`.
However, we do not take output bindings into account when selecting
traits. So it confuses `typeck` and makes the new range does not work as
good as the old one when it comes to type inference.

This patch implements `Iterator` for the new range for one type `Int`.
This limitation could be lifted, however, if we ever reconsider the
output types' role in type inference.

Closes #21595
Closes #21649
Closes #21672
2015-02-01 19:07:11 +00:00
bors
76ce1ea421 Auto merge of #21811 - tbu-:pr_more_isize, r=alexcrichton
Remove more `isize` stuff. Also fix the manual a bit about integer inference.
2015-02-01 15:49:20 +00:00
Niko Matsakis
870aea216b Do not ICE when e.g. call_mut() is called on a closure whose kind is not yet known. 2015-02-01 06:13:07 -05:00
Niko Matsakis
a9c3841a50 Fix handling of move closures -- since they have one fewer deref, we weren't properly adjusting the closure kind in that case. 2015-02-01 06:13:06 -05:00
Niko Matsakis
5a39a0d266 To handle more complex cases, modify the deferred call handler to be
specialized to closures, and invoke them as soon as we know the
closure kind. I thought initially we would need a fixed-point
inference algorithm but it appears I was mistaken, so we can do this.
2015-02-01 06:13:06 -05:00
Niko Matsakis
e1f54f01d6 Implement basic inference for closure kinds and some simple tests.
Trickier cases not yet handled.
2015-02-01 06:13:06 -05:00
Edward Wang
b9c055cc70 Fix fallout 2015-02-01 14:29:42 +08:00
bors
a2aee6290a Auto merge of #21768 - Gankro:hash-send, r=alexcrichton
Fixes #21763 

(untested)
2015-02-01 04:21:09 +00:00
bors
e8489d3cc7 Auto merge of #21792 - nikomatsakis:orphan-ordered-first, r=aturon
Update the coherence rules to "covered first" -- the first type parameter to contain either a local type or a type parameter must contain only covered type parameters.

cc #19470.
Fixes #20974.
Fixes #20749.

r? @aturon
2015-02-01 01:34:08 +00:00
Edward Wang
60fa1ff347 Fix fallout 2015-02-01 04:06:18 +08:00