Commit Graph

39437 Commits

Author SHA1 Message Date
Brian Anderson
614853734e mk: Once again rename the beta channel artifacts as 'beta'
No more alphas, please.
2015-03-05 15:29:10 -08:00
bors
f0c74f85f3 Auto merge of #23026 - nikomatsakis:issue-20220-supertrait, r=nikomatsakis
The main gist of this PR is commit 1077efb which removes the list of supertraits from the `TraitDef` and pulls them into a separate table, which is accessed via `lookup_super_predicates`. This is analogous to `lookup_predicates`, which gets the complete where clause. This allows us to create the `TraitDef`, which contains the list generics and so forth, without fully knowing the list of supertraits. This in turn allows the *supertrait listing* to contain references to associated types like `<Self as Foo>::Item`, which were previously impossible because conversion required having the `TraitDef` for `Foo`.

We do not yet support `Self::Item` in a supertrait listing. This doesn't work because to convert that, it attempts to expand out the full set of supertraits, which are in the process of being created. This could potentially be worked out by having the expansion of supertraits proceed in a lazy fashion, but we'd have to define shadowing rules for associated types which we don't currently have.

Along the way (in 9de9ec5) I also removed the restriction against duplicate bounds and generalized the code so that it can handle having the same supertrait multiple times with different arguments, e.g. `Foo : Bar<i32> + Bar<u32>`. This restriction was serving no particular purpose, since the same trait could be extended multiple times indirectly, and in the era of multidispatch it is actively harmful.

This is technically a [breaking-change] because it affects the definition of a super-trait. Anything in a where clause that looks like `where Self : Foo` is now considered a supertrait. Because cycles are disallowed in supertraits, that could lead to some errors. This has not been observed in any existing code.

r? @nrc
2015-03-05 17:52:21 +00:00
Niko Matsakis
9b332ff2c7 Address nits by @nrc. 2015-03-05 05:46:12 -05:00
bors
68740b4054 Auto merge of #22061 - pczarn:quote_matcher_and_attr, r=kmcallister
Fixes #19674
Fixes #17396 (already closed, yeah)

cc @kmcallister , @cmr
2015-03-05 04:32:51 +00:00
bors
cc722a4dd3 Auto merge of #22873 - alexcrichton:deprecate-fs, r=aturon
This commit deprecates the majority of std::old_io::fs in favor of std::fs and
its new functionality. Some functions remain non-deprecated but are now behind a
feature gate called `old_fs`. These functions will be deprecated once
suitable replacements have been implemented.

The compiler has been migrated to new `std::fs` and `std::path` APIs where
appropriate as part of this change.

[breaking-change]
2015-03-05 01:19:15 +00:00
Alex Crichton
95d904625b std: Deprecate std::old_io::fs
This commit deprecates the majority of std::old_io::fs in favor of std::fs and
its new functionality. Some functions remain non-deprecated but are now behind a
feature gate called `old_fs`. These functions will be deprecated once
suitable replacements have been implemented.

The compiler has been migrated to new `std::fs` and `std::path` APIs where
appropriate as part of this change.
2015-03-04 15:59:30 -08:00
Niko Matsakis
1d3de19e99 Add tests related to #20220. Fixes #20220. 2015-03-04 15:06:33 -05:00
Niko Matsakis
cd50b4e0b1 Generalize the code so we can handle multiple supertraits.
Fixes #10596. Fixes #22279.
2015-03-04 15:06:33 -05:00
Niko Matsakis
bc9ae36dba Separate supertrait collection from processing a TraitDef. This allows
us to construct trait-references and do other things without forcing a
full evaluation of the supertraits. One downside of this scheme is that
we must invoke `ensure_super_predicates` before using any construct that
might require knowing about the super-predicates.
2015-03-04 15:06:33 -05:00
Niko Matsakis
4ee002a17c Extract out trait_defines_associated_type_named into the AstConv
interface, so that we can perform this query without requiring a full
trait def or set of supertraits.
2015-03-04 15:05:52 -05:00
Niko Matsakis
ab8a769c57 Extend the "treat-err-as-bug" option to cover calls to fatal. 2015-03-04 15:05:52 -05:00
Niko Matsakis
4dfa81f6fa Extract out the filter_to_traits functionality 2015-03-04 15:05:52 -05:00
Niko Matsakis
ba1b5ee1d1 Simplify impl of Elaborator now that we don't need stack traces anymore. 2015-03-04 15:05:52 -05:00
Piotr Czarnecki
3541abedeb Add quasiquote for matchers and attributes 2015-03-04 16:13:37 +01:00
bors
3b3bb0e682 Auto merge of #22235 - michaelwoerister:cross-crate-spans, r=michaelwoerister
This allows to create proper debuginfo line information for items inlined from other crates (e.g. instantiations of generics). Only the codemap's 'metadata' is stored in a crate's metadata. That is, just filename, positions of line-beginnings, etc. but not the actual source code itself.

