Commit graph

10659 commits

Author SHA1 Message Date
bors
39a295f526 Auto merge of #74509 - matthewjasper:empty-verify, r=nikomatsakis
Use `ReEmpty(U0)` as the implicit region bound in typeck

Fixes #74429

r? @nikomatsakis
2020-07-23 13:43:42 +00:00
bors
2bbfa02b1b Auto merge of #74667 - Manishearth:rollup-s6k59sw, r=Manishearth
Rollup of 8 pull requests

Successful merges:

 - #74141 (libstd/libcore: fix various typos)
 - #74490 (add a Backtrace::disabled function)
 - #74548 (one more Path::with_extension example, to demonstrate behavior)
 - #74587 (Prefer constant over function)
 - #74606 (Remove Linux workarounds for missing CLOEXEC support)
 - #74637 (Make str point to primitive page)
 - #74654 (require type defaults to be after const generic parameters)
 - #74659 (Improve codegen for unchecked float casts on wasm)

Failed merges:

r? @ghost
2020-07-23 08:56:45 +00:00
Manish Goregaokar
e9d4134467
Rollup merge of #74654 - lcnr:default-no-more, r=varkor
require type defaults to be after const generic parameters

From current discussions it seems like the goal here is for type and const parameters to be unordered and allow things like `struct Foo<const N: usize, T = u32>(T)` and `struct Foo<T, const N: usize = 7>` this way.

Note: This means that using `min_const_generics` it will not be possible for an adt to have both type defaults and const parameters.

closes #70471

r? @varkor @eddyb
2020-07-23 00:42:18 -07:00
bors
fcac11993c Auto merge of #74611 - Mark-Simulacrum:revert-74069-bad-niche, r=eddyb
Revert "Compare tagged/niche-filling layout and pick the best one"

Reverts rust-lang/rust#74069. It caused a performance regression, see https://github.com/rust-lang/rust/pull/74069#issuecomment-662166827. perf: https://perf.rust-lang.org/compare.html?start=d3df8512d2c2afc6d2e7d8b5b951dd7f2ad77b02&end=cfade73820883adf654fe34fd6b0b03a99458a51

r? @eddyb

cc @nnethercote
2020-07-23 07:11:01 +00:00
Bastian Kauschke
2f565967b0 tweak wording
Co-authored-by: varkor <github@varkor.com>
2020-07-23 08:14:39 +02:00
Manish Goregaokar
9ac2af1dfc
Rollup merge of #74618 - JohnTitor:no-more-bad-placeholder, r=estebank
Do not ICE on assoc type with bad placeholder

Fixes #74612
r? @estebank
2020-07-22 16:34:46 -07:00
Manish Goregaokar
4828895cd9
Rollup merge of #74538 - nbdd0121:issue-73976, r=lcnr
Guard against non-monomorphized type_id intrinsic call

This PR checks whether the type is sufficient monomorphized when calling type_id or type_name intrinsics. If the type is not sufficiently monomorphized, e.g. used in a pattern, the code will be rejected.

Fixes #73976
2020-07-22 16:34:41 -07:00
Manish Goregaokar
fe9babbaed
Rollup merge of #73783 - estebank:impl-dyn-trait-static-lifetime, r=nikomatsakis
Detect when `'static` obligation might come from an `impl`

Partly address #71341.
2020-07-22 16:34:36 -07:00
Bastian Kauschke
a95e6bb916 require type defaults to be after const generic parameters
as if this is currently possible. HA!
2020-07-22 22:58:54 +02:00
Esteban Küber
889a4d9a0b Change error code number 2020-07-22 13:12:34 -07:00
bors
bbebe7351f Auto merge of #74633 - davidtwco:issue-74614-disable-polymorphisation, r=wesleywiser
Disable polymorphisation

Fixes #74614.

This PR disables polymorphisation to fix the regression in #74614 after investigation into the issue makes it clear that the fix won't be trivial. ~~I'll file an issue shortly to replace #74614 with the findings so far.~~ #74636 has been filed to track the fix of the underlying regression.

r? @eddyb
2020-07-22 19:34:20 +00:00
Esteban Küber
53d96b5159 Handle fully-qualified paths and add test cases 2020-07-22 12:25:55 -07:00
Esteban Küber
f80743712e Use ty::Instance::resolve to identify 'static bound source 2020-07-22 12:25:55 -07:00
Esteban Küber
7bf39fa9d9 Further tweak wording of E0759 and introduce E0767 2020-07-22 12:25:54 -07:00
Esteban Küber
6bac3dbfc2 Add more context to diagnostic 2020-07-22 12:25:54 -07:00
Esteban Küber
4e08bab87d Increase accuracy of lifetime bound on trait object impl suggestion 2020-07-22 12:25:54 -07:00
Esteban Küber
6513148c14 Detect when 'static obligation might come from an impl
Address #71341.
2020-07-22 12:25:54 -07:00
Manish Goregaokar
216ed3c4ab
Rollup merge of #74237 - lzutao:compiletest, r=Mark-Simulacrum
compiletest: Rewrite extract_*_version functions

