Commit graph

7522 commits

Author SHA1 Message Date
Vadim Petrochenkov
5987fe8f75 Remove most of Hash impls from AST and HIR structures 2018-07-14 14:57:14 +03:00
Vadim Petrochenkov
4d1a30c92b Remove most of PartialEq impls from AST and HIR structures 2018-07-14 14:56:57 +03:00
Richard Diamond
6332bb1506 Add the amdgpu-kernel ABI.
Technically, there are requirements imposed by the LLVM
`AMDGPUTargetMachine` on functions with this ABI (eg, the return type
must be void), but I'm unsure exactly where this should be enforced.
2018-07-13 17:22:23 -05:00
Mark Rousskov
2d49909f45
Rollup merge of #52224 - ljedrz:dyn_libsyntax, r=oli-obk
Deny bare trait objects in in src/libsyntax

Enforce `#![deny(bare_trait_objects)]` in `src/libsyntax`.
2018-07-11 12:38:39 -06:00
Mark Rousskov
322632ac10
Rollup merge of #51952 - petrochenkov:transmark, r=alexcrichton
hygiene: Decouple transparencies from expansion IDs

And remove fallback to parent modules during resolution of names in scope.

This is a breaking change for users of unstable macros 2.0 (both procedural and declarative), code like this:
```rust
#![feature(decl_macro)]

macro m($S: ident) {
    struct $S;
    mod m {
        type A = $S;
    }
}

fn main() {
    m!(S);
}
```
or equivalent
```rust
#![feature(decl_macro)]

macro m($S: ident) {
    mod m {
        type A = $S;
    }
}

fn main() {
    struct S;
    m!(S);
}
```
stops working due to module boundaries being properly enforced.

For proc macro derives this is still reported as a compatibility warning to give `actix_derive`, `diesel_derives` and `palette_derive` time to fix their issues.

Fixes https://github.com/rust-lang/rust/issues/50504 in accordance with [this comment](https://github.com/rust-lang/rust/issues/50504#issuecomment-399764767).
2018-07-11 12:38:33 -06:00
ljedrz
84dadb6139 Pacify tidy 2018-07-10 21:58:16 +02:00
ljedrz
e28e4877a8 Deny bare trait objects in in src/libsyntax 2018-07-10 21:06:26 +02:00
bors
ce45cbb053 Auto merge of #52191 - SimonSapin:alloc_error_handler, r=alexcrichton
Implement #[alloc_error_handler]

This to-be-stable attribute is equivalent to `#[lang = "oom"]`. It is required when using the `alloc` crate without the `std` crate. It is called by `handle_alloc_error`, which is in turned called by "infallible" allocations APIs such as `Vec::push`.
2018-07-10 15:20:17 +00:00
bors
fc491526dd Auto merge of #52168 - nikomatsakis:nll-region-name, r=estebank
find and highlight the `&` or `'_` in `region_name`

Before:

```
   --> $DIR/dyn-trait-underscore.rs:18:5
    |
 LL | fn a<T>(items: &[T]) -> Box<dyn Iterator<Item=&T>> {
-   |         ----- lifetime `'1` appears in this argument
 LL |     Box::new(items.iter()) //~ ERROR cannot infer an appropriate lifetime
    |     ^^^^^^^^^^^^^^^^^^^^^^ cast requires that `'1` must outlive `'static`
