Commit Graph

98054 Commits

Author SHA1 Message Date
Matthew Jasper
0b86782058 Don't call diag_span_note_once for suppressed lints 2019-09-05 15:07:16 +01:00
Matthew Jasper
846df20578 Fix 2018 edition expanded pretty printing 2019-09-05 15:07:16 +01:00
Matthew Jasper
beb2f5b8ff Remove Ident::{gensym, is_gensymed}
`gensym_if_underscore` still exists. The symbol interner can still
create arbitray gensyms, this is just not exposed publicly.
2019-09-05 15:07:16 +01:00
Matthew Jasper
2a82aec36a Move tests for unit tests to their own directory 2019-09-05 15:07:16 +01:00
Matthew Jasper
6fcdb36ccb Make use of hygiene in AST passes 2019-09-05 15:07:16 +01:00
Matthew Jasper
4082cd95a8 Allow ast passes to create hygienic spans 2019-09-05 15:07:16 +01:00
Matthew Jasper
0133941f47 Add an ExpnKind for AST passes 2019-09-05 15:07:16 +01:00
bors
5ade61a4f1 Auto merge of #63823 - petrochenkov:noapply2, r=matthewjasper
Audit uses of `apply_mark` in built-in macros + Remove default macro transparencies

Every use of `apply_mark` in a built-in or procedural macro is supposed to look like this
```rust
location.with_ctxt(SyntaxContext::root().apply_mark(ecx.current_expansion.id))
```
where `SyntaxContext::root()` means that the built-in/procedural macro is defined directly, rather than expanded from some other macro.

However, few people understood what `apply_mark` does, so we had a lot of copy-pasted uses of it looking e.g. like
```rust
span = span.apply_mark(ecx.current_expansion.id);
```
, which doesn't really make sense for procedural macros, but at the same time is not too harmful, if the macros use the traditional `macro_rules` hygiene.

So, to fight this, we stop using `apply_mark` directly in built-in macro implementations, and follow the example of regular proc macros instead and use analogues of `Span::def_site()` and `Span::call_site()`, which are much more intuitive and less error-prone.
- `ecx.with_def_site_ctxt(span)` takes the `span`'s location and combines it with a def-site context.
- `ecx.with_call_site_ctxt(span)` takes the `span`'s location and combines it with a call-site context.

Even if called multiple times (which sometimes happens due to some historical messiness of the built-in macro code) these functions will produce the same result, unlike `apply_mark` which will grow  the mark chain further in this case.

---

After `apply_mark`s in built-in macros are eliminated, the remaining `apply_mark`s are very few in number, so we can start passing the previously implicit `Transparency` argument to them explicitly, thus eliminating the need in `default_transparency` fields in hygiene structures and `#[rustc_macro_transparency]` annotations on built-in macros.

So, the task of making built-in macros opaque can now be formulated as "eliminate `with_legacy_ctxt` in favor of `with_def_site_ctxt`" rather than "replace `#[rustc_macro_transparency = "semitransparent"]` with `#[rustc_macro_transparency = "opaque"]`".

r? @matthewjasper
2019-08-24 14:07:06 +00:00
bors
478464570e Auto merge of #63637 - alexcrichton:remove-libtest-step, r=Mark-Simulacrum
bootstrap: Merge the libtest build step with libstd

Since its inception rustbuild has always worked in three stages: one for
libstd, one for libtest, and one for rustc. These three stages were
architected around crates.io dependencies, where rustc wants to depend
on crates.io crates but said crates don't explicitly depend on libstd,
requiring a sysroot assembly step in the middle. This same logic was
applied for libtest where libtest wants to depend on crates.io crates
(`getopts`) but `getopts` didn't say that it depended on std, so it
needed `std` built ahead of time.

Lots of time has passed since the inception of rustbuild, however,
and we've since gotten to the point where even `std` itself is depending
on crates.io crates (albeit with some wonky configuration). This
commit applies the same logic to the two dependencies that the `test`
crate pulls in from crates.io, `getopts` and `unicode-width`. Over the
many years since rustbuild's inception `unicode-width` was the only
dependency picked up by the `test` crate, so the extra configuration
necessary to get crates building in this crate graph is unlikely to be
too much of a burden on developers.

