Commit graph

96188 commits

Author SHA1 Message Date
Vadim Petrochenkov
d1949b1ab0 expand: Do not overwrite existing ExpnInfo when injecting derive markers
Create a fresh expansion for them instead - this is the usual way to allow unstable features for generated/desugared code.
Fixes https://github.com/rust-lang/rust/issues/52363
2019-07-11 00:12:08 +03:00
Vadim Petrochenkov
0ec6ea7333 resolve: Fix access to extern and stdlib prelude from opaque macros
Ok, it's hard to explain what happens, but identifier's hygienic contexts need to be "adjusted" to modules/scopes before they are resolved in them.
To be resolved in all kinds on preludes the identifier needs to be adjusted to the root expansion (aka "no expansion").

Previously this was done for the `macro m() { ::my_crate::foo }` case, but forgotten for all other cases.
2019-07-11 00:12:08 +03:00
Vadim Petrochenkov
f923942094 resolve: Divide macro path resolution into speculative and error reporting parts
Also move macro stability checking closer to other checks performed on obtained resolutions.
Tighten the stability spans as well, it is an error to *refer* to and unstable entity in any way, not only "call" it.
2019-07-11 00:12:08 +03:00
Vadim Petrochenkov
8bc187d104 resolve: Include stdlib prelude into name lookup in macro namespace
This is going to be used when built-in macros are defined through libcore and made available to other crates through standard library prelude
2019-07-11 00:12:08 +03:00
Vadim Petrochenkov
3041ec6118 resolve/expand: Catch macro kind mismatches early in resolve
This way we are processing all of them in a single point, rather than separately for each syntax extension kind.
Also, the standard expected/found wording is used.
2019-07-11 00:12:08 +03:00
Vadim Petrochenkov
f16993d4ac resolve/expand: resolve_macro_invocation no longer returns determinate errors
It either returns the indeterminacy error, or valid (but perhaps dummy) `SyntaxExtension`.

With this change enum `Determinacy` is no longer used in libsyntax and can be moved to resolve.

The regressions in diagnosics are fixed in the next commits.
2019-07-11 00:12:08 +03:00
Vadim Petrochenkov
cd0fd630e8 resolve: Make proc macro stubs less stubby
Create real working and registered (even if dummy) `SyntaxExtension`s for them.
This improves error recovery and allows to avoid all special cases for proc macro stubs (except for the error on use, of course).

The introduced dummy `SyntaxExtension`s can be used for any other inappropriately resolved macros as well.
2019-07-11 00:12:08 +03:00
Vadim Petrochenkov
b392781edc def_collector: parent_def is no longer optional 2019-07-11 00:12:08 +03:00
Vadim Petrochenkov
e272946066 def_collector: Simplify tracking of macro invocation parents
Avoid the tricky scheme with callbacks and keep the invocation parent data where it logically belongs - in `Definitions`.

This also allows to create `InvocationData` entries in resolve when the data is actually ready, and remove cells and "uninitialized" variants from it.
2019-07-11 00:12:08 +03:00
Vadim Petrochenkov
aff9738462 hygiene: Reuse MacroKind in ExpnKind
Orthogonality and reuse are good.
2019-07-11 00:12:08 +03:00
Vadim Petrochenkov
4dcf9b15c4 hygiene: Remove some unused impls 2019-07-11 00:12:08 +03:00
Vadim Petrochenkov
3eafaae510 syntax: Make def-site span mandatory in ExpnInfo/MacroBacktrace/DiagnosticSpanMacroExpansion
We have to deal with dummy spans anyway

Remove def-site span from expander interfaces.
It's not used by the expansion infra, only by specific expanders, which can keep it themselves if they want it.
2019-07-11 00:12:07 +03:00
Vadim Petrochenkov
a138e9d625 expand: Get rid of resolve_macro_path
It was used to choose whether to apply derive markers like `#[rustc_copy_clone_marker]` or not,
but it was called before all the data required for resolution is available, so it could work incorrectly in some corner cases (like user-defined derives name `Copy` or `Eq`).
Delay the decision about markers until the proper resolution results are available instead.
2019-07-11 00:12:07 +03:00
Vadim Petrochenkov
62a1f5dbc0 hygiene: Remove some dead code 2019-07-11 00:12:07 +03:00
Vadim Petrochenkov
f1d4ebf015 Remove unnecessary expansions created by #[test_case/test/bench]
The expansions were created to allow unstable things inside `#[test_case/test/bench]`, but that's not a proper way to do that.
Put the required `allow_internal_unstable`s into the macros' properties instead.
2019-07-11 00:12:07 +03:00
Vadim Petrochenkov
16918a8e28 Rename some things in syntax_pos/hygiene
More consistent with other naming:
ExpnFormat -> ExpnKind
ExpnKind::name -> ExpnKind::descr
DesugaringKind::name -> DesugaringKind::descr

