Commit graph

31214 commits

Author SHA1 Message Date
Aaron Hill
5cd1b5dd79
Add test for use of $crate in nested foreign macro_rules! 2020-07-26 18:37:02 -04:00
Aaron Hill
0caebfabe6
Hygiene serialization implementation 2020-07-26 18:37:02 -04:00
Yuki Okushi
8dcf86887c
Add test for issue-72911 2020-07-26 18:54:54 +09:00
Yuki Okushi
832d0a7667
Add test for issue-56445 2020-07-26 18:54:24 +09:00
bors
461707c5a1 Auto merge of #74060 - kpp:remove_length_at_most_32, r=dtolnay
Remove trait LengthAtMost32

This is a continuation of https://github.com/rust-lang/rust/pull/74026 preserving the original burrbull's commit.

I talked to @burrbull, he suggested me to finish his PR.
2020-07-26 05:50:51 +00:00
bors
a4dd850720 Auto merge of #74735 - Aaron1011:fix/wf-impl-self-type, r=estebank
Use the proper span when WF-checking an impl self type
2020-07-26 03:03:19 +00:00
bors
bb85981a3a Auto merge of #74670 - tmandry:issue-73818, r=matthewjasper
Normalize bounds fully when checking defaulted types

When checking that the default type for `<T as X>::Y` is valid in this example:

```
trait X { type Y: PartialEq<<Self as X>::Y> }
impl X for T { default type Y = S; }
```

We will have to prove the bound `S: PartialEq<<T as X>::Y>`. In this case
we want `<T as X>::Y` to normalize to `S`. This is valid because we are
checking the default value specifically here. Add `<T as X>::Y = S` to the
ParamEnv for normalization _of the bound we are checking_ only.

Fixes #73818.

---

I noticed that adding this to the env for bounds checking didn't break any tests. Not sure if this is because we can't rely on it to prove anything, or because of missing test coverage.

r? @matthewjasper, @nikomatsakis
2020-07-25 23:37:07 +00:00
Tyler Mandry
e35d2867f1 Fix diagnostic by using predicate in GATs too 2020-07-25 13:52:47 -07:00
Tyler Mandry
31a3bb59ce Remove manual normalization in compare_projection_bounds 2020-07-25 13:48:29 -07:00
bors
f06e8e157c Auto merge of #74687 - estebank:bracketless-turbofish, r=matthewjasper
Detect turbofish missing surrounding angle brackets

Fix #74065.
2020-07-25 18:16:43 +00:00
bors
fe08fb7b1e Auto merge of #74510 - LukasKalbertodt:fix-range-from-index-panic, r=hanna-kruppe
Fix panic message when `RangeFrom` index is out of bounds

Before, the `Range` method was called with `end = slice.len()`. Unfortunately, because `Range::index` first checks the order of the indices (start has to be smaller than end), an out of bounds index leads to `core::slice::slice_index_order_fail` being called. This prints the message 'slice index starts at 27 but ends at 10', which is worse than 'index 27 out of range for slice of length 10'. This is not only useful to normal users reading panic messages, but also for people inspecting assembly and being confused by `slice_index_order_fail` calls.

