Commit graph

123348 commits

Author SHA1 Message Date
bors
7e11379f3b Auto merge of #74113 - lcnr:type-dependent-consts-2, r=eddyb
Support const args in type dependent paths (Take 2)

once more, except it is sound this time 🥰 previously #71154

-----
```rust
#![feature(const_generics)]

struct A;
impl A {
    fn foo<const N: usize>(&self) -> usize { N }
}
struct B;
impl B {
    fn foo<const N: usize>(&self) -> usize { 42 }
}

fn main() {
    let a = A;
    a.foo::<7>();
}
```
When calling `type_of` for generic const arguments, we now use the `TypeckTables` of the surrounding body to get the expected type.

This alone causes cycle errors though, as we now have `typeck_tables_of(main)` -> `...` ->
`type_of(main_ANON0 := 7)` -> `typeck_tables_of(main)`  (see https://github.com/rust-lang/rust/issues/68400#issuecomment-611760290)

To prevent this we must not call `type_of(const_arg)` during `typeck_tables_of`. This is achieved by
calling `type_of(param_def_id)` instead.

We have to somehow remember the `DefId` of the param through all of typeck, which is done using the
struct `ty::WithOptConstParam<DefId>`, which replaces `DefId` where needed and contains an `Option<DefId>` to
be able to store the const parameter in case it exists.

Queries which are currently cached on disk are split into two variants: `query_name`(cached) and `query_name_(of|for)_const_arg`(not cached), with `query_name_of_const_arg` taking a pair `(did, param_did): (LocalDefId, DefId)`.

For some queries a method `query_name_of_opt_const_arg` is added to `TyCtxt` which takes a `ty::WithOptConstParam` and either calls `query_name` or `query_name_of_const_arg` depending on the value of `const_param_did`.

r? @eddyb @varkor
2020-07-15 12:49:25 +00:00
Bastian Kauschke
2666aed498 unify Instance::resolve 2020-07-15 13:06:47 +02:00
Bastian Kauschke
e070b45e6a unsafety_check_result_for_const_arg 2020-07-15 13:06:47 +02:00
Bastian Kauschke
aca66bd052 WithOptConstParam::dummy -> WithOptConstParam::unknown 2020-07-15 13:06:47 +02:00
Bastian Kauschke
8003ccfdcd ty_def_id -> def_id_for_type_of 2020-07-15 13:06:47 +02:00
Bastian Kauschke
a909eb6b65 improve naming 2020-07-15 13:06:47 +02:00
Bastian Kauschke
805c44d5d3 cleanup 2020-07-15 12:58:33 +02:00
Bastian Kauschke
a7fe4df04a update promoted_mir 2020-07-15 12:58:33 +02:00
Bastian Kauschke
ae80d7e012 update const arg queries 2020-07-15 12:58:33 +02:00
Bastian Kauschke
08394eb121 update test 2020-07-15 12:58:32 +02:00
Bastian Kauschke
29b5844c2d only call typeck_tables_of_const_arg for const args 2020-07-15 12:58:32 +02:00
Bastian Kauschke
9df03ccf62 mir opt cross compile 2020-07-15 12:58:32 +02:00
Bastian Kauschke
d4cb820528 mir_built is a lie 2020-07-15 12:58:32 +02:00
Bastian Kauschke
aa02692570 decode stuff 2020-07-15 12:58:32 +02:00
Bastian Kauschke
050acc0213 ui test diff 2020-07-15 12:58:32 +02:00
Bastian Kauschke
4ef1029f5c mir opt diff 2020-07-15 12:58:32 +02:00
Bastian Kauschke
48bbf49765 const generics work! 2020-07-15 12:58:32 +02:00
Bastian Kauschke
b615b98f33 continue mir pipeline 2020-07-15 12:58:32 +02:00
Bastian Kauschke
316128c38a optimized_mir 2020-07-15 12:58:32 +02:00
Bastian Kauschke
a8419099d1 InstanceDef::Item 2020-07-15 12:58:32 +02:00
Bastian Kauschke
178c6507f6 typeck all the tables 2020-07-15 12:58:32 +02:00
Bastian Kauschke
2e6bf0923b const_eval_resolve 2020-07-15 12:58:32 +02:00
Bastian Kauschke
58031c7cb2 ConstKind::Unevaluated 2020-07-15 12:58:32 +02:00
Bastian Kauschke
08865d94e5 begin using WithOptParam 2020-07-15 12:58:32 +02:00
Bastian Kauschke
37a6103e1a introduce the query opt_const_param_of 2020-07-15 12:58:32 +02:00
Bastian Kauschke
2111d6f276 add const generic tests 2020-07-15 12:58:32 +02:00
bors
d9e8d62907 Auto merge of #74214 - nnethercote:change-SymbolName-name, r=eddyb
Change `SymbolName::name` to a `&str`.

This eliminates a bunch of `Symbol::intern()` and `Symbol::as_str()`
calls, which is good, because they require locking the interner.

Note that the unsafety in `from_cycle_error()` is identical to the
unsafety on other adjacent impls.

r? @eddyb
2020-07-15 08:44:46 +00:00
bors
c714eae0e3 Auto merge of #71272 - jclulow:illumos-x86-ci, r=pietroalbini
build dist for x86_64-unknown-illumos

This change creates a new Docker image, "dist-x86_64-illumos", and sets
things up to build the full set of "dist" packages for illumos hosts, so
that illumos users can use "rustup" to install packages.  It also
adjusts the manifest builder to expect complete toolchains for this
platform.
2020-07-15 04:46:06 +00:00
Nicholas Nethercote
a1b8540390 Undo the const_str changes from the previous commit. 2020-07-15 14:38:00 +10:00
Nicholas Nethercote
7c4d431c06 Change SymbolName::name to a &str.
This eliminates a bunch of `Symbol::intern()` and `Symbol::as_str()`
calls, which is good, because they require locking the interner.

Note that the unsafety in `from_cycle_error()` is identical to the
unsafety on other adjacent impls.
2020-07-15 14:37:55 +10:00
bors
567ad7455d Auto merge of #74175 - nnethercote:more-static-symbols, r=oli-obk
More static symbols

These commits add some more static symbols and convert lots of places to use them.

r? @oli-obk
2020-07-15 00:16:25 +00:00
Nicholas Nethercote
5930081f34 Remove lots of Symbol::as_str() calls.
In various ways, such as changing functions to take a `Symbol` instead
of a `&str`.
2020-07-15 09:01:35 +10:00
Nicholas Nethercote
f04e866e57 Add and use more static symbols.
Note that the output of `unpretty-debug.stdout` has changed. In that
test the hash values are normalized from a symbol numbers to small
numbers like "0#0" and "0#1". The increase in the number of static
symbols must have caused the original numbers to contain more digits,
resulting in different pretty-printing prior to normalization.
2020-07-15 08:42:59 +10:00
Nicholas Nethercote
e284f5d050 Fix the ordering of the static symbols. 2020-07-15 08:42:59 +10:00
Nicholas Nethercote
026089bdb5 Rename sym::nontrapping_fptoint. 2020-07-15 08:42:59 +10:00
bors
23744c84d9 Auto merge of #74342 - Manishearth:rollup-l63pesj, r=Manishearth
Rollup of 11 pull requests

Successful merges:

 - #73759 (Add missing Stdin and StdinLock examples)
 - #74211 (Structured suggestion when not using struct pattern)
 - #74228 (Provide structured suggestion on unsized fields and fn params)
 - #74252 (Don't allow `DESTDIR` to influence LLVM builds)
 - #74263 (Slight reorganization of sys/(fast_)thread_local)
 - #74271 (process_unix: prefer i32::*_be_bytes over manually shifting bytes)
 - #74272 (pprust: support multiline comments within lines)
 - #74332 (Update cargo)
 - #74334 (bootstrap: Improve wording on docs for `verbose-tests`)
 - #74336 (typeck: use `item_name` in cross-crate packed diag)
 - #74340 (lint: use `transparent_newtype_field` to avoid ICE)

Failed merges:

r? @ghost
2020-07-14 20:19:59 +00:00
Manish Goregaokar
dbe7ed33cd
Rollup merge of #74340 - davidtwco:issue-73747-improper-ctypes-defns-is-zst-with-params, r=pnkfelix
lint: use `transparent_newtype_field` to avoid ICE

Fixes #73747.

This PR re-uses the `transparent_newtype_field` function instead of manually calling `is_zst` on normalized fields to determine which field in a transparent type is the non-zero-sized field, thus avoiding an ICE.
2020-07-14 13:19:39 -07:00
Manish Goregaokar
c4fcf5a7a4
Rollup merge of #74336 - davidtwco:issue-73112-cross-crate-packed-type-diagnostic, r=estebank
typeck: use `item_name` in cross-crate packed diag

Fixes #73112.

This PR replaces the use of `expect_local` and `hir().get` to fetch the identifier for a ADT with `item_name` - which works across crates.
2020-07-14 13:19:37 -07:00
Manish Goregaokar
aedb7c37b8
Rollup merge of #74334 - jyn514:config-toml-docs, r=spastorino
bootstrap: Improve wording on docs for `verbose-tests`

From https://github.com/rust-lang/rustc-dev-guide/pull/795#discussion_r454392291

r? @spastorino
2020-07-14 13:19:35 -07:00
Manish Goregaokar
1cd8c5e4ee
Rollup merge of #74332 - ehuss:update-cargo, r=ehuss
Update cargo

4 commits in 4f74d9b2a771c58b7ef4906b2668afd075bc8081..43cf77395cad5b79887b20b7cf19d418bbd703a9
2020-07-08 17:13:00 +0000 to 2020-07-13 17:35:42 +0000
- fix: add space to comments (rust-lang/cargo#8476)
- Allow configuring unstable flags via config file (rust-lang/cargo#8393)
- Add support for rustc's `-Z terminal-width`. (rust-lang/cargo#8427)
- Avoid colliding with older Cargo fingerprint changes (rust-lang/cargo#8473)
2020-07-14 13:19:33 -07:00
Manish Goregaokar
92e90f943c
Rollup merge of #74272 - davidtwco:issue-73626-multiline-mixed-comments, r=Mark-Simulacrum
pprust: support multiline comments within lines

Fixes #73626.

This PR adds support to `rustc_ast_pretty` for multiline comments that start and end within a line of source code.

Fun fact: [the commit which added this assert](d12ea39896) was from 2011!
d12ea39896/src/comp/pretty/pprust.rs (L1146-L1150)
2020-07-14 13:19:32 -07:00
Manish Goregaokar
7b1247c34f
Rollup merge of #74271 - lzutao:cmdbytes, r=LukasKalbertodt
process_unix: prefer i32::*_be_bytes over manually shifting bytes

This PR makes it more clear about the intend of the code.
2020-07-14 13:19:30 -07:00
Manish Goregaokar
fadd91c630
Rollup merge of #74263 - RalfJung:thread-local, r=Mark-Simulacrum
Slight reorganization of sys/(fast_)thread_local

I was long confused by the `thread_local` and `fast_thread_local` modules in the `sys(_common)` part of libstd. The names make it *sound* like `fast_thread_local` is just a faster version of `thread_local`, but really these are totally different APIs: one provides thread-local "keys", which are non-addressable pointer-sized pieces of local storage with an associated destructor; the other (the "fast" one) provides just a destructor.

So I propose we rename `fast_thread_local` to `thread_local_dtor`, and `thread_local` to `thread_local_key`. That's what this PR does.
2020-07-14 13:19:28 -07:00
Manish Goregaokar
1e74f28599
Rollup merge of #74252 - shepmaster:bootstrap-rust-destdir, r=Mark-Simulacrum
Don't allow `DESTDIR` to influence LLVM builds

When running a command like `DESTDIR=foo x.py install` in a completely
clean build directory, this will cause LLVM to be installed into
`DESTDIR`, which then causes the build to fail later when it attempts
to *use* those LLVM files.
2020-07-14 13:19:26 -07:00
Manish Goregaokar
a364c0a782
Rollup merge of #74228 - estebank:unsized-param, r=davidtwco
Provide structured suggestion on unsized fields and fn params

* Suggest borrowing or boxing unsized fields
* Suggest borrowing fn parameters
* Remove some verbosity of unsized errors
* Remove `on_unimplemented` note from `trait Sized`

Fix #23286, fix #28653.

r? @davidtwco
2020-07-14 13:19:24 -07:00
Manish Goregaokar
be5c7abfd6
Rollup merge of #74211 - estebank:struct-pat-as-unit, r=petrochenkov
Structured suggestion when not using struct pattern

r? @petrochenkov
2020-07-14 13:19:22 -07:00
Manish Goregaokar
353df59893
Rollup merge of #73759 - GuillaumeGomez:stdin-examples, r=Dylan-DPC
Add missing Stdin and StdinLock examples

r? @Dylan-DPC
2020-07-14 13:19:20 -07:00
Esteban Küber
ff75395ca8 Reword message 2020-07-14 12:19:50 -07:00
Esteban Küber
c38b127d84 Remove redundant explanatory note for type parameters 2020-07-14 12:19:44 -07:00
David Wood
cccc3109ff
lint: use transparent_newtype_field to avoid ICE
This commit re-uses the `transparent_newtype_field` function instead of
manually calling `is_zst` on normalized fields to determine which field
in a transparent type is the non-zero-sized field, thus avoiding an ICE.

Signed-off-by: David Wood <david@davidtw.co>
2020-07-14 19:26:34 +01:00