Commit graph

6465 commits

Author SHA1 Message Date
Corey Farwell
a63b1dfa34 Rollup merge of #40841 - arielb1:immutable-blame, r=pnkfelix
borrowck: consolidate `mut` suggestions

This converts all of borrowck's `mut` suggestions to a new
`mc::ImmutabilityBlame` API instead of the current mix of various hacks.

Fixes #35937.
Fixes #40823.
Fixes #40859.

cc @estebank
r? @pnkfelix
2017-03-29 08:57:06 -04:00
bors
10b1739588 Auto merge of #40836 - arielb1:issue-32330-copy, r=nikomatsakis
store a copy of the Issue32230 info within TypeError

The data can't be looked up from the region variable directly, because
the region variable might have been destroyed at the end of a snapshot.

Fixes #40000.
Fixes #40743.

beta-nominating because regression.
r? @nikomatsakis
2017-03-29 01:18:13 +00:00
Alex Crichton
68c7385c37 Rollup merge of #40849 - jseyfried:finalize_trait_macro_resolutions, r=nrc
bugfix: finalize resolutions of macros in trait positions

Fixes #40845.
r? @nrc
2017-03-27 15:56:26 -07:00
bors
ccce2c6eb9 Auto merge of #40764 - arielb1:range-nodes, r=eddyb
keep the AST node-id when lowering ExprKind::Range

When the Range expression is the root of a constant, its node-id is
used for the def-id of the body, so it has to be preserved in the AST ->
HIR lowering.

Fixes #40749.

r? @eddyb
beta-nominating because regression
2017-03-27 05:28:32 +00:00
Jeffrey Seyfried
737511ee11 Ensure that macro resolutions in trait positions get finalized. 2017-03-27 05:22:18 +00:00
Ariel Ben-Yehuda
50728e5245 borrowck: consolidate mut suggestions
This converts all of borrowck's `mut` suggestions to a new
`mc::ImmutabilityBlame` API instead of the current mix of various hacks.

Fixes #35937.
Fixes #40823.
2017-03-27 01:37:42 +03:00
bors
7846dbe0c8 Auto merge of #40826 - frewsxcv:rollup, r=frewsxcv
Rollup of 7 pull requests

- Successful merges: #40642, #40734, #40740, #40771, #40807, #40820, #40821
- Failed merges:
2017-03-26 14:04:25 +00:00
bors
bcfd5c48b7 Auto merge of #40501 - jseyfried:shadow_builtin_macros, r=nrc
Allow `use` macro imports to shadow global macros

Terminology:
 - global scope: builtin macros, macros from the prelude, `#[macro_use]`, or `#![plugin(..)]`.
 - legacy scope: crate-local `macro_rules!`.
 - modern scope: `use` macro imports, `macro` (once implemented).

Today, the legacy scope can shadow the global scope (modulo RFC 1560 expanded shadowing restrictions). However, the modern scope cannot shadow or be shadowed by either the global or legacy scopes, leading to ambiguity errors.

This PR allows the modern scope to shadow the global scope (subject to some restrictions).
More specifically, a name in the global scope is as shadowable as a glob import in the module `self`. In other words, we imagine a special, implicit glob import in each module item:
```rust
mod foo {
    #[lexical_only] // Not accessible via `foo::<name>`, like pre-RFC 1560 `use` imports.
    #[shadowable_by_legacy_scope] // for back-compat
    use <global_macros>::*;
}
```

r? @nrc
2017-03-26 11:45:13 +00:00
Ariel Ben-Yehuda
7e0f7a50ab store a copy of the Issue32230 info within TypeError
The data can't be looked up from the region variable directly, because
the region variable might have been destroyed at the end of a snapshot.

Fixes #40000.
Fixes #40743.
2017-03-26 14:38:23 +03:00
Corey Farwell
2673b03d65 Rollup merge of #40734 - adamransom:fix/40661, r=jseyfried
Add warning for use of lifetime parameter with 'static bound

Previously a `'static` lifetime bound would result in an `undeclared lifetime` error when compiling, even though it could be considered valid.

However, it is unnecessary to use it as a lifetime bound so we present the user with a warning instead and suggest using the `'static` lifetime directly, in place of the lifetime parameter. We can change this to an error (or warning with lint) if that's decided to be more appropriate.

Example output:
```
warning: unnecessary lifetime parameter `'a`
 --> ../static-lifetime-bound.rs:3:10
  |