Crate metadata size is increased by this change because spans in the encoded ASTs take up space now:
```
                BEFORE    AFTER
libcore         36 MiB    39.6 MiB    +10%
libsyntax       51.1 MiB  60.5 MiB    +18.4%
libcollections  11.2 MiB  12.8 MiB    +14.3%
```
This only affects binaries containing metadata (rlibs and dylibs), executables should not be affected in size. 

Fixes #19228 and probably #22226.
2015-03-04 14:47:51 +00:00
bors
bdf6e4fcf5 Auto merge of #22920 - tshepang:remove-some-warnings, r=huonw 2015-03-04 12:16:51 +00:00
bors
6e055c3f00 Auto merge of #22958 - laijs:option_map_for_iter_map, r=alexcrichton
Signed-off-by: Lai Jiangshan <laijs@cn.fujitsu.com>
2015-03-04 09:46:29 +00:00
Michael Woerister
2f8865556b Encode codemap and span information in crate metadata.
This allows to create proper debuginfo line information for items inlined from other crates (e.g. instantiations of generics).
Only the codemap's 'metadata' is stored in a crate's metadata. That is, just filename, line-beginnings, etc. but not the actual source code itself. We are thus missing the opportunity of making Rust the first "open-source-only" programming language out there. Pity.
2015-03-04 09:50:09 +01:00
bors
fed12499e7 Auto merge of #23002 - pnkfelix:fsk-box-place-runway, r=nikomatsakis
Runway for RFC 809 (overloaded box/placement-in) by adding type annotations or explicit calls to `Box::new` where I found it necessary on PR #22086.

