Commit Graph

69719 Commits

Author SHA1 Message Date
bors 481b42b507 Auto merge of #45528 - alexcrichton:avx512, r=arielb1
rustc: Add some more compatibility with AVX-512

* Increase the maximum vector size in the ABI calculations to ensure that
  AVX-512 operands are immediates.
* Add a few more `target_feature` matchings for AVX-512 features
2017-11-16 15:32:13 +00:00
bors c81f201d48 Auto merge of #46028 - oli-obk:clippy, r=kennytm
Reenable Clippy

r? @kennytm
2017-11-16 10:59:39 +00: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
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
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
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
Niko Matsakis 6f9fb91033 rename `equality-universal` to a more extensible naming scheme 2017-11-15 15:46:01 -05:00
Niko Matsakis 37dd79ff44 extend `where-allowed.rs` with many more cases
also merge disallowed and disallowed-2 into that set
2017-11-15 15:46:01 -05:00
Niko Matsakis ebc4408fc0 rename many-cases to where-allowed 2017-11-15 15:46:01 -05:00
Niko Matsakis 2520279604 test we reject equivalent signatures with more than one argument 2017-11-15 15:46:01 -05:00
Christopher Vittal b4c1aef1ca Add universal_impl_trait unstable-book entry 2017-11-15 15:46:01 -05:00
Christopher Vittal 04ad8fd7a5 Fix unclosed delimiter in sample error 2017-11-15 15:46:01 -05:00
Christopher Vittal 7d25d2e054 Remove unamed parameters 2017-11-15 15:46:01 -05:00
Christopher Vittal a23bea5479 Fix style and grammar 2017-11-15 15:46:01 -05:00
Christopher Vittal 06dff80061 Add/Modify tests for argument position impl Trait 2017-11-15 15:46:01 -05:00
Christopher Vittal bdff9463a0 Add universal_impl_trait feature gate
Move feature gate check to inside HIR lowering. Change error messages
and update tests.
2017-11-15 15:46:01 -05:00
Christopher Vittal 109f2dd36b Add new error comparision to hide desugaring
First some background:
To the compiler, the following two signatures in the trait vs the impl
are the same.

```rust
trait Foo {
    fn foo(&self, &impl Debug);
}
impl Foo for () {
    fn foo<U: Debug>(&self, x: &U) { ... }
}
```

We do not want to allow this, and so we add a new error and check.

The check just tests that all paramters 'syntheticness' match up. As
during collection, the impl Trait parameters are transformed into
anonymous synthetic generics.

Furthermore, causes a check for unused type parameters to be skipped in
check_bounds_are_used if there is already a TyError. Thus, an unused
input will not trigger `type parameter unused` errors.

Update the one test that checked for this error in the case of
a TyError.
2017-11-15 15:46:01 -05:00
Christopher Vittal f225fe43f1 Add collection of impl Trait argument lifetimes 2017-11-15 15:46:01 -05:00
Christopher Vittal 94df3c5edf Alter type collection to collect impl Trait bounds
In ast_generics extraction in generics_of and explicit_predicates_of,
also collect inputs if there are any.

Then use a Visitor to extract the necessary information from the
TyImplTraitUniversal types before extending generics and predicates with
the new information.
2017-11-15 15:46:01 -05:00
Christopher Vittal e4c7e2c99a Add bool item is_in_impl_trait to LoweringContext
This is for tracking if an ImplItem is part of a trait impl. Add
a with_trait_impl_ref method to ItemLowerer to appropriately save the
state to allow appropriate nesting of trait and non-trait impls.
2017-11-15 15:46:01 -05:00
Christopher Vittal 8fd48e7d59 Split hir::TyImplTrait, move checks to HIR lowering
Replace hir::TyImplTrait with TyImplTraitUniversal and
TyImplTraitExistential.

Add an ImplTraitContext enum to rustc::hir::lowering to track the kind
and allowedness of an impl Trait.

Significantly alter lowering to thread ImplTraitContext and one other
boolean parameter described below throughought much of lowering.

The other parameter is for tracking if lowering a function is in a trait
impl, as there is not enough information to otherwise know this
information during lowering otherwise.

This change also removes the checks from ast_ty_to_ty for impl trait
allowedness as they are now all taking place in HIR lowering.
2017-11-15 15:46:01 -05:00
Christopher Vittal 779fc372c7 Move E0562 to librustc from librustc_typeck
With the check for impl trait moving from type checking to HIR lowering
the error needs to move too.
2017-11-15 15:46:01 -05:00
bors fa26421f56 Auto merge of #45938 - vramana:fix-ice-45698, r=arielb1
Fix End-user description not implemented for field access on `TyClosure

- [x] Add Tests
2017-11-15 20:18:13 +00:00
bors 88a28ff602 Auto merge of #45936 - mikhail-m1:mir-borrowck-storage-dead, r=arielb1
add `StorageDead` handling

fix #45642
r? @arielb1
2017-11-15 16:07:48 +00:00
bors ce2b8a4944 Auto merge of #45715 - oli-obk:clippy, r=kennytm
Reenable clippy testing

fixes #45680
2017-11-15 13:06:08 +00:00
Oliver Schneider 5319203aa3
Reenable clippy testing 2017-11-15 10:42:47 +01:00
Mikhail Modin 9e35fd262f fix test 2017-11-15 12:30:30 +03:00
Mikhail Modin 34be1516aa fix comment, remove redundant code 2017-11-15 11:21:05 +03:00
Mikhail Modin 830d65c1ff add `StorageDead` handling 2017-11-15 11:21:05 +03:00
bors 3707db9405 Auto merge of #45944 - eddyb:provide, r=nikomatsakis
rustc_driver: expose a way to override query providers in CompileController.

This API has been a long-time coming and will probably become the main method for custom drivers (that is, binaries other than `rustc` itself that use `librustc_driver`) to adapt the compiler's behavior.
2017-11-15 08:02:19 +00:00
bors f93a4928c2 Auto merge of #45922 - vramana:fix-45702, r=nikomatsakis
Fix MIR borrowck EndRegion not found

Fixes #45702

- [x] Add Tests
2017-11-15 04:48:16 +00:00
bors 8a98531973 Auto merge of #45913 - sinkuu:mir-inlining-closure, r=arielb1
Handle closures correctly in MIR inlining

Fixes #45894.
2017-11-15 01:32:30 +00:00
Ramana Venkata 5144d3222f Fix printing of upvar in closures 2017-11-15 02:24:25 +05:30
Ramana Venkata a6d691b43c Fix End-user description not implemented for field access on `TyClosure
Fixes #45698
2017-11-15 01:06:05 +05:30