3 | fn f<'a: 'static>(val: &'a i32) {
  |      ^^^^^^^^^^^
  |
  = help: you can use the `'static` lifetime directly, in place `'a`
```

Fixes #40661

r? @jseyfried
2017-03-25 09:30:29 -07:00
Adam Ransom
e7949d0013 Warn when using a 'static lifetime bound
Previously a `'static` lifetime bound would result in an `undeclared
lifetime` error when compiling, even though it could be considered
valid.

However, it is unnecessary to use it as a lifetime bound so we present
the user with a warning instead and suggest using the `'static` lifetime
directly, in place of the lifetime parameter.
2017-03-25 10:47:19 +09:00
Corey Farwell
b561d2b530 Rollup merge of #40636 - nikomatsakis:revert-39485, r=eddyb
Revert #39485, fixing type-inference regressions

This reverts PR #39485, which should fix the immediate regressions. Eventually I'd like to land https://github.com/rust-lang/rust/pull/40224 -- or some variant of it -- which revisits the question fo dead-code and inference.

r? @eddyb
cc @canndrew
2017-03-24 18:13:11 -05:00
Jeffrey Seyfried
64e9af47f4 Allow declarative macros 2.0 and use macro imports to shadow builtin macros. 2017-03-24 21:05:52 +00:00
Ariel Ben-Yehuda
8ffe4068a6 keep the AST node-id when lowering ExprKind::Range
When the Range expression is the root of a constant, its node-id is
used for the def-id of the body, so it has to be preserved in the AST ->
HIR lowering.

Fixes #40749.
2017-03-23 19:26:38 +02:00
Corey Farwell
ea76c5ed56 Rollup merge of #40753 - mandeep:change-ObjectSafetyViolation-message, r=brson
Change object safety violation message

Hello!

This is my first pull request to rust so hopefully all goes well. This PR should fix issue #40670. I changed the error message in object_safety.rs and the corresponding compile-fail test in object-safety-supertrait-mentions-Self.rs.

Once the changes were made, I ran ```python x.py test src/tools/tidy``` and ```python x.py test```. Tidy passed and the compile-fail tests passed, however the test suite failed on the tcp tests as my machine has IPv6 disabled. I'm not sure what to do in this case besides letting travis run the suite against my changes. Please let me know if there's anything I can do to help further.

Thanks!
Mandeep
2017-03-23 08:42:49 -05:00
Corey Farwell
640dbbdd3a Rollup merge of #40627 - estebank:pub-restricted, r=petrochenkov
Add diagnostic for incorrect `pub (restriction)`

Given the following statement

```rust
pub (a) fn afn() {}
```

Provide the following diagnostic:

```rust
error: incorrect restriction in `pub`
  --> file.rs:15:1
   |
15 | pub (a) fn afn() {}
   |     ^^^
   |
   = help: some valid visibility restrictions are:
           `pub(crate)`: visible only on the current crate
           `pub(super)`: visible only in the current module's parent
           `pub(in path::to::module)`: visible only on the specified path
help: to make this visible only to module `a`, add `in` before the path:
   | pub (in a) fn afn() {}
```

Follow up to #40340, fix #40599, cc #32409.
2017-03-23 08:42:46 -05:00
Esteban Küber
769b95dc9f Add diagnostic for incorrect pub (restriction)
Given the following statement

```rust
pub (a) fn afn() {}
```

Provide the following diagnostic:

```rust
error: incorrect restriction in `pub`
  --> file.rs:15:1
   |
15 | pub (a) fn afn() {}
   | ^^^^^^^
   |
   = help: some valid visibility restrictions are:
           `pub(crate)`: visible only on the current crate
           `pub(super)`: visible only in the current module's parent
           `pub(in path::to::module)`: visible only on the specified path
help: to make this visible only to module `a`, add `in` before the path:
   | pub (in a) fn afn() {}
```

Remove cruft from old `pub(path)` syntax.
2017-03-22 22:51:45 -07:00
mandeep
7d302d2582 Changed E0038 error message in test to comply with new message 2017-03-22 23:06:56 -05:00
Corey Farwell
cc98dfc8d2 Rollup merge of #40518 - michaelwoerister:hir-id, r=eddyb
Introduce HirId, a replacement for ast::NodeId after lowering to HIR

This is the first step towards implementing #40303. This PR introduces the `HirId` type and generates a `HirId` for everything that would be assigned one (i.e. stuff in the HIR), but the HIR data types still use `NodeId` for now. Changing that is a big refactoring that I want to do in a separate PR.

A `HirId` uniquely identifies a node in the HIR of the current crate. It is composed of the `owner`, which is the `DefIndex` of the directly enclosing `hir::Item`, `hir::TraitItem`, or `hir::ImplItem` (i.e. the closest "item-like"), and the `local_id` which is unique within the given owner.

This PR is also running a number of consistency checks for the generated `HirId`s:
- Does `NodeId` in the HIR have a corresponding `HirId`?
- Is the `owner` part of each `HirId` consistent with its position in the HIR?
- Do the numerical values of the `local_id` part all lie within a dense range of integers?

cc @rust-lang/compiler

r? @eddyb or @nikomatsakis
2017-03-22 23:37:59 -04:00
Corey Farwell
880f03b28c Rollup merge of #40509 - jseyfried:duplicate_check_macro_exports, r=nrc
Forbid conflicts between macros 1.0 exports and macros 2.0 exports

This PR forbids for conflicts between `#[macro_export]`/`#[macro_reexport]` macro exports and `pub use` macro exports. For example,
```rust
// crate A:
pub use macros::foo;
//^ This is allowed today, will be forbidden by this PR.

// crate B:
extern crate A; // This triggers a confusing error today.
use A::foo; // This could refer to refer to either macro export in crate A.
```

r? @nrc
2017-03-22 19:30:23 -04:00
Michael Woerister
bc259ee844 Introduce HirId, a replacement for NodeId after lowering to HIR.
HirId has a more stable representation than NodeId, meaning that
modifications to one item don't influence (part of) the IDs within
other items. The other part is a DefIndex for which there already
is a way of stable hashing and persistence.

This commit introduces the HirId type and generates a HirId for
every NodeId during HIR lowering, but the resulting values are
not yet used anywhere, except in consistency checks.
2017-03-22 17:02:07 +01:00
Niko Matsakis
89ddd717ca Revert "Auto merge of #39485 - canndrew:inference-fix-39297, r=nikomatsakis"
This reverts commit dc0bb3f283, reversing
changes made to e879aa43ef.

This is a temporary step intended to fix regressions. A more
comprehensive fix for type inference and dead-code is in the works.
2017-03-22 11:13:09 -04:00
Jeffrey Seyfried
678e882ce2
Check for conflicts between macros 1.0 exports (#[macro_export], #[macro_reexport])
and macros 2.0 exports (`pub use` macro re-exports and `pub macro` (once implemented)
at the crate root.
2017-03-21 16:23:18 -04:00
Vadim Petrochenkov
b5e889791a Refactor parsing of trait object types 2017-03-21 23:01:53 +03:00
Corey Farwell
17656ab328 Rollup merge of #40556 - cramertj:stabilize-pub-restricted, r=petrochenkov
Stabilize pub(restricted)

Fix https://github.com/rust-lang/rust/issues/32409
2017-03-20 23:44:59 -04:00
Corey Farwell
fcc2d25794 Rollup merge of #40229 - cramertj:break-to-blocks, r=nikomatsakis
Implement `?` in catch expressions

Builds on #39921. Final part of #39849.

r? @nikomatsakis
2017-03-20 23:44:55 -04:00
Corey Farwell
7b686ce4ca Rollup merge of #40441 - tschottdorf:promotable-rfc, r=eddyb
Add feature gate for rvalue-static-promotion

Probably needs more tests (which ones?) and there may be other things that need to be done. Also not sure whether the version that introduces the flag is really `1.15.1`.

See https://github.com/rust-lang/rfcs/pull/1414.

Updates #38865.
2017-03-19 10:18:12 -04:00
bors
9c15de4fd5 Auto merge of #40346 - jseyfried:path_and_tokenstream_attr, r=nrc
`TokenStream`-based attributes, paths in attribute and derive macro invocations

This PR
 - refactors `Attribute` to use  `Path` and `TokenStream` instead of `MetaItem`.
 - supports macro invocation paths for attribute procedural macros.
   - e.g. `#[::foo::attr_macro] struct S;`, `#[cfg_attr(all(), foo::attr_macro)] struct S;`
 - supports macro invocation paths for derive procedural macros.
   - e.g. `#[derive(foo::Bar, super::Baz)] struct S;`
 - supports arbitrary tokens as arguments to attribute procedural macros.
   - e.g. `#[foo::attr_macro arbitrary + tokens] struct S;`
 - supports using arbitrary tokens in "inert attributes" with derive procedural macros.
   - e.g. `#[derive(Foo)] struct S(#[inert arbitrary + tokens] i32);`
where `#[proc_macro_derive(Foo, attributes(inert))]`

r? @nrc
2017-03-19 10:56:08 +00:00
Taylor Cramer
1f43731772 Add more catch-related CFG and lifetime tests and fix CFG bug 2017-03-17 21:01:04 -07:00
Taylor Cramer
fc04eaacc5 Implement ? in catch expressions and add tests 2017-03-17 21:01:04 -07:00
Taylor Cramer
60c1c961c7 Make priv in pub hard error for crates using pub(restricted) 2017-03-17 20:38:32 -07:00
Corey Farwell
dee6989b43 Rollup merge of #40457 - frewsxcv:frewsxcv-macos, r=steveklabnik
Update usages of 'OSX' (and other old names) to 'macOS'.

As of last year with version 'Sierra', the Mac operating system is now
called 'macOS'.
2017-03-17 08:48:52 -04:00
Taylor Cramer
28626ca5b1 Stabilize pub(restricted) 2017-03-15 22:39:04 -07:00
Tobias Schottdorf
f06b04949f Improve the documentation for rvalue_static_promotion 2017-03-14 11:06:50 -04:00
Tobias Schottdorf
b43c744318 Add feature toggle for rvalue-static-promotion RFC
See https://github.com/rust-lang/rfcs/pull/1414.

Updates #38865.
2017-03-14 11:06:50 -04:00
bors
6f10e2f63d Auto merge of #39921 - cramertj:add-catch-to-ast, r=nikomatsakis
Add catch {} to AST

Part of #39849. Builds on #39864.
2017-03-14 10:40:09 +00:00
Jeffrey Seyfried
85e02bdbfc Add tests. 2017-03-14 04:39:23 +00:00
Jeffrey Seyfried
839c2860cc Liberalize attributes. 2017-03-14 04:39:21 +00:00
Corey Farwell
97a1b6a055 Update usages of 'OSX' (and other old names) to 'macOS'.
As of last year with version 'Sierra', the Mac operating system is now
called 'macOS'.
2017-03-12 14:59:04 -04:00
bors
f88b24b34c Auto merge of #40340 - petrochenkov:restricted, r=nikomatsakis
Update syntax for `pub(restricted)`

Update the syntax before stabilization.

cc https://github.com/rust-lang/rust/issues/32409
r? @nikomatsakis
2017-03-12 11:08:44 +00:00
Taylor Cramer
b1aa99352a Add compile-fail tests for catch expr in match or condition 2017-03-11 22:26:57 -08:00
Taylor Cramer
ea4e8b0a81 Temporarily prefix catch block with do keyword 2017-03-11 22:26:57 -08:00
Taylor Cramer
d95c543722 Add catch expr to AST and disallow catch as a struct name 2017-03-11 22:26:52 -08:00
Ariel Ben-Yehuda
c886815e94 Rollup merge of #40319 - eddyb:it's-"unsize"-not-"unsound", r=nikomatsakis
Disallow subtyping between T and U in T: Unsize<U>.

Because `&mut T` can be coerced to `&mut U`, `T` and `U` must be unified invariantly. Fixes #40288.
E.g. coercing `&mut [&'a X; N]` to `&mut [&'b X]` must require `'a` be equal to `'b`, otherwise you can convert between `&'a X` and `&'b X` (in either direction), potentially unsoundly lengthening lifetimes.

Subtyping here was introduced with `Unsize` in #24619 (landed in 1.1, original PR is #23785).
2017-03-11 21:57:42 +02:00
Vadim Petrochenkov
880262a2bc Update syntax for pub(restricted) 2017-03-10 08:19:20 -08:00
Esteban Küber
ac2bc7c570 Point to enclosing block/fn on nested unsafe
When declaring nested unsafe blocks (`unsafe {unsafe {}}`) that trigger
the "unnecessary `unsafe` block" error, point out the enclosing `unsafe
block` or `unsafe fn` that makes it unnecessary.
2017-03-10 07:53:08 -08:00
Eduard-Mihai Burtescu
cfb41aedd3 Use subtyping on the target of unsizing coercions. 2017-03-09 21:43:45 +02:00
Ariel Ben-Yehuda
37faa60d8e Rollup merge of #40296 - topecongiro:add-missing-tests, r=alexcrichton
Add tests for issues with the 'E-needtest' label.

This PR adds tests for the following issues:
2017-03-08 20:54:01 +02:00
Ariel Ben-Yehuda
006c74432d Rollup merge of #40279 - gibfahn:test-unwind, r=est31
Add compile-fail tests for remaining items in whitelist and remove it

Add compile-fail tests for `cfg_target_thread_local` and `unwind_attributes`, and remove the whitelist.

Let me know if I should clean up the tests (or if I've done anything else wrong, this is my first contribution to rust).

cc/ @est31
2017-03-08 20:53:57 +02:00
Eduard-Mihai Burtescu
319890487a Disallow subtyping between T and U in T: Unsize<U>. 2017-03-08 14:36:19 +02:00