663 Commits

Author SHA1 Message Date
Aidan Hobson Sayers
9b5859aea1 Remove all unstable placement features
Closes #22181, #27779
2018-04-03 11:02:34 +02:00
Mark Mansi
7ce8191775 Stabilize i128_type 2018-03-26 08:36:50 -05:00
kennytm
db4f3f93bc
Filed a proper tracking issue. 2018-03-24 07:02:35 +08:00
kennytm
abf4d8babf
When picking a candidate, consider the unstable ones last.
If there is potential ambiguity after stabilizing those candidates, a
warning will be emitted.
2018-03-24 06:58:01 +08:00
Alex Crichton
3ebe12eb3e Merge branch '49001_epoch' of https://github.com/klnusbaum/rust into rollup 2018-03-23 10:16:42 -07:00
Alex Crichton
7c0c7ef330 Rollup merge of #48909 - RalfJung:type_alias_bounds, r=petrochenkov
Improve lint for type alias bounds

First of all, I learned just today that I was wrong assuming that the bounds in type aliases are entirely ignored: It turns out they are used to resolve associated types in type aliases. So:
```rust
type T1<U: Bound> = U::Assoc; // compiles
type T2<U> = U::Assoc; // fails
type T3<U> = <U as Bound>::Assoc; // "correct" way to write this, maybe?
```
I am sorry for creating this mess.

This PR changes the wording of the lint accordingly. Moreover, since just removing the bound is no longer always a possible fix, I tried to detect cases like `T1` above and show a helpful message to the user:
```
warning: bounds on generic parameters are not enforced in type aliases
  --> $DIR/type-alias-bounds.rs:57:12
   |
LL | type T1<U: Bound> = U::Assoc; //~ WARN not enforced in type aliases
   |            ^^^^^
   |
   = help: the bound will not be checked when the type alias is used, and should be removed
help: use absolute paths (i.e., <T as Trait>::Assoc) to refer to associated types in type aliases
  --> $DIR/type-alias-bounds.rs:57:21
   |
LL | type T1<U: Bound> = U::Assoc; //~ WARN not enforced in type aliases
   |                     ^^^^^^^^
```
I am not sure if I got this entirely right. Ideally, we could provide a suggestion involving the correct trait and type name -- however, while I have access to the HIR in the lint, I do not know how to get access to the resolved name information, like which trait `Assoc` belongs to above. The lint does not even run if that resolution fails, so I assume that information is available *somewhere*...

This is a follow-up for (parts of) https://github.com/rust-lang/rust/pull/48326. Also see https://github.com/rust-lang/rust/issues/21903.

This changes the name of a lint, but that lint was just merged to master yesterday and has never even been on beta.
2018-03-23 10:16:08 -07:00
Kurtis Nusbaum
3c8d555497 rename epoch to edition 2018-03-20 10:27:02 -07:00
Vadim Petrochenkov
7c90189e13 Stabilize slice patterns without ..
Merge `feature(advanced_slice_patterns)` into `feature(slice_patterns)`
2018-03-20 02:27:40 +03:00
Ralf Jung
37ff4736c7 wording nits 2018-03-19 18:04:09 +01:00
Vadim Petrochenkov
f88162654d Rename Span::empty to Span::shrink_to_lo, add Span::shrink_to_hi 2018-03-17 22:12:21 +03:00
Vadim Petrochenkov
b057c554ab AST: Make renames in imports closer to the source
Fix `unused_import_braces` lint false positive on `use prefix::{self as rename}`
2018-03-17 22:12:21 +03:00
Andrew Cann
81ae93e339 register removed lints 2018-03-14 12:44:52 +08:00
Andrew Cann
59688e119e Make coerce_never lint an error
Remove the coerce_never lint and make the behaviour an error.
2018-03-14 12:44:51 +08:00
Andrew Cann
a9fc3901b0 stabilise feature(never_type)
Replace feature(never_type) with feature(exhaustive_patterns).
feature(exhaustive_patterns) only covers the pattern-exhaustives checks
that used to be covered by feature(never_type)
2018-03-14 12:44:51 +08:00
Andrew Cann
9b15ddb29e remove defaulting to unit
Types will no longer default to `()`, instead always defaulting to `!`.
This disables the associated warning and removes the flag from TyTuple
2018-03-14 12:44:51 +08:00
Niko Matsakis
e4728e494e transition various normalization functions to the new methods
In particular:

- `fully_normalize_monormophic_ty` => `normalize_erasing_regions`
- `normalize_associated_type_in_env` => `normalize_erasing_regions`
- `fully_normalize_associated_types_in` => `normalize_erasing_regions`
- `erase_late_bound_regions_and_normalize` => `normalize_erasing_late_bound_regions`
2018-03-13 11:22:07 -04:00
Niko Matsakis
6d0f9319df refactor ParamEnv::empty(Reveal) into two distinct methods
- `ParamEnv::empty()` -- does not reveal all, good for typeck
- `ParamEnv::reveal_all()` -- does, good for trans
- `param_env.with_reveal_all()` -- converts an existing parameter environment
2018-03-13 11:21:30 -04:00
Ralf Jung
0e6d40a3fb type_alias_bounds lint: If the type alias uses an associated type without "as", suggest to use the "as" form instead.
This is necessary to get rid of the type bound, and hence silence the warning.
2018-03-10 13:32:11 +01:00
Ralf Jung
562b44d8c3 Rename ignored_generic_bounds -> type_alias_bounds
First of all, the lint is specific for type aliases.  Second, it turns out the
bounds are not entirely ignored but actually used when accessing associated
types.  So change the wording of the lint, and adapt its name to reality.

The lint has never been on stable or beta, so renaming is safe.
2018-03-10 12:07:26 +01:00
bors
fedce67cd2 Auto merge of #48326 - RalfJung:generic-bounds, r=petrochenkov
Warn about ignored generic bounds in `for`

This adds a new lint to fix #42181. For consistency and to avoid code duplication, I also moved the existing "bounds in type aliases are ignored" here.

Questions to the reviewer:
* Is it okay to just remove a diagnostic error code like this? Should I instead keep the warning about type aliases where it is? The old code provided a detailed explanation of what's going on when asked, that information is now lost. On the other hand, `span_warn!` seems deprecated (after this patch, it has exactly one user left!).
* Did I miss any syntactic construct that can appear as `for` in the surface syntax? I covered function types (`for<'a> fn(...)`), generic traits (`for <'a> Fn(...)`, can appear both as bounds as as trait objects) and bounds (`for<'a> F: ...`).
* For the sake of backwards compatibility, this adds a warning, not an error. @nikomatsakis suggested an error in https://github.com/rust-lang/rust/issues/42181#issuecomment-306924389, but I feel that can only happen in a new epoch -- right?

Cc @eddyb
2018-03-09 10:45:29 +00:00
Manish Goregaokar
a08cfc4cb6 Add rust_2018_idioms lint group 2018-03-08 17:10:06 -08:00
Manish Goregaokar
fbe57cf13e Make bare_trait_object not be an epoch lint 2018-03-08 17:10:06 -08:00
Manish Goregaokar
ae5ae846cd Make tyvar_behind_raw_pointer an epoch lint 2018-03-08 17:10:05 -08:00
Manish Goregaokar
4338bd178d Move epochs to libsyntax 2018-03-08 17:10:03 -08:00
Oliver Schneider
47e0bb59db
Clean up the binary hex lint 2018-03-08 08:35:39 +01:00
Oliver Schneider
28572d2c1f
Nuke the entire ctfe from orbit, it's the only way to be sure 2018-03-08 08:08:14 +01:00
Oliver Schneider
e97089dae3
Move librustc_const_eval to librustc_mir 2018-03-08 08:08:14 +01:00
Oliver Schneider
918b6d7633
Produce instead of pointers 2018-03-08 08:08:14 +01:00
Ralf Jung
49abd87483 make bounds on higher-kinded lifetimes a hard error in ast_validation
Also move the check for not having type parameters into ast_validation.

I was not sure what to do with compile-fail/issue-23046.rs: The issue looks like
maybe the bounds actually played a role in triggering the ICE, but that seems
unlikely given that the compiler seems to entirely ignore them.  However, I
couldn't find a testcase without the bounds, so I figured the best I could do is
to just remove the bounds and make sure at least that keeps working.
2018-03-06 11:29:48 +01:00
kennytm
813ac2c36b
Rollup merge of #48432 - flip1995:lit_diag, r=oli-obk
Suggest type for overflowing bin/hex-literals

Fixes #48073