Shorter, no tautology:
CompilerDesugaring -> Desugaring
CompilerDesugaringKind -> DesugaringKind
2019-07-11 00:12:07 +03:00
Vadim Petrochenkov
ec376c783e Move MacroKind into libsyntax_pos
So it can be eventually used in `ExpnInfo`
2019-07-11 00:12:07 +03:00
Vadim Petrochenkov
48635226d8 Remove MacroKind::ProcMacroStub
It's internal to resolve and always results in `Res::Err` outside of resolve.
Instead put `DefKind::Fn`s themselves into the macro namespace, it's ok.

Proc macro stubs are items placed into macro namespase for functions that define proc macros.
https://github.com/rust-lang/rust/pull/52383

The rustdoc test is changed because the old test didn't actually reproduce the ICE it was supposed to reproduce.
2019-07-11 00:12:07 +03:00
bors
cd2cd4c962 Auto merge of #62564 - Mark-Simulacrum:azure-line-endings, r=pietroalbini
Ensure that checkout is with \n line endings

During installation of mingw, at least, the git directories change, so
we need to reset the core.autocrlf config to false.

Once we finish checking out submodules, check that the line endings are
\n and not \r\n.

Artifacts were built via the last try on #62545; I've manually confirmed that `install.sh` appears to no longer have `\r\n` line endings.

Fixes #62276.
2019-07-10 19:36:42 +00:00
John Kåre Alsaker
498bdc9b42 Add an AtomicCell abstraction 2019-07-10 17:04:42 +02:00
Felix S. Klock II
fa0809d3cd Regression test for issue 30786. 2019-07-10 16:43:19 +02:00
Pietro Albini
2d2dcb0dc7
ci: add a pr builder to test tools when submodules are updated
The builder will skip time consuming tasks (like the actual tests) when
it detects no updated submodules.
2019-07-10 16:14:25 +02:00
Mazdak Farrokhzad
3c299a987c
Rollup merge of #62532 - Mark-Simulacrum:syntax-print-cleanup, r=petrochenkov
Some more cleanups to syntax::print

All of these changes should be functionally equivalent to previous code.

Each commit mostly stands alone and this PR is easiest to review by-commit.
2019-07-10 16:08:26 +02:00
Mazdak Farrokhzad
d0cec040de
Rollup merge of #62493 - Freyskeyd:valid_example_read-write_unaligned, r=rkruppe
#62357: doc(ptr): add example for {read,write}_unaligned

related to #62357

> With #62323 the only example (that had UB and was thus invalid) in std::ptr::read_unaligned and std::ptr::write_unaligned is removed.

> We should add a valid example of using the aforementioned functions.

Signed-off-by: Freyskeyd <simon.paitrault@gmail.com>
2019-07-10 16:08:24 +02:00
Mazdak Farrokhzad
ad21558b85
Rollup merge of #62481 - czipperz:iterator-last-nth-use-for_each, r=scottmcm
Use `fold` in `Iterator::last` default implementation

We already use it in all the other methods.  Consistency + potential perf is a pretty nice win!
2019-07-10 16:08:23 +02:00
Mazdak Farrokhzad
5760bc6e98
Rollup merge of #62465 - matthewjasper:never-type-storage, r=pnkfelix
Sometimes generate storage statements for temporaries with type `!`

Closes #62165
cc #42371
2019-07-10 16:08:21 +02:00
Mazdak Farrokhzad
a2cbae8ad3
Rollup merge of #62275 - eddyb:const-drop-replace, r=pnkfelix
rustc_mir: treat DropAndReplace as Drop + Assign in qualify_consts.

This slipped through the cracks and never got implemented (thankfully that just meant it was overly conservative and didn't allow assignments that don't *actually* drop the previous value).
Fixes #62273.

r? @oli-obk
2019-07-10 16:08:19 +02:00
Aleksa Sarai
6031a07a46
filedesc: don't use ioctl(FIOCLEX) on Linux
All ioctl(2)s will fail on O_PATH file descriptors on Linux (because
they use &empty_fops as a security measure against O_PATH descriptors
affecting the backing file).

As a result, File::try_clone() and various other methods would always
fail with -EBADF on O_PATH file descriptors. The solution is to simply
use F_SETFD (as is used on other unices) which works on O_PATH
descriptors because it operates through the fnctl(2) layer and not
through ioctl(2)s.