After this patch it means that there are now only two build phasese of
rustbuild, one for libstd and one for rustc. The libtest/libproc_macro
build phase is all lumped into one now with `std`.

This was originally motivated by rust-lang/cargo#7216 where Cargo was
having to deal with synthesizing dependency edges but this commit makes
them explicit in this repository.
2019-08-24 05:39:52 +00:00
bors
c2f3174a27 Auto merge of #63824 - Centril:split-feature_gate, r=oli-obk
Refactor `feature_gate.rs` into modules & cleanup

Split `src/libsyntax/feature_gate.rs` into `src/libsyntax/feature_gate/` with files:
- `accepted.rs` (accepted feature gates)
- `removed.rs` (...)
- `active.rs` (...)
- `builtin_attrs.rs` (definition of builtin attributes and their gates as well as gating `cfg` flags)
- `check.rs` (post expansion checking of feature gates)
- `mod.rs` (just reexports)

Additionally, `tidy.rs` is adjusted to respect the new scheme.

Also, `builtin_attrs.rs` sees some cleanup, organization, and DSL-ification to reduce repetition.

This is probably best read commit-by-commit I think.

r? @oli-obk
2019-08-24 01:50:03 +00:00
Alex Crichton
b47c9690d2 bootstrap: Merge the libtest build step with libstd
Since its inception rustbuild has always worked in three stages: one for
libstd, one for libtest, and one for rustc. These three stages were
architected around crates.io dependencies, where rustc wants to depend
on crates.io crates but said crates don't explicitly depend on libstd,
requiring a sysroot assembly step in the middle. This same logic was
applied for libtest where libtest wants to depend on crates.io crates
(`getopts`) but `getopts` didn't say that it depended on std, so it
needed `std` built ahead of time.

Lots of time has passed since the inception of rustbuild, however,
and we've since gotten to the point where even `std` itself is depending
on crates.io crates (albeit with some wonky configuration). This
commit applies the same logic to the two dependencies that the `test`
crate pulls in from crates.io, `getopts` and `unicode-width`. Over the
many years since rustbuild's inception `unicode-width` was the only
dependency picked up by the `test` crate, so the extra configuration
necessary to get crates building in this crate graph is unlikely to be
too much of a burden on developers.

After this patch it means that there are now only two build phasese of
rustbuild, one for libstd and one for rustc. The libtest/libproc_macro
build phase is all lumped into one now with `std`.

This was originally motivated by rust-lang/cargo#7216 where Cargo was
having to deal with synthesizing dependency edges but this commit makes
them explicit in this repository.
2019-08-23 16:46:11 -07:00
bors
4993524682 Auto merge of #63814 - malbarbo:wasi-error-kind, r=alexcrichton
Implement decode_error_kind for wasi

Based on the implementation for unix targets,
2019-08-23 22:09:07 +00:00
bors
9eae1fc0ea Auto merge of #63819 - najamelan:patch-1, r=Centril
rustc docs: Update single-use-lifetimes

When using this, rustc emits a warning that the lint has been renamed (to having an 's' at the end)
2019-08-23 16:22:06 +00:00
Marco A L Barbosa
c8838efe35 Implement decode_error_kind for wasi
Based on the implementation for unix targets
2019-08-23 10:48:38 -03:00
bors
3def0f3d5b Auto merge of #63815 - sebastinez:sebastinez-doc-#63792, r=jonas-schievink
Update occurences of as_slice to as_str in comments

Fix #63792
2019-08-23 12:40:32 +00:00
bors
f834695781 Auto merge of #63521 - newpavlov:redox_builder, r=pietroalbini
Re-enable Redox builder (take 2)