```

After:

```
   --> $DIR/dyn-trait-underscore.rs:18:5
    |
 LL | fn a<T>(items: &[T]) -> Box<dyn Iterator<Item=&T>> {
+   |                - let's call the lifetime of this reference `'1`
 LL |     Box::new(items.iter()) //~ ERROR cannot infer an appropriate lifetime
    |     ^^^^^^^^^^^^^^^^^^^^^^ cast requires that `'1` must outlive `'static`
```

Not intended as the final end point necessarily in any sense. I intentionally left some to-do points to fill in later:

- Does not apply to upvars in closures yet (should be relatively easy)
- Does not handle the case where we can't find a precise match very well
- And of course we can still tweak wording

but shows the basic idea of how to make the `Ty` and `hir::Ty` to find a good spot to highlight.

r? @estebank
cc @davidtwco
2018-07-10 11:19:31 +00:00
Simon Sapin
239ec7d2dc Implement #[alloc_error_handler]
This to-be-stable attribute is equivalent to `#[lang = "oom"]`.
It is required when using the alloc crate without the std crate.
It is called by `handle_alloc_error`, which is in turned called
by "infallible" allocations APIs such as `Vec::push`.
2018-07-09 23:13:24 +02:00
Niko Matsakis
a6adb1ebff find and highlight the & or '_ in region_name 2018-07-09 00:20:36 -04:00
Vadim Petrochenkov
94ef9f57f5 hygiene: Decouple transparencies from expansion IDs 2018-07-08 16:17:37 +03:00
bors
0c0315cfd9 Auto merge of #51955 - zackmdavis:item_semi, r=oli-obk
clarify why we're suggesting removing semicolon after braced items

Previously (issue #46186, pull-request #46258), a suggestion was added
to remove the semicolon after we fail to parse an item, but issue #51603
complains that it's still insufficiently obvious why. Let's add a note.

Resolves #51603.
2018-07-08 02:51:54 +00:00
bors
3ea16c3493 Auto merge of #52018 - flip1995:rfc2103, r=oli-obk
Implementation of tool lints.

Tracking issue: #44690
2018-07-06 18:03:46 +00:00
Alex Crichton
23fbfb57cf rustc: Update tracking issue for wasm_import_module
It's now https://github.com/rust-lang/rust/issues/52090
2018-07-05 21:27:27 -07:00
flip1995
c3949009ad
Improving span of unknown lint tool error message 2018-07-04 14:28:44 +02:00
flip1995
dddb8d2eba
Implementation of tool lints 2018-07-04 12:16:46 +02:00
Pietro Albini
bd0fe736be
Rollup merge of #51958 - euclio:attr-refactor, r=petrochenkov
Show known meta items in unknown meta items error

This PR adds a label to E0541. It also factors built-in attribute parsing into a submodule of `attr` for ease of future refactoring.

Fixes #51469.
2018-07-03 11:31:01 +02:00
bors
45935640f0 Auto merge of #51866 - zackmdavis:hir_making_each_day_of_the_year, r=petrochenkov
add modifier keyword spans to hir::Visibility; improve unreachable-pub, private-no-mangle lint suggestions

#50455 pointed out that the unreachable-pub suggestion for brace-grouped `use`s was bogus; #50476 partially ameliorated this by marking the suggestion as `Applicability::MaybeIncorrect`, but this is the actual fix.

Meanwhile, another application of having spans available in `hir::Visibility` is found in the private-no-mangle lints, where we can now issue a suggestion to use `pub` if the item has a more restricted visibility marker (this seems much less likely to come up in practice than not having any visibility keyword at all, but thoroughness is a virtue). While we're there, we can also add a helpful note if the item does have a `pub` (but triggered the lint presumably because enclosing modules were private).

![hir_vis](https://user-images.githubusercontent.com/1076988/42018064-ca830290-7a65-11e8-9c4c-48bc846f861f.png)

r? @nrc
cc @Manishearth
2018-07-02 03:18:49 +00:00
bors
ef9a322843 Auto merge of #51883 - estebank:placement-suggestion, r=varkor
Suggest correct comparison against negative literal

When parsing as emplacement syntax (`x<-1`), suggest the correct syntax
for comparison against a negative value (`x< -1`).

Fix #45651.
2018-07-01 13:37:05 +00:00
Zack M. Davis
9df9c9df7b choose a less arbitrary span when parsing the empty visibility modifier
Visibility spans were added to the AST in #47799 (d6bdf296) as a
`Spanned<_>`—which means that we need to choose a span even in the case
of inherited visibility (what you get when there's no `pub` &c. keyword
at all). That initial implementation's choice is pretty
counterintuitive, which could matter if we want to use it as a site to
suggest inserting a visibility modifier, &c.

(The phrase "Schelling span" in the comment is meant in analogy to the
game-theoretic concept of a "Schelling point", a value that is chosen
simply because it's what one can expect to agree upon with other agents
in the absence of explicit coördination.)
2018-06-30 22:20:28 -07:00
Andy Russell
5468e12ca0
add label to unknown meta item error 2018-06-30 21:38:18 -04:00
Andy Russell
011eaed59d
factor built-in attribute parsing into submodule 2018-06-30 20:44:20 -04:00
Zack M. Davis
db2f3d7a88 clarify why we're suggesting removing semicolon after braced items
Previously (issue #46186, pull-request #46258), a suggestion was added
to remove the semicolon after we fail to parse an item, but issue #51603
complains that it's still insufficiently obvious why. Let's add a note.

Resolves #51603.
2018-06-30 14:11:44 -07:00
bors
bfc1ee4968 Auto merge of #51762 - petrochenkov:oh-hi-mark, r=oli-obk
hygiene: Implement transparent marks and use them for call-site hygiene in proc-macros

Fixes https://github.com/rust-lang/rust/issues/50050
2018-06-30 09:19:21 +00:00
bors
acf50b79be Auto merge of #51806 - oli-obk:lowering_cleanups1, r=cramertj
Lowering cleanups [1/N]
2018-06-30 07:10:18 +00:00
Vadim Petrochenkov
9f92fce77c Fortify dummy span checking 2018-06-30 01:53:32 +03:00
Vadim Petrochenkov
99ecdb3f5f hygiene: Implement transparent marks 2018-06-30 01:53:32 +03:00
Vadim Petrochenkov
09856c85b7 expansion: Give names to some fields of SyntaxExtension 2018-06-30 01:53:32 +03:00
Esteban Küber
23d59d00be Suggest correct comparison against negative literal
When parsing as emplacement syntax (`x<-1`), suggest the correct syntax
for comparison against a negative value (`x< -1`).
2018-06-28 14:58:54 -07:00
bors
9f79d2f86a Auto merge of #50997 - michaelwoerister:pre-analyze-filemaps, r=Mark-Simulacrum
Make FileMap::{lines, multibyte_chars, non_narrow_chars} non-mutable.

This PR removes most of the interior mutability from `FileMap`, which should be beneficial, especially in a multithreaded setting. This is achieved by initializing the state in question when the filemap is constructed instead of during lexing. Hopefully this doesn't degrade performance.

cc @wesleywiser
2018-06-28 11:20:41 +00:00
Michael Woerister
a1f8a6ce80 Fix FileMap::line_begin_pos().
The method relied on the FileMap still being under construction in
order for it to do what the name promises. It's now independent of
the current state.
2018-06-28 10:46:04 +02:00
Vadim Petrochenkov
c6ca1e4abd Use Idents in a number of structures in HIR
Namely: labels, type parameters, bindings in patterns, parameter names in functions without body.
All of these do not need hygiene after lowering to HIR, only span locations.
2018-06-28 11:04:50 +03:00
kennytm
770d0fba63
Rollup merge of #51799 - mark-i-m:lower_case_feature_gate, r=mark-i-m
Lower case some feature gate error messages
2018-06-28 06:15:40 +08:00
Michael Woerister
ba30c1dac9 syntax_pos: Store multibyte char size as u8 instead of u32. 2018-06-27 14:00:34 +02:00
Michael Woerister
3497138634 Use u32 instead of usize of encoding byte count of multi-byte chars. 2018-06-27 14:00:34 +02:00
Michael Woerister
04d4da1bf9 Update CodeMap tests after changing FileMap construction. 2018-06-27 14:00:34 +02:00
Michael Woerister
095a339bec Remove the now redundant CodeMap::new_filemap_with_lines() method. 2018-06-27 14:00:34 +02:00
Michael Woerister
257d279fe4 Make FileMap::{lines, multibyte_chars, non_narrow_chars} non-mutable. 2018-06-27 14:00:34 +02:00
Vadim Petrochenkov
d347270e0c Implement #[macro_export(local_inner_macros)] 2018-06-27 13:10:16 +03:00
Oliver Schneider
5bd9eaa1ad Add a convenience method for getting the impl Trait NodeId of an IsAysnc 2018-06-27 11:25:22 +02:00
Oliver Schneider
9eb75613f0 Generate DefIds for the impl trait of async functions 2018-06-27 11:17:55 +02:00
Oliver Schneider
b2e2c32105 Generate the NodeId for existential type in the AST 2018-06-27 11:17:25 +02:00
mark
9f6bdb9409 lower case some feature gate messages 2018-06-26 19:06:01 -05:00
Zack M. Davis
3fb76f4027 inclusive range syntax lint (.....=)
Our implementation ends up changing the `PatKind::Range` variant in the
AST to take a `Spanned<RangeEnd>` instead of just a `RangeEnd`, because
the alternative would be to try to infer the span of the range operator
from the spans of the start and end subexpressions, which is both
hideous and nontrivial to get right (whereas getting the change to the
AST right was a simple game of type tennis).

This is concerning #51043.
2018-06-26 07:54:49 -07:00
Zack M. Davis
057715557b migrate codebase to ..= inclusive range patterns
These were stabilized in March 2018's #47813, and are the Preferred Way
to Do It going forward (q.v. #51043).
2018-06-26 07:53:30 -07:00
bors
309fd8a6fb Auto merge of #49469 - Nokel81:allow-irrefutable-let-patterns, r=nikomatsakis
Implementation of RFC 2086 - Allow Irrefutable Let patterns

This is the set of changes for RFC2086. Tracking issue #44495. Rendered [here](https://github.com/rust-lang/rfcs/pull/2086)
2018-06-26 09:20:33 +00:00
Zack M. Davis
a417518173 structured suggestion and rewording for ... expression syntax error
Now that `..=` inclusive ranges are stabilized, people probably
shouldn't be using `...` even in patterns, even if it's still legal
there (see #51043). To avoid drawing attention to `...` being a real
thing, let's reword this message to just say "unexpected token" rather
"cannot be used in expressions".
2018-06-23 22:57:37 -07:00
Vadim Petrochenkov
20ce91076a hygiene: Merge NameAndSpan into ExpnInfo 2018-06-23 21:53:24 +03:00
Vadim Petrochenkov
c00f5af4d6 hygiene: Do not reset expansion info for quote! 2018-06-23 20:40:25 +03:00