This makes extract_lldb_version has the same version type like
extract_gdb_version.
2020-07-22 09:29:05 -07:00
Manish Goregaokar
8afb305e72
Rollup merge of #73893 - ajpaverd:cfguard-stabilize, r=nikomatsakis
Stabilize control-flow-guard codegen option

This is the stabilization PR discussed in #68793. It converts the `-Z control-flow-guard` debugging option into a codegen option (`-C control-flow-guard`), and changes the associated tests.
2020-07-22 09:29:03 -07:00
David Wood
799d52eff7
tests: add regression test for #74614
This commit adds a regression test for #74614 so that it is fixed before
polymorphisation is re-enabled.

Signed-off-by: David Wood <david@davidtw.co>
2020-07-22 15:36:26 +01:00
David Wood
f39ed207fe
sess: disable polymorphisation
This commit disables polymorphisation to resolve regressions related to
closures which inherit unused generic parameters and are then used in
casts or reflection.

Signed-off-by: David Wood <david@davidtw.co>
2020-07-22 15:36:24 +01:00
Yuki Okushi
430bd39a0d
Do not ICE on assoc type with bad placeholder 2020-07-22 14:43:11 +09:00
Mark Rousskov
1d6860082f
Revert "Compare tagged/niche-filling layout and pick the best one" 2020-07-21 20:02:30 -04:00
bors
b52522ade1 Auto merge of #69749 - davidtwco:issue-46477-polymorphization, r=eddyb
Polymorphization

This PR implements an analysis to detect when functions could remain polymorphic during code generation.

Fixes #46477

r? @eddyb
cc @rust-lang/wg-mir-opt @nikomatsakis @pnkfelix
2020-07-21 03:09:04 +00:00
Gary Guo
b3340b5cea Expand test to cover type_name and monomorphic use 2020-07-21 02:28:51 +01:00
Manish Goregaokar
6bbf82ddd7
Rollup merge of #74557 - jakubadamw:issue-74539, r=nagisa
Fix an ICE on an invalid `binding @ ...` in a tuple struct pattern

Fixes #74539.
2020-07-20 12:30:32 -07:00
Manish Goregaokar
991da05c32
Rollup merge of #74051 - yodaldevoid:issue_60814, r=nikomatsakis
disallow non-static lifetimes in const generics

Disallow non-static lifetimes in const generics in order to to patch over an ICE caused when we encounter a non-static lifetime in a const generic during borrow checking. This restriction may be relaxed in the future, but we need more discussion before then, and in the meantime we should still deal with this ICE.

Fixes issue #60814
2020-07-20 12:30:18 -07:00
Manish Goregaokar
0897bc2403
Rollup merge of #73323 - davidtwco:issue-73252-wfcheck-foreign-fn-decl, r=ecstatic-morse
wf: check foreign fn decls for well-formedness

Fixes #73252 and fixes #73253.

This PR extends current well-formedness checking to apply to foreign function declarations, re-using the existing machinery for regular functions. In doing this, later parts of the compiler (such as the `improper_ctypes` lint) can rely on being operations not failing as a result of invalid code which would normally be caught earlier.
2020-07-20 12:30:16 -07:00
Manish Goregaokar
105cd49554
Rollup merge of #72714 - JohnTitor:debug-assert, r=nikomatsakis
Fix debug assertion in typeck

Fixes #72410
2020-07-20 12:30:12 -07:00
David Wood
4b99699c84
index: introduce and use FiniteBitSet
This commit introduces a `FiniteBitSet` type which replaces the manual
bit manipulation which was being performed in polymorphization.

Signed-off-by: David Wood <david@davidtw.co>
2020-07-20 19:35:37 +01:00
David Wood
b1f8bd6356
mir: use attribute over -Z polymorphize-errors
This commit replaces the `-Z polymorphize-errors` debugging flag with a
`#[rustc_polymorphize_error]` attribute for use on functions.

Signed-off-by: David Wood <david@davidtw.co>
2020-07-20 19:35:35 +01:00
David Wood
f52c72948a
ty: normalize fn sigs before subst
This commit normalizes function signatures for instances before
substituting, a workaround for polymorphization considering
parameters unused when they show up in the signature, but not the
body (due to being normalized).

Unfortunately, this causes test output to change with the parallel
compiler only.

Signed-off-by: David Wood <david@davidtw.co>
2020-07-20 19:35:32 +01:00
David Wood
2989fea88a
mir: unused_generic_params query
This commit implements the `unused_generic_params` query, an initial
version of polymorphization which detects when an item does not use
generic parameters and is being needlessly monomorphized as a result.

