bors
62e4e08f4c
Auto merge of #53163 - oli-obk:const_prop_ice, r=nikomatsakis
...
Remove an overly pedantic and wrong assertion
fixes #53157
fixes #53087
2018-08-08 20:16:25 +00:00
Oliver Schneider
8935f99833
Fix tidy
2018-08-07 19:51:38 +02:00
Oliver Schneider
afcbc2e90f
Remove an overly pedantic and wrong assertion
2018-08-07 18:37:50 +02:00
Oliver Schneider
4b731a908b
Fix tidy
2018-08-07 14:41:33 +02:00
Oliver Schneider
a091a6567c
Make sure the feature gate actually works and never allows promoting these operations
2018-08-07 14:41:33 +02:00
Oliver Schneider
1fc7580a8e
Rebase fallout: new tests need updated ui output
2018-08-07 14:41:33 +02:00
Oliver Schneider
07e2dd7d96
Don't accidentally promote union access in MIR
2018-08-07 14:41:33 +02:00
Oliver Schneider
fee07534bb
Add feature gate checks
2018-08-07 14:41:33 +02:00
Oliver Schneider
3ef863bfdf
Place unions, pointer casts and pointer derefs behind extra feature gates
2018-08-07 14:41:33 +02:00
Oliver Schneider
c8e30c4295
Reading values should not be looking at the variant
2018-08-02 10:19:37 +02:00
Oliver Schneider
2c836a7ebd
Fallout from fixing try_read_value to work with enums
2018-08-01 15:30:29 +02:00
Oliver Schneider
d0b315f262
Fix try_read_value not working for enums
2018-08-01 15:29:35 +02:00
Oliver Schneider
3e8337eb3d
Move a test that depends on the arch bitwidth to compile-fail
2018-07-29 20:24:26 +02:00
Oliver Schneider
9377041de9
Sanity-check all constants
2018-07-29 20:22:15 +02:00
bors
419e60ee9d
Auto merge of #52673 - oli-obk:mutable_promoted, r=nagisa,cramertj,estebank
...
Try to fix an ICE
might fix #52671
2018-07-26 22:20:17 +00:00
Oliver Schneider
01d4cd5aae
0-length arrays can even be mutably promoted
2018-07-25 14:09:06 +02:00
Oliver Schneider
ef5fba0067
Hide some lints which are not quite right the way they are reported to the user
2018-07-25 13:05:05 +02:00
Oliver Schneider
de511438cd
Promoteds are statics and statics have a place, not just a value
2018-07-23 09:51:30 +02:00
bors
02b0479c26
Auto merge of #52568 - oli-obk:span_bug_error, r=varkor
...
Fix loop label resolution around constants
And make `delay_span_bug` a little more helpful
r? @varkor
fixes #52442
fixes #52443
2018-07-23 01:02:32 +00:00
bors
3d51086303
Auto merge of #52394 - estebank:println, r=oli-obk
...
Improve suggestion for missing fmt str in println
Avoid using `concat!(fmt, "\n")` to improve the diagnostics being
emitted when the first `println!()` argument isn't a formatting string
literal.
Fix #52347 .
2018-07-22 06:52:48 +00:00
Oliver Schneider
e93635325b
Properly scope label resolution
2018-07-20 16:18:22 +02:00
Esteban Küber
f53c145ef1
Improve suggestion for missing fmt str in println
...
Avoid using `concat!(fmt, "\n")` to improve the diagnostics being
emitted when the first `println!()` argument isn't a formatting string
literal.
2018-07-19 23:18:07 -07:00
Oliver Schneider
9329957d32
Const-propagate casts
2018-07-18 18:52:43 +02:00
Ralf Jung
f9825c215b
fix line numbers
2018-07-15 20:42:18 +02:00
Ralf Jung
03b9020155
add license text
2018-07-15 14:26:31 +02:00
Ralf Jung
5be74148c2
add test case
2018-07-15 13:56:37 +02:00
bors
d573fe1778
Auto merge of #51702 - ecstatic-morse:infinite-loop-detection, r=oli-obk
...
Infinite loop detection for const evaluation
Resolves #50637 .
An `EvalContext` stores the transient state (stack, heap, etc.) of the MIRI virtual machine while it executing code. As long as MIRI only executes pure functions, we can detect if a program is in a state where it will never terminate by periodically taking a "snapshot" of this transient state and comparing it to previous ones. If any two states are exactly equal, the machine must be in an infinite loop.
Instead of fully cloning a snapshot every time the detector is run, we store a snapshot's hash. Only when a hash collision occurs do we fully clone the interpreter state. Future snapshots which cause a collision will be compared against this clone, causing the interpreter to abort if they are equal.
At the moment, snapshots are not taken until MIRI has progressed a certain amount. After this threshold, snapshots are taken every `DETECTOR_SNAPSHOT_PERIOD` steps. This means that an infinite loop with period `P` will be detected after a maximum of `2 * P * DETECTOR_SNAPSHOT_PERIOD` interpreter steps. The factor of 2 arises because we only clone a snapshot after it causes a hash collision.
2018-07-11 16:24:46 +00:00
Dylan MacKenzie
c395044a50
Shorten error message and add link to test
...
Implements @bjorn3's suggestions.
2018-07-04 14:36:07 -07:00
Dylan MacKenzie
647ba29b90
Explain reason behind error span
...
We can't expand the span of the error reliably according to @oli-obk, so
just mention why it points to this particular expression.
2018-07-04 14:36:07 -07:00
Dylan MacKenzie
d36302da53
Add a UI test for #50637
...
This test relies on the fact that restrictions on expressions in `const
fn` do not apply when computing array lengths. It is more difficult to
statically analyze than the simple `loop{}` mentioned in #50637 .
This test should be updated to ignore the warning after #49980 is resolved.
2018-07-04 14:36:07 -07:00
Oliver Schneider
1eeb5dcb67
Deduplicate error reports for statics
2018-07-03 12:03:47 +02:00
Mark Rousskov
7b8fc87733
Rollup merge of #51839 - oli-obk:const_shift_overflow, r=nikomatsakis
...
Detect overflows of non u32 shifts
2018-06-28 16:07:14 -06:00
Oliver Schneider
4d473300a2
Turn the use of erroneous constants into errors again
2018-06-28 11:04:26 +02:00
Oliver Schneider
4eea1a4e5e
Don't const propagate the body of constants
2018-06-28 11:04:25 +02:00
Oliver Schneider
89d8e0a260
Don't use ParamEnv::reveal_all() if there is a real one available
2018-06-27 18:24:24 +02:00
Oliver Schneider
0fa166ad7f
Detect overflows of non u32 shifts
2018-06-27 13:47:19 +02:00
Zack M. Davis
057715557b
migrate codebase to ..= inclusive range patterns
...
These were stabilized in March 2018's #47813 , and are the Preferred Way
to Do It going forward (q.v. #51043 ).
2018-06-26 07:53:30 -07:00
Oliver Schneider
14d08e5371
Rebase fallout
2018-06-05 21:08:43 +02:00
Oliver Schneider
13a55e8801
Satisfy the untiring tidy
2018-06-05 20:49:47 +02:00
Oliver Schneider
78d48867da
Properly report transitive errors
2018-06-05 20:49:47 +02:00
Oliver Schneider
9cb47de813
Referring to erroneous constants in promoteds must abort the build
2018-06-05 20:49:46 +02:00
Oliver Schneider
5c0d1355f2
Refactor the const eval diagnostic API
2018-06-05 20:49:46 +02:00
Fabian Zaiser
29c43fea37
Fix tidy
2018-06-05 10:35:44 +02:00
Fabian Zaiser
589f9a87a8
Propagate uses of constants correctly so that array index checks work
2018-06-05 10:35:44 +02:00
bors
c610be92e2
Auto merge of #51307 - oli-obk:miri_fixes, r=eddyb
...
ScalarPairs are offset==0 field + other non-zst field
r? @eddyb
fixes #51300
2018-06-04 23:10:15 +00:00
Oliver Schneider
9d613c27b7
Do not promote union field accesses
2018-06-03 19:06:31 +02:00
Oliver Schneider
47f37d67f1
Correctly access ScalarPair fields during const eval
2018-06-02 23:34:25 +02:00
bors
990d8aa743
Auto merge of #50967 - oli-obk:miri_api_refactor, r=eddyb
...
Miri api refactor
r? @eddyb
cc @Zoxc
based on https://github.com/rust-lang/rust/pull/50916
2018-05-25 13:59:48 +00:00
Oliver Schneider
5f599bb490
Adjust test for 32 bit targets
2018-05-25 15:13:54 +02:00
Oliver Schneider
d0610fd26e
Add missing newlines
2018-05-24 20:49:38 +02:00