Closes: #63160
2019-08-23 08:58:24 +00:00
bors
0507d49755 Auto merge of #63808 - Rosto75:master, r=KodrAus
A bunch of minor documentation tweaks and fixes.
2019-08-23 05:11:41 +00:00
bors
a71e32e407 Auto merge of #63801 - jeremystucki:patch-1, r=jonas-schievink
Update .mailmap
2019-08-23 01:27:58 +00:00
Mazdak Farrokhzad
3e061f7c49 --bless some tests due to message format change. 2019-08-23 01:42:05 +02:00
Mazdak Farrokhzad
3cfb6bc73a Fix tidy fallout due to feature_gate.rs refactoring. 2019-08-23 01:41:54 +02:00
Mazdak Farrokhzad
6febb75ec8 syntax: move feature_gate.rs. 2019-08-23 01:41:54 +02:00
Mazdak Farrokhzad
87eafd6c1b syntax: extract check.rs. 2019-08-23 01:41:49 +02:00
Mazdak Farrokhzad
e5aa2dd1ff builtin_attrs.rs: retain FIXMEs. 2019-08-23 01:41:13 +02:00
Mazdak Farrokhzad
d286fe0b8d builtin_attrs.rs: organize! 2019-08-23 01:41:04 +02:00
Mazdak Farrokhzad
584388c4aa builtin_attrs.rs: cleanup with (un)gated!. 2019-08-23 01:40:52 +02:00
Mazdak Farrokhzad
0d19d1d775 builtin_attrs.rs: refactor rustc_attrs entries. 2019-08-23 01:40:37 +02:00
Mazdak Farrokhzad
1c979ad552 builtin_attrs.rs: simplify cfg_fn. 2019-08-23 01:39:59 +02:00
Mazdak Farrokhzad
332a77e621 syntax: extract builin_attrs.rs. 2019-08-23 01:39:54 +02:00
Mazdak Farrokhzad
7afb2a82ec syntax: extract active.rs feature gates. 2019-08-23 01:39:44 +02:00
Mazdak Farrokhzad
975455b37d syntax: extract removed.rs feature gates. 2019-08-23 01:39:38 +02:00
Mazdak Farrokhzad
b873743c02 syntax: extract accepted.rs feature gates. 2019-08-23 01:39:29 +02:00
Vadim Petrochenkov
6548a5fa5d Remove default macro transparencies
All transparancies are passed explicitly now.
Also remove `#[rustc_macro_transparency]` annotations from built-in macros, they are no longer used.
`#[rustc_macro_transparency]` only makes sense for declarative macros now.
2019-08-23 01:53:20 +03:00
Vadim Petrochenkov
cf9db76454 hygiene: Require passing transparency explicitly to apply_mark 2019-08-23 01:44:33 +03:00
Vadim Petrochenkov
b0c4d0f8cb incremental: Do not rely on default transparency when decoding syntax contexts
Using `ExpnId`s default transparency here instead of the mark's real transparency was actually incorrect.
2019-08-23 01:44:33 +03:00
Vadim Petrochenkov
bf345dd6e3 resolve: Do not rely on default transparency when detecting proc macro derives 2019-08-23 01:44:33 +03:00
Vadim Petrochenkov
0fb01d219c Audit uses of apply_mark in built-in macros
Replace them with equivalents of `Span::{def_site,call_site}` from proc macro API.
The new API is much less error prone and doesn't rely on macros having default transparency.
2019-08-23 01:44:33 +03:00
Naja Melan
98bd60c281
Update single-use-lifetimes
When using this, rustc emits a warning that the lint has been renamed (to having an 's' at the end)
2019-08-22 22:39:21 +00:00
bors
ee7161db98 Auto merge of #63522 - topecongiro:rustfmt-1.4.5, r=Centril
Update rustfmt to 1.4.5

This update includes a bug fix that fixes generating invalid code when formatting an impl block with const generics inside a where clause.

**Changes**
0462008de8...1de58ce46d
2019-08-22 21:51:14 +00:00
Sebastian Martinez
03507a1688
Update occurences of as_slice
Update occurences of as_slice to as_str
2019-08-22 16:16:22 -03:00
bors
760226733e Auto merge of #63807 - Centril:rollup-b8lo8ct, r=Centril
Rollup of 7 pull requests

Successful merges:

 - #63624 (When declaring a declarative macro in an item it's only accessible inside it)
 - #63737 (Fix naming misspelling)
 - #63767 (Use more optimal Ord implementation for integers)
 - #63782 (Fix confusion in theme picker functions)
 - #63788 (Add amanjeev to rustc-guide toolstate)
 - #63796 (Tweak E0308 on opaque types)
 - #63805 (Apply few Clippy suggestions)

Failed merges:

r? @ghost
2019-08-22 18:06:31 +00:00
Tomasz Różański
d9f3258186 Fix for 7e13679. 2019-08-22 19:27:16 +02:00
Jeremy Stucki
2f790ee5d2
Update .mailmap 2019-08-22 16:47:42 +02:00
Mazdak Farrokhzad
3068064430
Rollup merge of #63805 - mati865:clippy, r=Centril
Apply few Clippy suggestions