For hexadecimal and binary literals, which overflow, it gives an additional note to the warning message, like in this [comment](https://github.com/rust-lang/rust/issues/48073#issuecomment-365370113).

Additionally it will suggest a type (`X < Y`):
- `iX`: if literal fits in `uX` => `uX`, else => `iY`
- `-iX` => `iY`
- `uX` => `uY`

Exceptions: `isize`, `usize`. I don't think you can make a good suggestion here. The programmer has to figure it out on it's own in this case.

r? @oli-obk
2018-03-06 16:25:30 +08:00
kennytm
43de95ca5b
Rollup merge of #48403 - lukaslueg:casted, r=steveklabnik
Fix spelling s/casted/cast/

r? @GuillaumeGomez
2018-03-06 16:25:28 +08:00
Michael Woerister
542bc75dea Turn features() into a query. 2018-03-05 11:05:01 +01:00
flip1995
fc33b2567c Improve getting literal representation 2018-03-03 21:55:04 +01:00
Manish Goregaokar
38f4d557d0 Rollup merge of #48500 - petrochenkov:parpat, r=nikomatsakis
Support parentheses in patterns under feature gate

This is a prerequisite for any other extensions to pattern syntax - `|` with multiple patterns, type ascription, `..PAT` in slice patterns.

Closes https://github.com/rust-lang/rfcs/issues/554
2018-03-01 09:29:39 -08:00
Lukas Lueg
f7693c0633 Fix spelling s/casted/cast/ 2018-03-01 12:54:16 +01:00
flip1995
5c70619644
Rewrite error reporting as requested 2018-03-01 01:34:25 +01:00
flip1995
19c4771eeb
Implementing requested changes 2018-03-01 01:34:25 +01:00
flip1995
e822e62ee8
Suggest type for overflowing bin/hex-literals 2018-03-01 01:34:25 +01:00
Manish Goregaokar
f57835b7f4
Rollup merge of #48461 - Manishearth:epoch-dyn-trait, r=nmatsakis
Fixes #47311.
r? @nrc
2018-02-28 15:09:29 -08:00
Vadim Petrochenkov
c9aff92e6d Support parentheses in patterns under feature gate
Improve recovery for trailing comma after `..`
2018-03-01 01:47:56 +03:00
Ralf Jung
86821f7fb6 add lint to detect ignored generic bounds; this subsumes the previous 'generic bounds in type aliases are ignored' warning 2018-02-27 13:16:30 +01:00
Manish Goregaokar
d45c4a6d27
Rollup merge of #48386 - withoutboats:nonstandard-style, r=Manishearth
Add nonstandard_style alias for bad_style.
2018-02-24 15:52:08 -08:00
Manish Goregaokar
3eeabe7b7d Add hardwired lint for dyn trait 2018-02-23 08:24:07 -08:00
Manish Goregaokar
da9dc0507b Allow future-incompat lints to mention an epoch 2018-02-23 08:24:07 -08:00
boats
cf6e2f53ba
Add nonstandard_style alias for bad_style. 2018-02-20 13:28:51 -08:00
Robin Kruppe
051ea5cc9b [improper_ctypes] Don't suggest raw pointers when encountering trait objects
It's unhelpful since raw pointers to trait objects are also FFI-unsafe and casting to a thin raw pointer loses the vtable. There are working solutions that _involve_ raw pointers but they're too complex to explain in one line and have serious trade offs.
2018-02-15 19:49:50 +01:00
Robin Kruppe
9d493c897b [improper_ctypes] Point at definition of non-FFI-safe type if possible 2018-02-15 18:10:55 +01:00
Robin Kruppe
22a171609b [improper_ctypes] Suggest repr(transparent) for structs
The suggestion is unconditional, so following it could lead to further errors. This is already the case for the repr(C) suggestion, which makes this acceptable, though not *good*. Checking up-front whether the suggestion can help would be great but applies more broadly (and would require some refactoring to avoid duplicating the checks).
2018-02-15 18:10:54 +01:00
Robin Kruppe
9b5f47ec48 [improper_ctypes] Overhaul primary label
- Always name the non-FFI-safe
- Explain *why* the type is not FFI-safe
- Stop vaguely gesturing at structs/enums/unions if the non-FFI-safe types occured in a field.

The last part is arguably a regression, but it's minor now that the non-FFI-safe type is actually named. Removing it avoids some code duplication.
2018-02-15 18:10:54 +01:00
Robin Kruppe
ae92dfac50 [improper_ctypes] Stop complaining about repr(usize) and repr(isize) enums
This dates back to at least #26583. At the time, usize and isize were considered ffi-unsafe to nudge people away from them, but this changed in the aforementioned PR, making it inconsistent to complain about it in enum discriminants. In fact, repr(usize) is probably the best way to interface with `enum Foo : size_t { ... }`.
2018-02-15 17:47:53 +01:00