Commit Graph

109213 Commits

Author SHA1 Message Date
Oliver Scherer
770be24ccd Use DefIds to identify anon consts when converting from HIR to ty::Const 2020-03-23 13:15:02 +01:00
Oliver Scherer
3f89c38bc0 Inline const_param_def_id at its only use site 2020-03-23 13:14:39 +01:00
Oliver Scherer
fa5a15c7d5 Document most methods on ty::Const 2020-03-23 13:14:38 +01:00
Oliver Scherer
799b15ed96 Evaluate repeat expression lengths as late as possible 2020-03-23 13:14:36 +01:00
Guillaume Gomez
19e6935956 Clean up E0452 explanation 2020-03-23 12:40:14 +01:00
Ryan Levick
821eef5a48 Make sure issue 53275 test goes through codegen 2020-03-23 11:11:54 +01:00
Ralf Jung
e619b85776 make sure we are checking the size of the right thing 2020-03-23 11:03:39 +01:00
Ralf Jung
410385dfd0 add macro to reduce boilerplate and keep readable messages 2020-03-23 11:02:18 +01:00
Bastian Kauschke
6a7106cb32 type_of AnonConst AssocTy does not require parent 2020-03-23 10:58:07 +01:00
bors
5aa8f199c3 Auto merge of #70305 - Centril:rollup-zi13fz4, r=Centril
Rollup of 8 pull requests

Successful merges:

 - #69080 (rustc_codegen_llvm: don't generate any type debuginfo for -Cdebuginfo=1.)
 - #69940 (librustc_codegen_llvm: Replace deprecated API usage)
 - #69942 (Increase verbosity when suggesting subtle code changes)
 - #69968 (rustc: keep upvars tupled in {Closure,Generator}Substs.)
 - #70123 (Ensure LLVM is in the link path for rustc tools)
 - #70159 (Update the bundled wasi-libc with libstd)
 - #70233 (resolve: Do not resolve visibilities on proc macro definitions twice)
 - #70286 (Miri error type: remove UbExperimental variant)

Failed merges:

r? @ghost
2020-03-23 09:30:00 +00:00
Mazdak Farrokhzad
07e1043222
Rollup merge of #70286 - RalfJung:no-experiments, r=petrochenkov
Miri error type: remove UbExperimental variant

In https://github.com/rust-lang/miri/pull/1250, I will move Miri away from that variant, and use a custom `MachineStop` exception instead.
2020-03-23 10:29:18 +01:00
Mazdak Farrokhzad
bb85308ce7
Rollup merge of #70233 - petrochenkov:superproc, r=ecstatic-morse
resolve: Do not resolve visibilities on proc macro definitions twice

Fixes https://github.com/rust-lang/rust/issues/68921
2020-03-23 10:29:16 +01:00
Mazdak Farrokhzad
edbbb4908c
Rollup merge of #70159 - alexcrichton:update-wasi, r=pietroalbini
Update the bundled wasi-libc with libstd

Brings in WebAssembly/wasi-libc#184 which can help standalone programs
with environment variables!
2020-03-23 10:29:14 +01:00
Mazdak Farrokhzad
9423c4f0dd
Rollup merge of #70123 - cuviper:library-path, r=Mark-Simulacrum
Ensure LLVM is in the link path for rustc tools

The build script for `rustc_llvm` outputs LLVM information in `cargo:rustc-link-lib` and `cargo:rustc-link-search` so the compiler can be linked correctly. However, while the lib is carried along in metadata, the search paths are not. So when cargo is invoked again later for rustc _tools_, they'll also try to link with LLVM, but the necessary paths may be left out.

Rustbuild can use the environment to set the LLVM link path for tools -- `LIB` for MSVC toolchains and `LIBRARY_PATH` for everyone else.

Fixes #68714.
2020-03-23 10:29:13 +01:00
Mazdak Farrokhzad
bee074f032
Rollup merge of #69968 - eddyb:tupled-closure-captures, r=nikomatsakis
rustc: keep upvars tupled in {Closure,Generator}Substs.

Previously, each closure/generator capture's (aka "upvar") type was tracked as one "synthetic" type parameter in the closure/generator substs, and figuring out where the parent `fn`'s generics end and the synthetics start involved slicing at `tcx.generics_of(def_id).parent_count`.