Somewhat follow-up of https://github.com/rust-lang/rust/pull/62806

Changes per commit are rather small so I can squash them if that's preferred.
2019-08-22 15:15:45 +02:00
Mazdak Farrokhzad
aa9490bd7b
Rollup merge of #63796 - estebank:opaque_future, r=Centril
Tweak E0308 on opaque types

```
error[E0308]: if and else have incompatible types
  --> file.rs:21:9
   |
18 | /     if true {
19 | |         thing_one()
   | |         ----------- expected because of this
20 | |     } else {
21 | |         thing_two()
   | |         ^^^^^^^^^^^ expected opaque type, found a different opaque type
22 | |     }.await
   | |_____- if and else have incompatible types
   |
   = note: expected type `impl std::future::Future` (opaque type)
              found type `impl std::future::Future` (opaque type)
   = note: distinct uses of `impl Trait` result in different opaque types
   = help: if both futures resolve to the same type, consider `await`ing on both of them
```

r? @Centril
CC #63167
2019-08-22 15:15:43 +02:00
Mazdak Farrokhzad
6c1cdb75ab
Rollup merge of #63788 - mark-i-m:rustc-guide-toolstate-add, r=ehuss
Add amanjeev to rustc-guide toolstate

cc @amanjeev @spastorino

r? @ehuss
2019-08-22 15:15:42 +02:00
Mazdak Farrokhzad
1f56441a00
Rollup merge of #63782 - GuillaumeGomez:theme-switch-fix, r=kinnison
Fix confusion in theme picker functions

To reproduce the bug currently: click on the theme picker button twice (to show it then hide it). Then click anywhere else: the dropdown menu appears again.

The problem was coming from a confusion of what the `hideThemeButtonState` and `showThemeButtonState` were supposed to do. I switched their codes and updated the `switchThemeButtonState` function. It now works as expected.

r? @kinnison
2019-08-22 15:15:40 +02:00
Mazdak Farrokhzad
30fd79cb6c
Rollup merge of #63767 - lzutao:integer-ord-suboptimal, r=nagisa
Use more optimal Ord implementation for integers

Closes #63758
r? @nagisa

### Compare results

([godbolt link](https://godbolt.org/z/dsbczy))

Old assembly:
```asm
example::cmp1:
  mov eax, dword ptr [rdi]
  mov ecx, dword ptr [rsi]
  cmp eax, ecx
  setae dl
  add dl, dl
  add dl, -1
  xor esi, esi
  cmp eax, ecx
  movzx eax, dl
  cmove eax, esi
  ret
```

New assembly:
```asm
example::cmp2:
  mov eax, dword ptr [rdi]
  xor ecx, ecx
  cmp eax, dword ptr [rsi]
  seta cl
  mov eax, 255
  cmovae eax, ecx
  ret
```

Old llvm-mca statistics:
```
Iterations:        100
Instructions:      1100
Total Cycles:      243
Total uOps:        1300

Dispatch Width:    6
uOps Per Cycle:    5.35
IPC:               4.53
Block RThroughput: 2.2
```

New llvm-mca statistics:
```
Iterations:        100
Instructions:      700
Total Cycles:      217
Total uOps:        1100

Dispatch Width:    6
uOps Per Cycle:    5.07
IPC:               3.23
Block RThroughput: 1.8
```
2019-08-22 15:15:38 +02:00
Mazdak Farrokhzad
0784395912
Rollup merge of #63737 - HowJMay:fix_naming, r=jonas-schievink
Fix naming misspelling

Fixes #63734
2019-08-22 15:15:36 +02:00
Mazdak Farrokhzad
8a26ba77ef
Rollup merge of #63624 - estebank:unreachable-macro, r=petrochenkov
When declaring a declarative macro in an item it's only accessible inside it

Fix #63164.
r? @petrochenkov
2019-08-22 15:15:35 +02:00
Tomasz Różański
eae5d77995 Change variables names to be more consistent.
Changed all instances of `c_str` into `cstr` in the documentation examples. This is also consistent with the module source code.
2019-08-22 15:09:03 +02:00