Signed-off-by: David Wood <david@davidtw.co>
2020-07-20 19:35:30 +01:00
Matthew Jasper
45c01edaf2 Use ReEmpty(U0) as the implicit region bound in typeck 2020-07-20 18:50:09 +01:00
Jakub Adam Wieczorek
f5e5eb6f46 Fix an ICE on an invalid binding @ ... in a tuple struct pattern 2020-07-20 15:48:40 +00:00
David Wood
ceac273e60
wf: check foreign fn decls for well-formedness
This commit extends current well-formedness checking to apply to foreign
function declarations, re-using the existing machinery for regular
functions. In doing this, later parts of the compiler (such as the
`improper_ctypes` lint) can rely on being operations not failing as a
result of invalid code which would normally be caught earlier.

Signed-off-by: David Wood <david@davidtw.co>
2020-07-20 10:28:12 +01:00
Manish Goregaokar
55c4057f55
Rollup merge of #74516 - lcnr:min-specialization-ice, r=matthewjasper
do not try fetching the ancestors of errored trait impls

fixes #74483

While building the specialization graph, we use `tcx.all_impls` which discards impls with incorrect self types,
we do however call `trait_def.ancestors` with these impls which caused an ICE as they aren't part of the
specialization graph.
2020-07-19 19:12:37 -07:00
Gary Guo
4fb260bb32 Guard against non-monomorphized type_id intrinsic call 2020-07-19 23:33:12 +01:00
Gabriel Smith
c60a035658 Add test for an explicit non-'static lifetime in a const argument 2020-07-19 12:53:51 -04:00
Gabriel Smith
69d5dd6a50 disallow non-static lifetimes in const generics
This has been put in place to patch over an ICE caused when we encounter
a non-static lifetime in a const generic during borrow checking. This
restriction may be relaxed in the future, but we need more discussion
before then, and in the meantime we should still deal with this ICE.

Fixes issue #60814
2020-07-19 12:52:36 -04:00
Bastian Kauschke
455e6140d8 do not try fetching the ancestors of errored trait impls 2020-07-19 15:45:44 +02:00
Lzu Tao
2bcefa8d81 Add missing : after *llvm-version 2020-07-19 11:03:04 +00:00
Manish Goregaokar
2fad396368
Rollup merge of #74459 - canova:const-unreachable-unchecked, r=oli-obk
Make unreachable_unchecked a const fn

This PR makes `std::hint::unreachable_unchecked` a const fn so we can use it inside a const function.
r? @RalfJung
Fixes #53188.
2020-07-18 16:50:59 -07:00
Manish Goregaokar
1a54b61e39
Rollup merge of #74445 - lcnr:const-generic-ty-decl, r=Dylan-DPC
add test for #62878

forgot to push this as part of #74159

r? @Dylan-DPC
2020-07-18 16:50:57 -07:00
Manish Goregaokar
43ba8409d7
Rollup merge of #74071 - petrochenkov:cload3, r=matthewjasper
rustc_metadata: Make crate loading fully speculative

Instead of reporting `span_err`s on the spot crate loading errors are now wrapped into the `CrateError` enum and returned, so they are reported only at the top level `resolve_crate` call, and not reported at all if we are resolving speculatively with `maybe_resolve_crate`.

As a result we can attempt loading crates for error recovery (e.g. import suggestions) without any risk of producing extra errors.
Also, this means better separation between error reporting and actual logic.

Fixes https://github.com/rust-lang/rust/issues/55103
Fixes https://github.com/rust-lang/rust/issues/56590
2020-07-18 16:50:56 -07:00
Vadim Petrochenkov
0a4217d09f rustc_metadata: Make crate loading fully speculative 2020-07-18 14:06:04 +04:00
Yuki Okushi
a11024f4f3
Fix debug assertion in typeck 2020-07-18 12:20:51 +09:00
Manish Goregaokar
f276dd4f28
Rollup merge of #74448 - davidtwco:improper-ctypes-definitions-boxes, r=davidtwco
improper_ctypes_definitions: allow `Box`

Addresses https://github.com/rust-lang/rust/pull/72700#issuecomment-659449386.

This PR stops linting against `Box` in `extern "C" fn`s for the `improper_ctypes_definitions` lint - boxes are documented to be FFI-safe.

cc @alexcrichton @CryZe
2020-07-17 18:13:47 -07:00
Manish Goregaokar
378f46d1f2
Rollup merge of #74444 - Alexendoo:test-69414, r=nikomatsakis
Add regression test for #69414

Closes #69414 (no longer ICEs after #74159)
2020-07-17 18:13:45 -07:00
Manish Goregaokar
e775b4dbc4
Rollup merge of #74069 - erikdesjardins:bad-niche, r=nikomatsakis
Compare tagged/niche-filling layout and pick the best one

Finishes up #71045, and so fixes #63866.

cc @eddyb
r? @nikomatsakis (since @eddyb wrote the first commit)
2020-07-17 18:13:40 -07:00