You can see the produced assembly [here](https://rust.godbolt.org/z/GzMGWf) and try on Playground [here](https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=aada5996b2f3848075a6d02cf4055743). (By the way. this is only about which panic function is called; I'm pretty sure it does not improve anything about performance).
2020-07-25 16:27:24 +00:00
Aaron Hill
116ad51c2c
Use the proper span when WF-checking an impl self type 2020-07-25 02:11:55 -04:00
bors
d8cf749570 Auto merge of #74507 - lcnr:const-prop-into-op, r=oli-obk
add `visit_operand` to const prop

r? @oli-obk
2020-07-24 20:10:34 +00:00
Manish Goregaokar
5d1d94e7b8
Rollup merge of #74715 - oli-obk:mir_pass_diff, r=wesleywiser
Add a system for creating diffs across multiple mir optimizations.

r? @wesleywiser
2020-07-24 10:01:41 -07:00
Manish Goregaokar
7f24c7d39e
Rollup merge of #74698 - ayrtonm:handle-traitref-mismatch, r=estebank
fixed error reporting for mismatched traits

mismatched traits were previously referred to as types

closes #72217
2020-07-24 10:01:39 -07:00
Manish Goregaokar
e59effed30
Rollup merge of #74491 - xldenis:constant-binop-opt, r=oli-obk
Optimize away BitAnd and BitOr when possible

This PR lets `const_prop` optimize away `a | true == true` , `a & false == false` and `a * 0 = 0`. While I was writing this I've realized that constant propagation misses a lot of opportunities. For example:  https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=2a4b45e772f214210a36749b27223bb0

Constant propagation doesn't seem to... propagate constants, additionally the way constant propagation is currently setup makes it tricky to add cases like `a | false == a`.

I tried to organize `eval_rvalue_with_identities` to make the pattern of the optimizations easier to see but it still obscurs what should be a simple peephole optmization.

cc @oli-obk
2020-07-24 10:01:32 -07:00
bors
cfb6114b2a Auto merge of #74676 - lcnr:generics-no-sort, r=varkor
correctly deal with unsorted generic parameters

We now stop sorting generic params and instead correctly handle unsorted params in the rest of the compiler.

We still restrict const params to come after type params though, so this PR does not change anything which
is visible to users.

This might slightly influence perf, so let's prevent any unintentional rollups. @bors rollup=never

r? @varkor
2020-07-24 13:58:36 +00:00
Oliver Scherer
b56ea88414 Add a system for creating diffs across multiple mir optimizations. 2020-07-24 15:54:15 +02:00
Yuki Okushi
01b069db67
Rollup merge of #74703 - tmandry:issue-74047, r=oli-obk
Fix ICE while building MIR with type errors

See https://github.com/rust-lang/rust/issues/74047#issuecomment-663290913 for background. Replacing a binding with `PatKind::Wild` (introduced in #51789 and later refactored in #67439) caused an ICE downstream while building MIR.

I noticed that taking this code out no longer triggers the ICEs it was added to prevent. I'm not sure what else changed, or if this change is _correct_, but it does seem to be passing ui tests at least.

r? @oli-obk
cc @estebank

Fixes #74047.
2020-07-24 18:56:43 +09:00
Yuki Okushi
90f2816257
Rollup merge of #74680 - JohnTitor:missing-backticks, r=lcnr
Add missing backticks in diagnostics note
2020-07-24 18:56:40 +09:00
Yuki Okushi
1f6d5ce4ab
Rollup merge of #74665 - smmalis37:issue-62200, r=davidtwco
Don't ICE on unconstrained anonymous lifetimes inside associated types.

Fixes #62200. The change here is inspired (copied) by how this case is handled on bare fns at e8b55a4ad2/src/librustc_typeck/astconv.rs (L3083-L3106).
2020-07-24 18:56:32 +09:00
Yuki Okushi
a02aecba21
Rollup merge of #74623 - lcnr:polymorphize-functions, r=eddyb
polymorphize GlobalAlloc::Function

this sadly does not change #74614

r? @eddyb
2020-07-24 18:56:31 +09:00
Yuki Okushi
0651dd4aab
Rollup merge of #74572 - Mark-Simulacrum:unify-rustc-depr, r=petrochenkov
Internally unify rustc_deprecated and deprecated

This PR intentionally tries to be "featureless" in that the behavior is not altered for either attribute, though it more clearly exposes cases where that is the case in the code.
2020-07-24 18:56:27 +09:00
Tyler Mandry
62e75a1f22 Fix ICE while building MIR with type errors
Fixes #74047.
2020-07-23 17:41:05 -07:00
Ayrton
b75ed4f61c added a test case for reporting mismatched traits 2020-07-23 20:21:28 -04:00
Esteban Küber
d090e5ed33 Account for trailing closing angle brackets 2020-07-23 16:25:39 -07:00
Esteban Küber
20f4e5d9c2 Detect turbofish missing surrounding angle brackets 2020-07-23 09:35:49 -07:00
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
Yuki Okushi
3f4f3134d9
Add missing backticks in diagnostics note 2020-07-23 21:52:48 +09:00
Bastian Kauschke
5f1eea93a9 test usage 2020-07-23 14:30:01 +02:00
Bastian Kauschke
9910f156df add more complex param order test 2020-07-23 13:19:35 +02: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
Tyler Mandry
83a9dc92d5 Normalize bounds fully when checking defaulted types 2020-07-23 01:34:35 -07:00
Manish Goregaokar
8f02f2c1ab
Rollup merge of #74659 - alexcrichton:wasm-codegen, r=varkor
Improve codegen for unchecked float casts on wasm

This commit improves codegen for unchecked casts on WebAssembly targets
to use the singluar `iNN.trunc_fMM_{u,s}` instructions. Previously rustc
would codegen a bare `fptosi` and `fptoui` for float casts but for
WebAssembly targets the codegen for these instructions is quite large.
This large codegen is due to the fact that LLVM can speculate these
instructions so the trapping behavior of WebAssembly needs to be
protected against in case they're speculated.

The change here is to update the codegen for the unchecked cast
intrinsics to have a wasm-specific case where they call the appropriate
LLVM intrinsic to generate the right wasm instruction. The intrinsic is
explicitly opting-in to undefined behavior so a trap here for
out-of-bounds inputs on wasm should be acceptable.

cc #73591
2020-07-23 00:42:20 -07: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
Steven Malis
bbaab63f84 Include the note in the test. 2020-07-22 23:19:38 -07:00
Bastian Kauschke
2f565967b0 tweak wording
Co-authored-by: varkor <github@varkor.com>
2020-07-23 08:14:39 +02:00
Steven Malis
dc7d1156be Don't ICE on unconstrained anonymous lifetimes inside associated types. 2020-07-22 23:01:15 -07: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
02e350f5a2
Rollup merge of #74460 - dennis-hamester:rustdoc-warn-pub-to-priv, r=jyn514
rustdoc: Always warn when linking from public to private items

Change the logic such that linking from a public to a private item always triggers `intra_doc_link_resolution_failure`.
Previously, the warning was not emitted when `--document-private-items` is passed.

This came up during the discussion in https://github.com/rust-lang/rust/pull/74147#discussion_r452597901.
2020-07-22 16:34:39 -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
Alex Crichton
618aeec51f Improve codegen for unchecked float casts on wasm
This commit improves codegen for unchecked casts on WebAssembly targets
to use the singluar `iNN.trunc_fMM_{u,s}` instructions. Previously rustc
would codegen a bare `fptosi` and `fptoui` for float casts but for
WebAssembly targets the codegen for these instructions is quite large.
This large codegen is due to the fact that LLVM can speculate these
instructions so the trapping behavior of WebAssembly needs to be
protected against in case they're speculated.

The change here is to update the codegen for the unchecked cast
intrinsics to have a wasm-specific case where they call the appropriate
LLVM intrinsic to generate the right wasm instruction. The intrinsic is
explicitly opting-in to undefined behavior so a trap here for
out-of-bounds inputs on wasm should be acceptable.

cc #73591
2020-07-22 15:05:05 -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
Dennis Hamester
c14641a814 rustdoc: Add explanation when linting against public to private item links
The additional note helps explaining why the lint was triggered and that
--document-private-items directly influences the link resolution.
2020-07-22 21:40:51 +02:00
Dennis Hamester
ed53de029c rustdoc: Always warn when linking from public to private items
Change the logic such that linking from a public to a private item always
triggers intra_doc_link_resolution_failure. Previously, the warning was
not emitted when --document-private-items is passed.

Also don't rely anymore on the item's visibility, which would falsely trigger
the lint now that the check for --document-private-items is gone.
2020-07-22 21:36:30 +02: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