I have broken this up into more than one PR because the entire commit chain (see PR #22086) is long, widespread and unwieldy to rebase frequently.

To my knowledge this is not a breaking change.  Also, there is in principle nothing stopping someone from reverting some/all of these annotations, since without the rest of the commit chain in #22086, the associated code would continue to compile.

All I can do is ask: Try to discourage others from removing seemingly "unnecessary" uses of the `Box` type or the `Box::new()` function, until the rest of RFC 809 lands.
2015-03-03 20:17:08 +00:00
Felix S. Klock II
cb1b0dd589 Fix doc example to accommodate overloaded-box. 2015-03-03 21:16:03 +01: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
b03279aaa2 inline Box::new always.
(You shouldn't use it, but it is a semi-reasonable way to annotate
types when necessary.)
2015-03-03 20:29:01 +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
129173f198 Auto merge of #22997 - pnkfelix:make-timestamps-robust-to-concurrent-edits, r=nikomatsakis
Make build timestamp files robust in face of concurrent source modification.

Strategy: If the end goal is to touch e.g. `stamp.std`, then we first touch `stamp.std.start_time` before doing anything else.  Then when the receipe finishes, we touch `stamp.std` using the timestamp from `stamp.std.start_time` as the reference time, and remove `stamp.std.start_time`.

Fix #6518.
2015-03-03 17:07:57 +00: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
Felix S. Klock II
62aa899e3d Make build timestamp files robust in face of concurrent source modification.
Strategy: If the end goal is to touch e.g. `stamp.std`, then we first
touch `stamp.std.start_time` before doing anything else.  Then when
the receipe finishes, we touch `stamp.std` using the timestamp from
`stamp.std.start_time` as the reference time, and remove
`stamp.std.start_time`.

Fix #6518.
2015-03-03 15:11:01 +01:00
Felix S. Klock II
243c5164ea sidestep potential over- and underflow in estimated stack bounds.
See buildlog here for evidence of such occurring:
  http://buildbot.rust-lang.org/builders/auto-linux-32-opt/builds/3910/steps/test/logs/stdio
2015-03-03 13:12:38 +01:00
bors
38e97b99a6 Auto merge of #22995 - Manishearth:rollup, r=Manishearth 2015-03-03 11:32:11 +00:00
Manish Goregaokar
4f1f5eb1ab Rollup merge of #22988 - dcrewi:slice-swap-inline, r=alexcrichton 2015-03-03 17:02:24 +05:30
Manish Goregaokar
415c42ecc4 Rollup merge of #22982 - tbu-:pr_fixup_22510, r=Manishearth
r? @Manishearth
2015-03-03 17:02:24 +05:30
Manish Goregaokar
2e15a7d92e Rollup merge of #22977 - kmcallister:issue-15778, r=sfackler
Fixes #15778.

r? @sfackler
2015-03-03 17:02:24 +05:30
Tobias Bucher
d18897cadf Revert incorrect usize -> u32 replacements from #22510
Conflicts:
	src/libstd/thread.rs
2015-03-03 17:02:24 +05:30
Manish Goregaokar
394a9c57ad Rollup merge of #22974 - nagisa:reintuint-std, r=alexcrichton
Reverts a small part of c74d49c804 because compilation pukes with warnings now.
2015-03-03 17:02:23 +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
d7a44beb55 Rollup merge of #22956 - ejjeong:aarch64-linux-android, r=alexcrichton
aarch64-linux-android build has been broken since #22839.
Aarch64 android has _Unwind_GetIPInfo, so re-define this only for arm32 android.
r? @alexcrichton
2015-03-03 17:02:23 +05:30
Manish Goregaokar
d8a91b95d1 Rollup merge of #22952 - huonw:missing-stable, r=alexcrichton
Unstable is the conservative choice.

cc #22950.
2015-03-03 17:02:22 +05:30
Manish Goregaokar
e9ca8acb0f Rollup merge of #22951 - huonw:weak-chuck-slice, r=alexcrichton
`#[derive(Clone)]` unnecessarily requires the element type to also be
`Clone`.
2015-03-03 17:02:22 +05:30
Manish Goregaokar
393ce1820e Rollup merge of #22876 - Florob:const, r=nikomatsakis
This changes the type of some public constants/statics in libunicode.
Notably some `&'static &'static [(char, char)]` have changed
to `&'static [(char, char)]`. The regexp crate seems to be the
sole user of these, yet this is technically a [breaking-change]
2015-03-03 17:02:20 +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
ea208a87a5 Rollup merge of #22989 - laijs:fix_FromStr_bool_comment, r=alexcrichton
Fix the return type in the comments.

An old commit 082bfde412 (\"Fallout of std::str stabilization\") removed
the example of FromStr::from_str(), this commit adds it back. But
the example of StrExt::parse() is still kept with an additinal note.

Signed-off-by: Lai Jiangshan <laijs@cn.fujitsu.com>
2015-03-03 17:01:16 +05:30
Manish Goregaokar
873d312d62 Rollup merge of #22969 - dotdash:no_alloca_zeroed, r=huonw
Its only user was lvalue_scratch_datum which is called with zero=true
anymore, so it's effectively unused.
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
63a91c21d3 Rollup merge of #22916 - rprichard:fmt-num-cleanup, r=alexcrichton
* Make num::UpperHex private.  I was unable to determine why this struct
   is public.  The num module itself is not public, and the UpperHex struct
   is not referenced anywhere in the core::fmt module.  (Only the UpperHex
   trait is reference.)  num::LowerHex is not public.

 * Remove the suffix parameters from the macros that generate integral
   display traits.

   The code to print the Debug::fmt suffixes was removed when Show was
   renamed to Debug.  It was an intentional change.  From RFC 0565:

    * Focus on the *runtime* aspects of a type; repeating information such
      as suffixes for integer literals is not generally useful since that
      data is readily available from the type definition.

 * Because Show was renamed to Debug, rename show! to debug!.
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
4e23179c85 Incorporated second review suggestion from eddyb. 2015-03-03 12:10:58 +01:00
Felix S. Klock II
11057fee08 Incorporated first review sugestion from eddyb.
Suggestion was here:

  https://github.com/rust-lang/rust/pull/22532#discussion_r25505609
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
46de12ad00 Switch to eval_const_expr_partial in trans::consts.
However, I left the ICEs rather than switching to nicer error
reporting there; these cases *should* be detected prior to hitting
trans, and thus ICE'ing here is appropriate.

(So why switch to `eval_const_expr_partial`? Because I want to try to
eliminate all uses of `eval_const_expr` entirely.)
2015-03-03 12:10:58 +01:00