Commit Graph

70208 Commits

Author SHA1 Message Date
Niko Matsakis
ef5de07fc5 fix rename to block_data in type_check.rs 2017-11-16 05:57:34 -05:00
Marc-Antoine Perennou
98175892b0 rustbuild: make tidy happy
Signed-off-by: Marc-Antoine Perennou <Marc-Antoine@Perennou.com>
2017-11-16 11:26:45 +01:00
Marc-Antoine Perennou
8f91a45e48 rustbuild: dist cargo-fmt as part of rustfmt
Signed-off-by: Marc-Antoine Perennou <Marc-Antoine@Perennou.com>
2017-11-16 10:51:23 +01:00
Marc-Antoine Perennou
8cd5735503 rustbuild: use a macro to define "extended" tools
Signed-off-by: Marc-Antoine Perennou <Marc-Antoine@Perennou.com>
2017-11-16 10:51:23 +01:00
Marc-Antoine Perennou
1930ee8b94 rustbuild: Install rustfmt as part of extended build
Signed-off-by: Marc-Antoine Perennou <Marc-Antoine@Perennou.com>
2017-11-16 10:47:26 +01:00
Guillaume Gomez
d57fed893e Rollup merge of #46010 - lnicola:escape-root, r=GuillaumeGomez
rustdoc: Escape doc root URLs

This fixes a small HTML injection issue.
2017-11-16 10:05:07 +01:00
Guillaume Gomez
b09af7064e Rollup merge of #46005 - GuillaumeGomez:short-unstable, r=nrc
Set short-message feature unstable

Fixes #45995.

r? @nrc
2017-11-16 10:05:06 +01:00
Guillaume Gomez
8debe610ee Rollup merge of #45993 - QuietMisdreavus:anti-cow, r=kennytm
examples in Cow::into_owned don't need to wrap result in Cows

This totally confused me until i triple-checked the actual return value and opened the examples in the playground myself.

r? @rust-lang/docs
2017-11-16 10:05:05 +01:00
Guillaume Gomez
ed64b97d61 Rollup merge of #45984 - ExpHP:attr-error-context, r=estebank
Add context to E0084, E0517, E0518

A small diagnostic enhancement to get my feet wet.  Please scrutinize!

This modifies errors E0084, E0517, and E0518 to include both the annotation and the annotated item.  All of these errors already had labels; I moved the label to the other span, and rephrased it as necessary.

Fixes #45886
2017-11-16 10:05:04 +01:00
Guillaume Gomez
3c1ea047da Rollup merge of #45973 - arielb1:fast-path, r=estebank
avoid the pprust infrastructure in macro expansion

This changes macro expansion to format the path of a macro directly
instead of usng the pprust infrastructure. The pprust infrastructure
tries to perform line-breaking in a slow fashion, which is undesired
when formatting the path of a macro.

This should to speed up expansion by a fair amount (I saw 20% on a
profiler on `rustc_mir`, and 50% of the time marked as "expansion" in
the profiler/time-passes is actually spent loading dependencies).

r? @jseyfried
2017-11-16 10:05:03 +01:00
Guillaume Gomez
387fa844bb Rollup merge of #45951 - CrockAgile:master, r=michaelwoerister
incr: Update hash tests to use `except`-style checking

Part of #44924

r? @michaelwoerister
2017-11-16 10:05:02 +01:00
Oliver Schneider
20eb27ed92
Reenable Clippy 2017-11-16 09:35:53 +01:00
bors
edd9dbcdbb Auto merge of #45985 - arielb1:unsafe-dedup, r=eddyb
check_unsafety: fix unused unsafe block duplication

The duplicate error message is later removed by error message
deduplication, but it still appears on beta and is still a bug.

r? @eddyb
2017-11-16 08:31:59 +00:00
Esteban Küber
f796fcd623 Point to ADT definition when not finding variant, method, assoc type 2017-11-15 23:24:58 -08:00
bors
1410d56040 Auto merge of #45920 - sunfishcode:trap-on-unreachable, r=Zoxc
Enable TrapUnreachable in LLVM.

This patch enables LLVM's TrapUnreachable flag, which tells it to translate `unreachable` instructions into hardware trap instructions, rather than allowing control flow to "fall through" into whatever code happens to follow it in memory.