Since this code is usually only used in strange error paths (a broken or
ancient kernel), the extra overhead of one syscall shouldn't cause any
dramas. Most other systems programming languages also use the fnctl(2)
so this brings us in line with them.

Fixes: rust-lang/rust#62314
Signed-off-by: Aleksa Sarai <cyphar@cyphar.com>
2019-07-10 23:59:46 +10:00
Mark Rousskov
df725c28d6 Ensure that checkout is with \n line endings
During installation of mingw, at least, the git directories change, so
we need to reset the core.autocrlf config to false.

Once we finish checking out submodules, check that the line endings are
\n and not \r\n.
2019-07-10 09:56:47 -04:00
Andrew Xu
128143c4e5
Ignore async-fn-size-moved-locals test on wasm
The sizes for wasm are different.

Co-Authored-By: Tyler Mandry <tmandry@gmail.com>
2019-07-10 21:18:51 +08:00
bors
c6a9e766f9 Auto merge of #62339 - pnkfelix:issue-61188-use-visitor-for-structural-match-check, r=nikomatsakis
use visitor for #[structural_match] check

This changes the code so that we recur down the structure of a type of a const (rather than just inspecting at a shallow one or two levels) when we are looking to see if it has an ADT that did not derive `PartialEq` and `Eq`.

Fix #61188

Fix #62307

Cc #62336
2019-07-10 12:26:44 +00:00
Mark Rousskov
56a9237b59 File is now short enough for tidy 2019-07-10 07:13:59 -04:00
Mark Rousskov
096cb4137d Remove writer function from PrintState 2019-07-10 07:13:57 -04:00
Mark Rousskov
73c1752b8e Use constant instead of magic number 2019-07-10 07:13:22 -04:00
Mark Rousskov
63fdf1a527 Remove needless indent arguments
We're always indenting by INDENT_UNIT anyway
2019-07-10 07:13:22 -04:00
Mark Rousskov
daf1b29f29 Properly case indent_unit constant 2019-07-10 07:13:22 -04:00
Mark Rousskov
cab453250a Move pp::Printer helpers to direct impl 2019-07-10 07:13:20 -04:00
Mark Rousskov
e91dbc5916 Rename is_bol -> is_beginning_of_line
Also moves it to pp::Printer from PrintState.
2019-07-10 07:12:29 -04:00
Mark Rousskov
39aa9bf730 Remove needless indirection in bclose 2019-07-10 07:12:29 -04:00
Mark Rousskov
04b80a5f5d Drop length from Token::String
It was always set to the string's length
2019-07-10 07:12:29 -04:00
Mark Rousskov
5879146392 Rename pretty_print_* to scan_* to follow naming in the paper
This is also easier to understand because the scan and print "tasks" are
separate, but previously were both called "print" or "pretty print."
2019-07-10 07:12:29 -04:00
Mark Rousskov
4783d9eaa5 Remove is_begin/is_end functions from PrintState
These are somewhat ambiguous (beginning/end of what?) so it's better to
inline their one use into the code.
2019-07-10 07:12:29 -04:00
Mark Rousskov
57cf7a2e57 Simplify print_end
Presumably the code was from an older age of Rust and can now be written
much simpler.
2019-07-10 07:12:29 -04:00
Mark Rousskov
55a6a761b9 Simplify check_stack implementation 2019-07-10 07:12:29 -04:00
Mark Rousskov
cd2d8326a5 Move BufEntry assignment into scan_push 2019-07-10 07:12:28 -04:00
Mark Rousskov
ccf279d9c3 Remove useless call to indent 2019-07-10 07:12:28 -04:00
Mark Rousskov
4c58fc32ae Fully privatize (vs. crate visibility) functions 2019-07-10 07:12:28 -04:00
Mark Rousskov
00ca508608 Move pp::Printer out field to owned String
This enforces that eof() must be called to get the String out, and
generally is better from an API perspective. No users of pretty printing
pre-allocate the buffer.
2019-07-10 07:12:28 -04:00
Mark Rousskov
e0ffa7c3d2 Inline State::new_from_input in pprust
This function took too many arguments and are simple on the inside;
inlining them makes complexity go down.

hir::print's copy is unfortunately used from librustc_driver so inlining
it is not as straightforward.
2019-07-10 07:12:28 -04:00
Mark Rousskov
e0db2e606c print_crate returns String instead of taking an out pointer 2019-07-10 07:12:28 -04:00