Mazdak Farrokhzad
b18d8612c8
Rollup merge of #64131 - shivan1b:deterministic-fxhashmap, r=Mark-Simulacrum
...
data_structures: Add deterministic FxHashMap and FxHashSet wrappers
StableMap
A wrapper for FxHashMap that allows to `insert`, `remove`, `get`, `get_mut` and convert a hashmap into a sorted vector using the method `into_sorted_vector` but no iteration support.
StableSet
A wrapper for FxHashSet that allows to `insert`, `remove`, `get` and convert a hashset into a sorted vector using the method `into_sorted_vector` but no iteration support.
Addresses issue #63713
2019-09-28 22:11:58 +02:00
ben
54bad93030
Add a couple more test cases, including non-ascii strings.
2019-09-29 08:39:48 +13:00
Andre Bogus
e77dfa27ca
Slice docs: fix typo
2019-09-28 21:02:51 +02:00
Esteban Küber
c861e24e72
clean up
2019-09-28 09:56:28 -07:00
Esteban Küber
ae51953e80
review comments
2019-09-28 09:56:28 -07:00
Esteban Küber
8a167edbca
Point at enclosing match when expecting ()
in arm
...
When encountering code like the following:
```rust
fn main() {
match 3 {
4 => 1,
3 => {
println!("Yep it maches.");
2
}
_ => 2
}
println!("Bye!")
}
```
point at the enclosing `match` expression and suggest ignoring the
returned value:
```
error[E0308]: mismatched types
--> $DIR/match-needing-semi.rs:8:13
|
LL | / match 3 {
LL | | 4 => 1,
LL | | 3 => {
LL | | 2
| | ^ expected (), found integer
LL | | }
LL | | _ => 2
LL | | }
| | -- help: consider using a semicolon here
| |_____|
| expected this to be `()`
|
= note: expected type `()`
found type `{integer}
```
Fix #40799 .
2019-09-28 09:56:28 -07:00
Mahmut Bulut
c666bd5570
Fix typo in intrinsics op safety
2019-09-28 18:24:05 +02:00
Eric Huss
f6ceccea93
Upgrade async/await to "used" keywords.
2019-09-28 09:15:06 -07:00
bors
488381ce9e
Auto merge of #64419 - wesleywiser:const_prop_use_ecx, r=oli-obk
...
Deduplicate some code between miri and const prop
r? @oli-obk
2019-09-28 15:54:12 +00:00
Mark Rousskov
14a5aefb01
Switch over all StableHash impls to new format
2019-09-28 11:47:36 -04:00
Mark Rousskov
f60e58e575
StableHasher does not need to be generic over the Result type
2019-09-28 11:47:15 -04:00
Eduard-Mihai Burtescu
057f23d3dd
rustc_codegen_ssa: remove redundant va_list_ref
field from FunctionCx
.
2019-09-28 17:39:00 +03:00
Eduard-Mihai Burtescu
a88d181a02
rustc: rely on c_variadic == true instead of CVarArgs in HIR/Ty fn signatures.
2019-09-28 17:39:00 +03:00
Eduard-Mihai Burtescu
7683d1c3aa
rustc: don't store a lifetime in hir::TyKind::CVarArgs.
2019-09-28 17:39:00 +03:00
Eduard-Mihai Burtescu
8a9d775888
syntax: don't keep a redundant c_variadic flag in the AST.
2019-09-28 17:38:59 +03:00
Dylan MacKenzie
0bf1a80b32
Rename sty
to kind
...
Picks up changes made in #64513
2019-09-28 07:20:12 -07:00
Dylan MacKenzie
ff4158abf2
Bless miri unleashed output
2019-09-28 07:06:52 -07:00
Dylan MacKenzie
f2e7faf153
Revert "Use conservative, type-based qualifcation for statics"
...
This reverts commit ac7a343cef8287427a98b9210cdb1a772486be10.
2019-09-28 07:06:52 -07:00
Dylan MacKenzie
8bfe82bfad
Correct IndirectlyMutableLocals
docs
2019-09-28 07:06:52 -07:00
Dylan MacKenzie
a302055caa
Mask results from flow-sensitive resolver with in_any_value_of_ty
...
We relied previously on the caller (e.g. `Q::in_operand`) to ignore
`Local`s that were indirectly mutable (and thus assumed to be
qualified). However, it's much clearer (and more efficient) to do this
in the resolver itself.
This does not yet remove the masking done in `Q::in_operand` and others
for safety's sake, although I believe that should now be possible.
2019-09-28 07:06:52 -07:00
Dylan MacKenzie
ff6faabda7
Add description for every module in check_consts
2019-09-28 07:06:52 -07:00
Dylan MacKenzie
713ec152fc
Share IndirectlyMutableLocals
results via reference
2019-09-28 07:06:52 -07:00
Dylan MacKenzie
1a14d17c4d
Require fmt::Debug
to implement NonConstOp
2019-09-28 07:06:52 -07:00
Dylan MacKenzie
dcecefcb71
Use conservative, type-based qualifcation for statics
2019-09-28 07:06:52 -07:00
Dylan MacKenzie
2f5ea633d4
Return a bool
from in_any_value_of_ty
...
The `Option` was only used for the promotion qualifiers, so we can use a
simpler API for validation.
2019-09-28 07:06:52 -07:00
Dylan MacKenzie
406ac2e14b
Give usage instructions IndirectlyMutableLocals
docs
2019-09-28 07:06:52 -07:00
Dylan MacKenzie
bc7928a507
Trigger ICE on nightly if validators disagree
...
Also adds an unstable flag to disable the ICE
(`-Zsuppress-const-validation-back-compat-ice`) so that nightly users do
not have to revert to a previous nightly if their code causes
disagreement between the validators.
2019-09-28 07:06:52 -07:00
Dylan MacKenzie
93ee7791b6
Explain why visit_terminator
does nothing for IndirectlyMutableLocals
2019-09-28 07:06:52 -07:00
Dylan MacKenzie
b3e59bb291
Move non-const ops into their own module
2019-09-28 07:06:52 -07:00
Dylan MacKenzie
e296436ee0
Remember to replace ICE with some form of warning
2019-09-28 07:06:52 -07:00
Dylan MacKenzie
f2ff425622
Add rationale for suppress_errors
flag
2019-09-28 07:06:52 -07:00
Dylan MacKenzie
27bd84916c
Correct list of miri-supported operations
...
Heap allocations are out, indirect `fn` calls are in!
2019-09-28 07:06:52 -07:00
Dylan MacKenzie
670c84dde3
Fix tests broken by more consistent miri unleashed warnings
2019-09-28 07:06:52 -07:00
Dylan MacKenzie
c990243922
Run new validator in compare mode
2019-09-28 07:06:52 -07:00
Dylan MacKenzie
fc92d3b820
Add dataflow-based const validation
2019-09-28 07:06:52 -07:00
Dylan MacKenzie
3698d04fef
Pass current qualification state in a separate parameter
2019-09-28 07:06:52 -07:00
Dylan MacKenzie
908dcb80b7
Control whether a Qualif
is cleared on move
2019-09-28 07:06:51 -07:00
Dylan MacKenzie
3758e383a6
Remove reference to Mode::NonConstFn
in qualifs
...
This should have no effect on behavior since the validator is never run
in const contexts.
2019-09-28 07:06:51 -07:00
Dylan MacKenzie
48d3843be6
Add requisite imports and bitset to hold qualifs
2019-09-28 07:06:51 -07:00
Dylan MacKenzie
c2e121da08
Make new qualifs public
2019-09-28 07:06:51 -07:00
Dylan MacKenzie
3a5442a891
Remove unnecessary method
2019-09-28 07:06:51 -07:00
Dylan MacKenzie
eec93ca08c
Copy Qualif
to start work on new const validator
...
This is an exact copy of the `Qualif` trait from `qualify_consts.rs` and
its first two implementers, `HasMutInterior` and `NeedsDrop`.
2019-09-28 07:06:51 -07:00
Dylan MacKenzie
83a3e04ed0
Don't treat locals as mutably borrowed after they're dropped
2019-09-28 07:06:51 -07:00
Dylan MacKenzie
e81297d990
Add analysis to determine if a local is indirectly mutable
...
This adds a dataflow analysis that determines if a reference to a given
`Local` or part of a `Local` that would allow mutation exists before a
point in the CFG. If no such reference exists, we know for sure that
that `Local` cannot have been mutated via an indirect assignment or
function call.
2019-09-28 07:06:51 -07:00
Dylan MacKenzie
457c3aa672
Add additional const
tests
2019-09-28 07:06:51 -07:00
Dylan MacKenzie
717c64e188
Silence "skipping const checks" if outside a const context
2019-09-28 07:06:51 -07:00
Wojciech Baranowski
9ad99c30cb
Refactor into ban_nonexisting_field method
2019-09-28 15:49:51 +03:00
bors
18f00b9496
Auto merge of #64455 - GuillaumeGomez:long-error-explanation-E0531, r=Centril
...
Add Long error explanation for E0531
Part of #61137 .
2019-09-28 12:06:44 +00:00
Wesley Wiser
ba2d6c42fc
Fix lint-exceeding-bitshifts ui tests
2019-09-28 07:51:38 -04:00
Wesley Wiser
a99f255015
Allow reading non-mutable statics in const prop
2019-09-28 07:51:38 -04:00