Needing to query `generics_of` limited @davidtwco (who wants to compute some `TypeFlags` differently for parent generics vs upvars, and `TyCtxt` is not available there), which is how I got started on this, but it's also possible that the `generics_of` queries are slowing down `{Closure,Generator}Substs` methods.

To give an example, for a `foo::<T, U>::{closure#0}` with captures `x: X` and `y: Y`, substs are:
* before this PR: `[T, U, /*kind*/, /*signature*/, X, Y]`
* after this PR: `[T, U, /*kind*/, /*signature*/, (X, Y)]`

You can see that, with this PR, no matter how many captures, the last 3 entries in the substs (or 5 for a generator) are always the "synthetic" ones, with the last one being the tuple of capture types.

r? @nikomatsakis cc @Zoxc
2020-03-23 10:29:11 +01:00
Mazdak Farrokhzad
906b399583
Rollup merge of #69942 - estebank:sized-verbose-sugg, r=matthewjasper
Increase verbosity when suggesting subtle code changes

Do not suggest changes that are actually quite small inline, to minimize the likelihood of confusion.

Fix #69243.
2020-03-23 10:29:09 +01:00
Mazdak Farrokhzad
61a56fbe00
Rollup merge of #69940 - tmiasko:llvm-api, r=hanna-kruppe
librustc_codegen_llvm: Replace deprecated API usage
2020-03-23 10:29:07 +01:00
Mazdak Farrokhzad
198024286a
Rollup merge of #69080 - eddyb:one-billion-dwarves-walk-into-a-bar, r=michaelwoerister
rustc_codegen_llvm: don't generate any type debuginfo for -Cdebuginfo=1.

Works towards #69074 by adding more checks for `DebugInfo::Full` in a few places in `rustc_codegen_llvm`, bringing us in line with what `clang -g1` generates (no debuginfo types, nor debuginfo for `static`s).

<hr/>

My local build's (`debuginfo-level=1`, `debug-assertions=1`) `librustc_driver-*.so` went from just over 1GiB (1019MiB) down to 402MiB.

It's still bad, but the `.debug_*` sections themselves (as reported by `objdump`) went from something like 853MiB down to 236MiB, i.e. roughly a 3.6x reduction.

<hr/>

Sadly, I don't think this is enough to justify *shipping* all of this debuginfo, but now it's more plausible that we could at least *build* with `debuginfo-level=1` *then* strip it.
That would give us real backtraces for e.g. ICEs during builds, but I don't know how often that's relevant.

We could also look into split DWARF, and maybe have a `rustc-debuginfo` component in `rustup`.

There's also the possibility of making it slimmer by omitting parameters to functions, or perhaps some deduplication (I think right now there is no DWARF reuse across CGUs? maybe ThinLTO helps?).

r? @michaelwoerister cc @rust-lang/wg-codegen @alexcrichton @Mark-Simulacrum
2020-03-23 10:29:05 +01:00
Alex Tokarev
b35c30251f Reword unused variable warning 2020-03-23 12:14:45 +03:00
Vadim Petrochenkov
c3c0a097a7 resolve: Do not resolve visibilities on proc macro definitions twice 2020-03-23 11:40:58 +03:00
Ralf Jung
4803f2946e add err_machine_stop macro 2020-03-23 08:48:03 +01:00
Aaron Hill
86b8dea5ec
Ignore tests on some platforms due to #53081 2020-03-23 02:04:43 -04:00
bors
8ff785011b Auto merge of #70296 - Centril:rollup-wvfmb3n, r=Centril
Rollup of 9 pull requests

Successful merges:

 - #69251 (#[track_caller] in traits)
 - #69880 (miri engine: turn error sanity checks into assertions)
 - #70207 (Use getentropy(2) on macos)
 - #70227 (Only display definition when suggesting a typo)
 - #70236 (resolve: Avoid "self-confirming" import resolutions in one more case)
 - #70248 (parser: simplify & remove unused field)
 - #70249 (handle ConstKind::Unresolved after monomorphizing)
 - #70269 (remove redundant closures (clippy::redundant_closure))
 - #70270 (Clean up E0449 explanation)

Failed merges:

r? @ghost
2020-03-23 06:02:34 +00:00
Esteban Küber
b8f9866257 Tweak output for invalid negative impl errors 2020-03-22 21:53:29 -07:00
Aaron Hill
96e2d03d4b
Store idents for DefPathData into crate metadata
Previously, we threw away the `Span` associated with a definition's
identifier when we encoded crate metadata, causing us to lose location
and hygiene information.

We now store the identifier's `Span` in the crate metadata.
When we decode items from the metadata, we combine
the name and span back into an `Ident`.

This improves the output of several tests, which previously had messages
suppressed due to dummy spans.

This is a prerequisite for #68686, since throwing away a `Span` means
that we lose hygiene information.
2020-03-22 23:40:19 -04:00
Mazdak Farrokhzad
5f91f30b0a
Rollup merge of #70270 - GuillaumeGomez:cleanup-e0449, r=Dylan-DPC
Clean up E0449 explanation

r? @Dylan-DPC
2020-03-23 04:26:16 +01:00
Mazdak Farrokhzad
c984a96189
Rollup merge of #70269 - matthiaskrgr:clippy_closures, r=Dylan-DPC
remove redundant closures (clippy::redundant_closure)
2020-03-23 04:26:15 +01:00
Mazdak Farrokhzad
092c821ef2
Rollup merge of #70249 - lcnr:issue70125, r=eddyb
handle ConstKind::Unresolved after monomorphizing

fixes #70125

r? @bjorn3
2020-03-23 04:26:13 +01:00
Mazdak Farrokhzad
8dda61792b
Rollup merge of #70248 - Centril:unroot, r=petrochenkov
parser: simplify & remove unused field

r? @petrochenkov
2020-03-23 04:26:12 +01:00
Mazdak Farrokhzad
08dfd1344c
Rollup merge of #70236 - petrochenkov:globimpice, r=ecstatic-morse
resolve: Avoid "self-confirming" import resolutions in one more case

So the idea behind "blacklisted bindings" is that we must ignore some name definitions during resolution because otherwise they cause infinite cycles.
E.g. import
```rust
use my_crate;
```
would refer to itself (on 2018 edition) without this blacklisting, because `use my_crate;` is the first name in scope when we are resolving `my_crate` here.

In this PR we are doing this blacklisting for the case
```rust
use same::same;
```
, namely blacklisting the second `same` when resolving the first `same`.
This was previously forgotten.

Fixes https://github.com/rust-lang/rust/issues/62767
2020-03-23 04:26:10 +01:00
Mazdak Farrokhzad
11f5309858
Rollup merge of #70227 - LeSeulArtichaut:typo-def, r=Centril
Only display definition when suggesting a typo

Closes #70206
r? @Centril
2020-03-23 04:26:08 +01:00
Mazdak Farrokhzad
675bdf6d6d
Rollup merge of #70207 - hatoo:macos-getentropy, r=dtolnay
Use getentropy(2) on macos

resolves #70179
2020-03-23 04:26:07 +01:00
Mazdak Farrokhzad
a2b469c4cc
Rollup merge of #69880 - RalfJung:miri-assert-error-sanity, r=oli-obk
miri engine: turn error sanity checks into assertions

We had these as debug assertions so far to make sure our test suite is clean, but really these are conditions that should never arise and also @eddyb told me to turn non-performance-critical debug assertions into full assertions so here we go. ;)

I propose that we do a check-only crater run to make sure this does not actually happen in practice.

r? @oli-obk
2020-03-23 04:26:05 +01:00
Mazdak Farrokhzad
5ed9d7ebb6
Rollup merge of #69251 - anp:track-caller-in-traits, r=eddyb
#[track_caller] in traits

Per https://github.com/rust-lang/rust/issues/47809#issuecomment-572791760, this allows the `#[track_caller]` attribute on trait methods.

Includes tests for `#[track_caller]` with:

* "regular" trait impls
* default trait impls
* "blanket-tracked" trait impls, where the annotation is in the trait definition and is inherited by "regular" impls of the trait
2020-03-23 04:26:04 +01:00
bors
37c945dd61 Auto merge of #70204 - Centril:unshackled-lowering, r=Zoxc
Liberate `rustc_ast_lowering` from `rustc`

The whole point of this PR is the very last commit, in which we remove `rustc` as one of `rustc_ast_lowering`'s dependencies, thereby improving `./x.py` parallelism and working towards https://github.com/rust-lang/rust/issues/65031.

