-
Notifications
You must be signed in to change notification settings - Fork 12.7k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Auto merge of #80579 - RalfJung:no-fallible-promotion, r=oli-obk
avoid promoting division, modulo and indexing operations that could fail For division, `x / y` will still be promoted if `y` is a non-zero integer literal; however, `1/(1+1)` will not be promoted any more. While at it, also see if we can reject promoting floating-point arithmetic (which are [complicated](rust-lang/unsafe-code-guidelines#237) so maybe we should not promote them). This will need a crater run to see if there's code out there that relies on these things being promoted. If we can land this, promoteds in `fn`/`const fn` cannot fail to evaluate any more, which should let us do some simplifications in codegen/Miri! Cc rust-lang/rfcs#3027 Fixes #61821 r? `@oli-obk`
- Loading branch information
Showing
14 changed files
with
331 additions
and
333 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
34 changes: 21 additions & 13 deletions
34
src/test/ui/consts/const-eval/const-eval-query-stack.stderr
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,18 +1,26 @@ | ||
error: reaching this expression at runtime will panic or abort | ||
--> $DIR/const-eval-query-stack.rs:19:28 | ||
warning: any use of this value will cause an error | ||
--> $DIR/const-eval-query-stack.rs:20:16 | ||
| | ||
LL | let x: &'static i32 = &(1 / 0); | ||
| -^^^^^^^ | ||
| | | ||
| dividing by zero | ||
LL | const X: i32 = 1 / 0; | ||
| ---------------^^^^^- | ||
| | | ||
| attempt to divide `1_i32` by zero | ||
| | ||
note: the lint level is defined here | ||
--> $DIR/const-eval-query-stack.rs:19:8 | ||
| | ||
= note: `#[deny(const_err)]` on by default | ||
LL | #[warn(const_err)] | ||
| ^^^^^^^^^ | ||
|
||
error[E0080]: evaluation of constant expression failed | ||
--> $DIR/const-eval-query-stack.rs:23:27 | ||
| | ||
LL | let x: &'static i32 = &X; | ||
| ^- | ||
| | | ||
| referenced constant has errors | ||
query stack during panic: | ||
#0 [eval_to_allocation_raw] const-evaluating + checking `main::promoted[1]` | ||
#1 [eval_to_const_value_raw] simplifying constant for the type system `main::promoted[1]` | ||
#2 [eval_to_const_value_raw] simplifying constant for the type system `main::promoted[1]` | ||
#3 [normalize_generic_arg_after_erasing_regions] normalizing `main::promoted[1]` | ||
#4 [optimized_mir] optimizing MIR for `main` | ||
#5 [collect_and_partition_mono_items] collect_and_partition_mono_items | ||
#0 [normalize_generic_arg_after_erasing_regions] normalizing `main::promoted[1]` | ||
#1 [optimized_mir] optimizing MIR for `main` | ||
#2 [collect_and_partition_mono_items] collect_and_partition_mono_items | ||
end of query stack |
Oops, something went wrong.