This follows up on https://github.com/rust-lang/rust/issues/28728#issuecomment-332581533. For example, for @zackw's testcase [here](https://github.com/rust-lang/rust/issues/42009#issue-228745924), the output function contains a `ud2` instead of no code, so it won't "fall through" into whatever happens to be next in memory.

(I'm also working on the problem of LLVM optimizing away infinite loops, but the patch here is useful independently.)

I tested this patch on a few different codebases, and the code size increase ranged from 0.0% to 0.1%.
2017-11-16 06:10:36 +00:00
Esteban Küber
6a972cd855 Use the proper term when using non-existing variant
When using a non-existing variant, function or associated item, refer to
the proper term, instead of defaulting to "associated item" in
diagnostics.
2017-11-15 20:39:05 -08:00
bors
8385fc062d Auto merge of #46025 - nrc:rustfmt-fix, r=Mark-Simulacrum
Fix a bug where the rustfmt tarball was not being produced

r? @alexcrichton

This makes rustfmt a dep of 'extended', which seems to be necessary for the rustfmt dist step to actually get run.
2017-11-16 03:49:13 +00:00
Nick Cameron
262029eca9 Fix a bug where the rustfmt tarball was not being produced 2017-11-16 16:02:18 +13:00
bors
42ea30c8b0 Auto merge of #45692 - steveklabnik:ship-cargo-book, r=alexcrichton
Start shipping the Cargo book

Fixes #44910
Fixes #39588

See both of those bugs for more details.
2017-11-16 01:16:58 +00:00
Dan Gohman
ac48348db8 Update the compiler-builtins to latest master. 2017-11-15 16:07:48 -08:00
bors
b8c70b0fdf Auto merge of #45918 - chrisvittal:impl-trait-pr, r=nikomatsakis
Implement `impl Trait` in argument position (RFC1951, Universal quantification)

Implements the remainder of #44721, part of #34511.

**Note**: This PR currently allows argument position `impl Trait` in trait functions. The machinery is there to prevent this if we want to, but it currently does not.

Rename `hir::TyImplTrait` to `hir::TyImplTraitExistential` and add `hir::TyImplTraitUniversal(DefId, TyParamBounds)`. The `DefId` is needed to extract the index of the parameter in `ast_ty_to_ty`.

Introduce an `ImplTraitContext` enum to lowering to keep track of the kind and allowedness of `impl Trait` in that position. This new argument is passed through many places, all ending up in `lower_ty`.

Modify `generics_of` and `explicit_predicates_of` to collect the `impl Trait` args into anonymous synthetic generic parameters and to extend the predicates with the appropriate bounds.

Add a comparison of the 'syntheticness' of type parameters, that is, prevent the following.
```rust
trait Foo {
    fn foo(&self, &impl Debug);
}
impl Foo for Bar {
    fn foo<U: Debug>(&self, x: &U) { ... }
}
```
And vice versa.

Incedentally, supress `unused type parameter` errors if the type being compared is already a `TyError`.

**TODO**: I have tried to annotate open questions with **FIXME**s. The most notable ones that haven't been resolved are the names of the `impl Trait` types and the questions surrounding the new `compare_synthetic_generics` method.
1. For now, the names used for `impl Trait` parameters are `keywords::Invalid.name()`. I would like them to be `impl ...` if possible, but I haven't figured out a way to do that yet.
2. For `compare_synthetic_generics` I have tried to outline the open questions in the [function itself](3fc9e3705f/src/librustc_typeck/check/compare_method.rs (L714-L725))

r? @nikomatsakis
2017-11-15 22:47:54 +00:00
Niko Matsakis
58c77600a5 move region resolution to be a sibling of region_inference
Temporary make various fields public.
2017-11-15 16:58:14 -05:00
Niko Matsakis
467f2ea653 extract lexical region resolution into its own sub-module 2017-11-15 16:50:32 -05:00
Niko Matsakis
efa09dbea5 modify MIR type-checker to process obligations as they are incurred 2017-11-15 16:50:32 -05:00
Niko Matsakis
9e8abd704a apply rustfmt to type_check 2017-11-15 16:50:30 -05:00
Niko Matsakis
6d672961fb thread location info through mir typeck (but do not use) 2017-11-15 16:49:23 -05:00
Niko Matsakis
15a2dfa324 move the OutlivesEnvironment into infer so that nll can use it
Unquestionably there is more cleanup to be done, but I'm not sure what
it should look like yet, so leaving it roughly as is.
2017-11-15 16:49:22 -05:00
Niko Matsakis
56e5eb5fd4 rename mod region_obligations to outlives::obligations 2017-11-15 16:49:22 -05:00
Niko Matsakis
0c81d0158f extract out the implied bounds code from regionck 2017-11-15 16:49:22 -05:00
Niko Matsakis
b587c1a024 regionck: only add implied bounds from root fn to free_region_map 2017-11-15 16:49:22 -05:00
Niko Matsakis
3cc44a569d do not invoke required_region_bounds in region_obligations
Instead, just search the param env predicates directly. This is
equivalent to what we were doing before but more efficient.
2017-11-15 16:49:22 -05:00
Niko Matsakis
e0630e8683 refactor how we extract outlives bounds from trait definitions
This new way is **slightly** less expressive (I would be shocked if it
affects any code, though) when it comes to higher-ranked bounds or a
few other weird tricks. But we don't handle those consistently
regardless, and the new way does not require normalization and is just
wildly simpler.
2017-11-15 16:49:22 -05:00
Niko Matsakis
22cd041ba0 move the region_obligations processing code into InferCtxt 2017-11-15 16:49:21 -05:00
Niko Matsakis
d73be851fb extract regionck_outlives into a separate helper function
This helps make its inputs and outputs more clear.
2017-11-15 16:49:21 -05:00
Niko Matsakis
c925008a5c assert that we are consuming all of the region obligations
When we get around to resolving regions, we really ought to take region
obligations into account. There is one case where they are presently
being ignored. Keep ignoring them there for now but leave a TODO.
2017-11-15 16:49:21 -05:00
Niko Matsakis
0d78e40e88 convert EXTRA_REQUIREMENT_IN_IMPL into a hard error
cc #37166
2017-11-15 16:49:21 -05:00
Niko Matsakis
64206b44b9 move region constraints into inference context 2017-11-15 16:49:21 -05:00
Niko Matsakis
4afe423fbf fulfill: remove dead code 2017-11-15 16:49:20 -05:00
Christopher Vittal
4ce61b7362 Change clippy to broken after hir::Ty enum change 2017-11-15 15:46:30 -05:00
Niko Matsakis
98d5db3350 add a new test featuring two impl traits to show what it looks like 2017-11-15 15:46:01 -05:00
Christopher Vittal
337dee4c80 Remove Fn trait + impl Trait rustdoc tests 2017-11-15 15:46:01 -05:00
Christopher Vittal
517db79c1f Renumber error to fix tidy 2017-11-15 15:46:01 -05:00
Christopher Vittal
22f0940f2d Add cases to where-allowed.rs 2017-11-15 15:46:01 -05:00
Christopher Vittal
f710d41f77 Add/Fix stderr references for impl Trait ui tests 2017-11-15 15:46:01 -05:00
Christopher Vittal
b276429734 Disallow all impl Trait within Fn trait sugar
We already disallowed them to be in the arg list, such as
Fn(impl Debug), but now we disallow Fn() -> impl Debug.

Also remove the ImplTraitContext argument from the function
lower_parenthesized_parameter_data as it is now unused.

Comment out part of test run-pass/impl-trait/xcrate.rs that now fails.
2017-11-15 15:46:01 -05:00
Christopher Vittal
9b4372e3b1 Incorporate review feedback
Add requested comments, restructure some small bits of code. Fix extern
declarations allowing impl Trait.
2017-11-15 15:46:01 -05:00
Chris Vittal
7e9948f92f Add proper names to impl Trait parameters.
Uses Symbol::intern and hir.node_to_pretty_string to create a name for
the impl Trait parameter that is just impl and then a ' + ' separated
list of bounds that the user typed.
2017-11-15 15:46:01 -05:00
Niko Matsakis
2786ea662d some tests featuring multiple bounds, other errors 2017-11-15 15:46:01 -05:00
Niko Matsakis
15001ee336 add a UI test showing the current output from an impl trait type 2017-11-15 15:46:01 -05:00
Niko Matsakis
9d71bf6d55 add some more positive tests
It'd be good to have a positive test for each case where it is
allowed, I should think.
2017-11-15 15:46:01 -05:00