Noteworthy:
- From `rustc::arena` we move logic into `arena`, in particular `declare_arena!`. This is then used in `rustc_ast_lowering` so that lowering has its own separate arena.
- Some linting code is unfortunately moved to `rustc_session::lint` cause its used both in `rustc_lint` and `rustc_ast_lowering`, and this is their common dependency.
- `rustc_session::CrateDisambiguator` is moved into `rustc_ast` so that `rustc::hir::map::definitions` can be moved into `rustc_hir`, so that `rustc_ast_lowering` can stop referring to `rustc::hir`.

r? @Zoxc
2020-03-23 03:10:48 +00:00
Eduard-Mihai Burtescu
b5e78a2fa7 rustc_llvm: don't use -g when LLVM_NDEBUG is set. 2020-03-23 02:36:36 +02:00
Eduard-Mihai Burtescu
d6f4a2fbf9 rustc_codegen_llvm: don't generate static and vtable debuginfo for -Cdebuginfo=1. 2020-03-23 02:36:36 +02:00
Eduard-Mihai Burtescu
c923f045ce rustc_codegen_llvm: don't generate Self type debuginfo for methods for -Cdebuginfo=1. 2020-03-23 02:36:35 +02:00
Eduard-Mihai Burtescu
7023948400 rustc_codegen_llvm: don't generate "lexical block" scopes for -Cdebuginfo=1. 2020-03-23 02:36:35 +02:00
Adam Perry
69bd46a6a1 Remove special-casing from TyCtxt::impl_of_method.
We can do this now that opt_associated_item doesn't have any panicking paths.
2020-03-22 17:21:18 -07:00
Adam Perry
97da6dae41 Allow #[track_caller] in traits.
The codegen implementation already works for this, so we're:

* propagating track_caller attr from trait def to impl
* relaxing errors
* adding tests

Approved in a recent lang team meeting:
https://github.com/rust-lang/lang-team/blob/master/minutes/2020-01-09.md
2020-03-22 17:21:18 -07:00
Nicholas Nethercote
ca0f997519 Factor out a repeated config.no_integrated_as test. 2020-03-23 10:45:27 +11:00
Nicholas Nethercote
a147cd070e Introduce a local variable config_emit_normal_obj.
This adds a missing `!config.obj_is_bitcode` condition to two places
that should have it.

As a result, when `obj_is_bitcode` and `no_integrated_as` are both true,
the compiler will no longer unnecessarily emit asm, convert it to an
object file, and then overwrite that object file with bitcode.
2020-03-23 10:45:27 +11:00
Nicholas Nethercote
f8261b496d Factor out a repeated config.obj_is_bitcode test. 2020-03-23 10:45:27 +11:00
Nicholas Nethercote
e4b36baf54 Remove an unnecessary block scope. 2020-03-23 10:45:27 +11:00
Nicholas Nethercote
47c8f3f56b Combine ModuleConfig::embed_bitcode{,_marker}.
Because the `(true, true)` combination isn't valid.
2020-03-23 10:45:27 +11:00
Nicholas Nethercote
d156bf658f Remove some local variables.
I find the code easier to read if the values in `config` are all used
directly, rather than a mix of `config` values and local variables. It
will also faciliate some of the following commits.

Also, use `config.bitcode_needed()` in one place.
2020-03-23 10:45:23 +11:00
Esteban Küber
9175940c92 Use more targetted span for error label 2020-03-22 16:09:42 -07:00
Esteban Küber
854b78fe22 Normalize wording of privacy access labels 2020-03-22 15:36:54 -07:00
bors
e4b01c7791 Auto merge of #69778 - Marwes:dep_graph, r=davidtwco
perf(dep_graph): Avoid allocating a set on when the number reads are …

…small

`reserve_and_rehash` takes up 1.4% of the runtime on the `packed-simd`
benchmark which I believe is due to the number of reads are very low in
many cases (see https://github.com/rust-lang/rust/pull/50565 for
instance).

This avoids allocating the set until we start allocating the `reads`
`SmallVec` but it is possible that a lower limit might be better (not
tested since the improvement will be hard to spot either way).
2020-03-22 22:36:44 +00:00