-
Notifications
You must be signed in to change notification settings - Fork 492
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Document that unary negation of a signed integer literal cannot cause an overflow error #1188
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks, this seems like a good improvement!
I want to be cognizant that my suggestion my seem like it is rewriting most of the PR. I hope it doesn't seem that way. I intended to just add a little bit to it, but that ended up shuffling the sentences around a bit.
src/expressions/operator-expr.md
Outdated
> **Note**: The exception for literal expressions behind unary `-` means that forms such as `-128_i8` or `let j: i8 = -(128)` never cause a panic. | ||
> | ||
> In these cases, the literal expression already has the most negative value for its type (for example, `128_i8` has the value -128), and two's complement overflow conventions mean the unary negation leaves the value unchanged, so the expression as a whole has the expected value. | ||
> | ||
> In rustc, these expressions are also ignored by the `overflowing_literals` lint check. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I initially found this a little confusing because this seems to focus on the "most negative" aspect without reminding the reader that all integer literals are allowed to overflow. Perhaps a change like the following could help? My thinking is that a reader interested in Rust's overflowing behavior might be reading this section. So it would be good to guide them to additional information that might make it clearer.
> **Note**: The exception for literal expressions behind unary `-` means that forms such as `-128_i8` or `let j: i8 = -(128)` never cause a panic. | |
> | |
> In these cases, the literal expression already has the most negative value for its type (for example, `128_i8` has the value -128), and two's complement overflow conventions mean the unary negation leaves the value unchanged, so the expression as a whole has the expected value. | |
> | |
> In rustc, these expressions are also ignored by the `overflowing_literals` lint check. | |
> **Note**: The exception for literal expressions behind unary `-` means that forms such as `-128_i8` or `let j: i8 = -(128)` never cause a panic and have the expected value of -128. | |
> | |
> In these cases, the literal expression already has the most negative value for its type (for example, `128_i8` has the value -128) because integer literals are truncated to their type per the description in [Integer literal expressions][literal expression]. | |
> Negation of these most negative values leaves the value unchanged due to two's complement overflow conventions. | |
> | |
> In `rustc`, these most negative expressions are also ignored by the `overflowing_literals` lint check. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I agree, that's clearer. I've pushed that change.
… an overflow error
01bdb20
to
89a81e8
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks!
Update books ## nomicon 1 commits in 11f1165e8a2f5840467e748c8108dc53c948ee9a..c7d8467ca9158da58ef295ae65dbf00a308752d9 2022-03-19 16:02:00 -0400 to 2022-04-06 14:26:54 +0900 - Change "writers" to "readers" for Deref. (rust-lang/nomicon#346) ## reference 7 commits in c97d14fa6fed0baa9255432b8a93cb70614f80e3..b5f6c2362baf932db9440fbfcb509b309237ee85 2022-03-19 18:18:10 -0700 to 2022-04-10 19:19:51 -0700 - Fix typo: `?` should be inside `<sup>` tags (rust-lang/reference#1190) - Update aarch64 to use neon as fp (rust-lang/reference#1184) - Boolean literal expressions (rust-lang/reference#1189) - Document that unary negation of a signed integer literal cannot cause an overflow error (rust-lang/reference#1188) - Document compatibility between declarative and procedural macro tokens (rust-lang/reference#1169) - Document native library modifier syntax and the `whole-archive` modifier specifically (rust-lang/reference#1170) - Numeric literal expressions and literal suffixes (rust-lang/reference#1177) ## book 8 commits in ea90bbaf53ba64ef4e2da9ac2352b298aec6bec8..765318b844569a642ceef7bf1adab9639cbf6af3 2022-03-28 21:59:34 -0400 to 2022-04-12 21:14:47 -0400 - Propagate nostarch edits to src - Propagate updated test example code to nostarch snapshot - Edits to nostarch edits - edits from nostarch - Fix error message for the example code - update ch13-02 to reflect changes in rust-lang/book#2797 - Update to 1.59 - Edits to chapter 2 after tech review ## rust-by-example 4 commits in ec954f35eedf592cd173b21c05a7f80a65b61d8a..c2a98d9fc5d29c481d42052fbeccfde15ed03116 2022-03-22 11:09:06 -0300 to 2022-04-08 06:44:18 -0300 - Code highlight a variable (rust-lang/rust-by-example#1530) - Add a comment to note that warnings may not be shown in a browser in the Variable Bindings section (rust-lang/rust-by-example#1529) - Make all new types have UpperCamelCase names in code example in the Aliasing section (rust-lang/rust-by-example#1528) - Replace `C` with C/C++ (rust-lang/rust-by-example#1527) ## rustc-dev-guide 6 commits in 155126b1d2e2cb01ddb1d7ba9489b90d7cd173ad..eeb5a83c15b6ae60df3e4f19207376b22c6fbc4c 2022-03-22 14:34:21 +0100 to 2022-04-11 23:29:48 +0900 - method-lookup.md improvements (rust-lang/rustc-dev-guide#1296) - Consolidate crates.io convention section (rust-lang/rustc-dev-guide#1326) - Update examples with 1.61.0-nightly (latest version) (rust-lang/rustc-dev-guide#1330) - r-a: Use `python3 x.py` instead of `./x.py` (rust-lang/rustc-dev-guide#1335) - Update miri.md: correct a minor typo (rust-lang/rustc-dev-guide#1334) - Add example how lints can be feature gated
Update books ## nomicon 1 commits in 11f1165e8a2f5840467e748c8108dc53c948ee9a..c7d8467ca9158da58ef295ae65dbf00a308752d9 2022-03-19 16:02:00 -0400 to 2022-04-06 14:26:54 +0900 - Change "writers" to "readers" for Deref. (rust-lang/nomicon#346) ## reference 7 commits in c97d14fa6fed0baa9255432b8a93cb70614f80e3..b5f6c2362baf932db9440fbfcb509b309237ee85 2022-03-19 18:18:10 -0700 to 2022-04-10 19:19:51 -0700 - Fix typo: `?` should be inside `<sup>` tags (rust-lang/reference#1190) - Update aarch64 to use neon as fp (rust-lang/reference#1184) - Boolean literal expressions (rust-lang/reference#1189) - Document that unary negation of a signed integer literal cannot cause an overflow error (rust-lang/reference#1188) - Document compatibility between declarative and procedural macro tokens (rust-lang/reference#1169) - Document native library modifier syntax and the `whole-archive` modifier specifically (rust-lang/reference#1170) - Numeric literal expressions and literal suffixes (rust-lang/reference#1177) ## book 8 commits in ea90bbaf53ba64ef4e2da9ac2352b298aec6bec8..765318b844569a642ceef7bf1adab9639cbf6af3 2022-03-28 21:59:34 -0400 to 2022-04-12 21:14:47 -0400 - Propagate nostarch edits to src - Propagate updated test example code to nostarch snapshot - Edits to nostarch edits - edits from nostarch - Fix error message for the example code - update ch13-02 to reflect changes in rust-lang/book#2797 - Update to 1.59 - Edits to chapter 2 after tech review ## rust-by-example 4 commits in ec954f35eedf592cd173b21c05a7f80a65b61d8a..c2a98d9fc5d29c481d42052fbeccfde15ed03116 2022-03-22 11:09:06 -0300 to 2022-04-08 06:44:18 -0300 - Code highlight a variable (rust-lang/rust-by-example#1530) - Add a comment to note that warnings may not be shown in a browser in the Variable Bindings section (rust-lang/rust-by-example#1529) - Make all new types have UpperCamelCase names in code example in the Aliasing section (rust-lang/rust-by-example#1528) - Replace `C` with C/C++ (rust-lang/rust-by-example#1527) ## rustc-dev-guide 6 commits in 155126b1d2e2cb01ddb1d7ba9489b90d7cd173ad..eeb5a83c15b6ae60df3e4f19207376b22c6fbc4c 2022-03-22 14:34:21 +0100 to 2022-04-11 23:29:48 +0900 - method-lookup.md improvements (rust-lang/rustc-dev-guide#1296) - Consolidate crates.io convention section (rust-lang/rustc-dev-guide#1326) - Update examples with 1.61.0-nightly (latest version) (rust-lang/rustc-dev-guide#1330) - r-a: Use `python3 x.py` instead of `./x.py` (rust-lang/rustc-dev-guide#1335) - Update miri.md: correct a minor typo (rust-lang/rustc-dev-guide#1334) - Add example how lints can be feature gated
Update books ## nomicon 1 commits in 11f1165e8a2f5840467e748c8108dc53c948ee9a..c7d8467ca9158da58ef295ae65dbf00a308752d9 2022-03-19 16:02:00 -0400 to 2022-04-06 14:26:54 +0900 - Change "writers" to "readers" for Deref. (rust-lang/nomicon#346) ## reference 7 commits in c97d14fa6fed0baa9255432b8a93cb70614f80e3..b5f6c2362baf932db9440fbfcb509b309237ee85 2022-03-19 18:18:10 -0700 to 2022-04-10 19:19:51 -0700 - Fix typo: `?` should be inside `<sup>` tags (rust-lang/reference#1190) - Update aarch64 to use neon as fp (rust-lang/reference#1184) - Boolean literal expressions (rust-lang/reference#1189) - Document that unary negation of a signed integer literal cannot cause an overflow error (rust-lang/reference#1188) - Document compatibility between declarative and procedural macro tokens (rust-lang/reference#1169) - Document native library modifier syntax and the `whole-archive` modifier specifically (rust-lang/reference#1170) - Numeric literal expressions and literal suffixes (rust-lang/reference#1177) ## book 8 commits in ea90bbaf53ba64ef4e2da9ac2352b298aec6bec8..765318b844569a642ceef7bf1adab9639cbf6af3 2022-03-28 21:59:34 -0400 to 2022-04-12 21:14:47 -0400 - Propagate nostarch edits to src - Propagate updated test example code to nostarch snapshot - Edits to nostarch edits - edits from nostarch - Fix error message for the example code - update ch13-02 to reflect changes in rust-lang/book#2797 - Update to 1.59 - Edits to chapter 2 after tech review ## rust-by-example 4 commits in ec954f35eedf592cd173b21c05a7f80a65b61d8a..c2a98d9fc5d29c481d42052fbeccfde15ed03116 2022-03-22 11:09:06 -0300 to 2022-04-08 06:44:18 -0300 - Code highlight a variable (rust-lang/rust-by-example#1530) - Add a comment to note that warnings may not be shown in a browser in the Variable Bindings section (rust-lang/rust-by-example#1529) - Make all new types have UpperCamelCase names in code example in the Aliasing section (rust-lang/rust-by-example#1528) - Replace `C` with C/C++ (rust-lang/rust-by-example#1527) ## rustc-dev-guide 6 commits in 155126b1d2e2cb01ddb1d7ba9489b90d7cd173ad..eeb5a83c15b6ae60df3e4f19207376b22c6fbc4c 2022-03-22 14:34:21 +0100 to 2022-04-11 23:29:48 +0900 - method-lookup.md improvements (rust-lang/rustc-dev-guide#1296) - Consolidate crates.io convention section (rust-lang/rustc-dev-guide#1326) - Update examples with 1.61.0-nightly (latest version) (rust-lang/rustc-dev-guide#1330) - r-a: Use `python3 x.py` instead of `./x.py` (rust-lang/rustc-dev-guide#1335) - Update miri.md: correct a minor typo (rust-lang/rustc-dev-guide#1334) - Add example how lints can be feature gated
Update books ## nomicon 1 commits in 11f1165e8a2f5840467e748c8108dc53c948ee9a..c7d8467ca9158da58ef295ae65dbf00a308752d9 2022-03-19 16:02:00 -0400 to 2022-04-06 14:26:54 +0900 - Change "writers" to "readers" for Deref. (rust-lang/nomicon#346) ## reference 7 commits in c97d14fa6fed0baa9255432b8a93cb70614f80e3..b5f6c2362baf932db9440fbfcb509b309237ee85 2022-03-19 18:18:10 -0700 to 2022-04-10 19:19:51 -0700 - Fix typo: `?` should be inside `<sup>` tags (rust-lang/reference#1190) - Update aarch64 to use neon as fp (rust-lang/reference#1184) - Boolean literal expressions (rust-lang/reference#1189) - Document that unary negation of a signed integer literal cannot cause an overflow error (rust-lang/reference#1188) - Document compatibility between declarative and procedural macro tokens (rust-lang/reference#1169) - Document native library modifier syntax and the `whole-archive` modifier specifically (rust-lang/reference#1170) - Numeric literal expressions and literal suffixes (rust-lang/reference#1177) ## book 8 commits in ea90bbaf53ba64ef4e2da9ac2352b298aec6bec8..765318b844569a642ceef7bf1adab9639cbf6af3 2022-03-28 21:59:34 -0400 to 2022-04-12 21:14:47 -0400 - Propagate nostarch edits to src - Propagate updated test example code to nostarch snapshot - Edits to nostarch edits - edits from nostarch - Fix error message for the example code - update ch13-02 to reflect changes in rust-lang/book#2797 - Update to 1.59 - Edits to chapter 2 after tech review ## rust-by-example 4 commits in ec954f35eedf592cd173b21c05a7f80a65b61d8a..c2a98d9fc5d29c481d42052fbeccfde15ed03116 2022-03-22 11:09:06 -0300 to 2022-04-08 06:44:18 -0300 - Code highlight a variable (rust-lang/rust-by-example#1530) - Add a comment to note that warnings may not be shown in a browser in the Variable Bindings section (rust-lang/rust-by-example#1529) - Make all new types have UpperCamelCase names in code example in the Aliasing section (rust-lang/rust-by-example#1528) - Replace `C` with C/C++ (rust-lang/rust-by-example#1527) ## rustc-dev-guide 6 commits in 155126b1d2e2cb01ddb1d7ba9489b90d7cd173ad..eeb5a83c15b6ae60df3e4f19207376b22c6fbc4c 2022-03-22 14:34:21 +0100 to 2022-04-11 23:29:48 +0900 - method-lookup.md improvements (rust-lang/rustc-dev-guide#1296) - Consolidate crates.io convention section (rust-lang/rustc-dev-guide#1326) - Update examples with 1.61.0-nightly (latest version) (rust-lang/rustc-dev-guide#1330) - r-a: Use `python3 x.py` instead of `./x.py` (rust-lang/rustc-dev-guide#1335) - Update miri.md: correct a minor typo (rust-lang/rustc-dev-guide#1334) - Add example how lints can be feature gated
Update books ## nomicon 1 commits in 11f1165e8a2f5840467e748c8108dc53c948ee9a..c7d8467ca9158da58ef295ae65dbf00a308752d9 2022-03-19 16:02:00 -0400 to 2022-04-06 14:26:54 +0900 - Change "writers" to "readers" for Deref. (rust-lang/nomicon#346) ## reference 7 commits in c97d14fa6fed0baa9255432b8a93cb70614f80e3..b5f6c2362baf932db9440fbfcb509b309237ee85 2022-03-19 18:18:10 -0700 to 2022-04-10 19:19:51 -0700 - Fix typo: `?` should be inside `<sup>` tags (rust-lang/reference#1190) - Update aarch64 to use neon as fp (rust-lang/reference#1184) - Boolean literal expressions (rust-lang/reference#1189) - Document that unary negation of a signed integer literal cannot cause an overflow error (rust-lang/reference#1188) - Document compatibility between declarative and procedural macro tokens (rust-lang/reference#1169) - Document native library modifier syntax and the `whole-archive` modifier specifically (rust-lang/reference#1170) - Numeric literal expressions and literal suffixes (rust-lang/reference#1177) ## book 8 commits in ea90bbaf53ba64ef4e2da9ac2352b298aec6bec8..765318b844569a642ceef7bf1adab9639cbf6af3 2022-03-28 21:59:34 -0400 to 2022-04-12 21:14:47 -0400 - Propagate nostarch edits to src - Propagate updated test example code to nostarch snapshot - Edits to nostarch edits - edits from nostarch - Fix error message for the example code - update ch13-02 to reflect changes in rust-lang/book#2797 - Update to 1.59 - Edits to chapter 2 after tech review ## rust-by-example 4 commits in ec954f35eedf592cd173b21c05a7f80a65b61d8a..c2a98d9fc5d29c481d42052fbeccfde15ed03116 2022-03-22 11:09:06 -0300 to 2022-04-08 06:44:18 -0300 - Code highlight a variable (rust-lang/rust-by-example#1530) - Add a comment to note that warnings may not be shown in a browser in the Variable Bindings section (rust-lang/rust-by-example#1529) - Make all new types have UpperCamelCase names in code example in the Aliasing section (rust-lang/rust-by-example#1528) - Replace `C` with C/C++ (rust-lang/rust-by-example#1527) ## rustc-dev-guide 6 commits in 155126b1d2e2cb01ddb1d7ba9489b90d7cd173ad..eeb5a83c15b6ae60df3e4f19207376b22c6fbc4c 2022-03-22 14:34:21 +0100 to 2022-04-11 23:29:48 +0900 - method-lookup.md improvements (rust-lang/rustc-dev-guide#1296) - Consolidate crates.io convention section (rust-lang/rustc-dev-guide#1326) - Update examples with 1.61.0-nightly (latest version) (rust-lang/rustc-dev-guide#1330) - r-a: Use `python3 x.py` instead of `./x.py` (rust-lang/rustc-dev-guide#1335) - Update miri.md: correct a minor typo (rust-lang/rustc-dev-guide#1334) - Add example how lints can be feature gated
Update books ## nomicon 1 commits in 11f1165e8a2f5840467e748c8108dc53c948ee9a..c7d8467ca9158da58ef295ae65dbf00a308752d9 2022-03-19 16:02:00 -0400 to 2022-04-06 14:26:54 +0900 - Change "writers" to "readers" for Deref. (rust-lang/nomicon#346) ## reference 7 commits in c97d14fa6fed0baa9255432b8a93cb70614f80e3..b5f6c2362baf932db9440fbfcb509b309237ee85 2022-03-19 18:18:10 -0700 to 2022-04-10 19:19:51 -0700 - Fix typo: `?` should be inside `<sup>` tags (rust-lang/reference#1190) - Update aarch64 to use neon as fp (rust-lang/reference#1184) - Boolean literal expressions (rust-lang/reference#1189) - Document that unary negation of a signed integer literal cannot cause an overflow error (rust-lang/reference#1188) - Document compatibility between declarative and procedural macro tokens (rust-lang/reference#1169) - Document native library modifier syntax and the `whole-archive` modifier specifically (rust-lang/reference#1170) - Numeric literal expressions and literal suffixes (rust-lang/reference#1177) ## book 8 commits in ea90bbaf53ba64ef4e2da9ac2352b298aec6bec8..765318b844569a642ceef7bf1adab9639cbf6af3 2022-03-28 21:59:34 -0400 to 2022-04-12 21:14:47 -0400 - Propagate nostarch edits to src - Propagate updated test example code to nostarch snapshot - Edits to nostarch edits - edits from nostarch - Fix error message for the example code - update ch13-02 to reflect changes in rust-lang/book#2797 - Update to 1.59 - Edits to chapter 2 after tech review ## rust-by-example 4 commits in ec954f35eedf592cd173b21c05a7f80a65b61d8a..c2a98d9fc5d29c481d42052fbeccfde15ed03116 2022-03-22 11:09:06 -0300 to 2022-04-08 06:44:18 -0300 - Code highlight a variable (rust-lang/rust-by-example#1530) - Add a comment to note that warnings may not be shown in a browser in the Variable Bindings section (rust-lang/rust-by-example#1529) - Make all new types have UpperCamelCase names in code example in the Aliasing section (rust-lang/rust-by-example#1528) - Replace `C` with C/C++ (rust-lang/rust-by-example#1527) ## rustc-dev-guide 6 commits in 155126b1d2e2cb01ddb1d7ba9489b90d7cd173ad..eeb5a83c15b6ae60df3e4f19207376b22c6fbc4c 2022-03-22 14:34:21 +0100 to 2022-04-11 23:29:48 +0900 - method-lookup.md improvements (rust-lang/rustc-dev-guide#1296) - Consolidate crates.io convention section (rust-lang/rustc-dev-guide#1326) - Update examples with 1.61.0-nightly (latest version) (rust-lang/rustc-dev-guide#1330) - r-a: Use `python3 x.py` instead of `./x.py` (rust-lang/rustc-dev-guide#1335) - Update miri.md: correct a minor typo (rust-lang/rustc-dev-guide#1334) - Add example how lints can be feature gated
Update books ## nomicon 1 commits in 11f1165e8a2f5840467e748c8108dc53c948ee9a..c7d8467ca9158da58ef295ae65dbf00a308752d9 2022-03-19 16:02:00 -0400 to 2022-04-06 14:26:54 +0900 - Change "writers" to "readers" for Deref. (rust-lang/nomicon#346) ## reference 7 commits in c97d14fa6fed0baa9255432b8a93cb70614f80e3..b5f6c2362baf932db9440fbfcb509b309237ee85 2022-03-19 18:18:10 -0700 to 2022-04-10 19:19:51 -0700 - Fix typo: `?` should be inside `<sup>` tags (rust-lang/reference#1190) - Update aarch64 to use neon as fp (rust-lang/reference#1184) - Boolean literal expressions (rust-lang/reference#1189) - Document that unary negation of a signed integer literal cannot cause an overflow error (rust-lang/reference#1188) - Document compatibility between declarative and procedural macro tokens (rust-lang/reference#1169) - Document native library modifier syntax and the `whole-archive` modifier specifically (rust-lang/reference#1170) - Numeric literal expressions and literal suffixes (rust-lang/reference#1177) ## book 8 commits in ea90bbaf53ba64ef4e2da9ac2352b298aec6bec8..765318b844569a642ceef7bf1adab9639cbf6af3 2022-03-28 21:59:34 -0400 to 2022-04-12 21:14:47 -0400 - Propagate nostarch edits to src - Propagate updated test example code to nostarch snapshot - Edits to nostarch edits - edits from nostarch - Fix error message for the example code - update ch13-02 to reflect changes in rust-lang/book#2797 - Update to 1.59 - Edits to chapter 2 after tech review ## rust-by-example 4 commits in ec954f35eedf592cd173b21c05a7f80a65b61d8a..c2a98d9fc5d29c481d42052fbeccfde15ed03116 2022-03-22 11:09:06 -0300 to 2022-04-08 06:44:18 -0300 - Code highlight a variable (rust-lang/rust-by-example#1530) - Add a comment to note that warnings may not be shown in a browser in the Variable Bindings section (rust-lang/rust-by-example#1529) - Make all new types have UpperCamelCase names in code example in the Aliasing section (rust-lang/rust-by-example#1528) - Replace `C` with C/C++ (rust-lang/rust-by-example#1527) ## rustc-dev-guide 6 commits in 155126b1d2e2cb01ddb1d7ba9489b90d7cd173ad..eeb5a83c15b6ae60df3e4f19207376b22c6fbc4c 2022-03-22 14:34:21 +0100 to 2022-04-11 23:29:48 +0900 - method-lookup.md improvements (rust-lang/rustc-dev-guide#1296) - Consolidate crates.io convention section (rust-lang/rustc-dev-guide#1326) - Update examples with 1.61.0-nightly (latest version) (rust-lang/rustc-dev-guide#1330) - r-a: Use `python3 x.py` instead of `./x.py` (rust-lang/rustc-dev-guide#1335) - Update miri.md: correct a minor typo (rust-lang/rustc-dev-guide#1334) - Add example how lints can be feature gated
Update books ## nomicon 1 commits in 11f1165e8a2f5840467e748c8108dc53c948ee9a..c7d8467ca9158da58ef295ae65dbf00a308752d9 2022-03-19 16:02:00 -0400 to 2022-04-06 14:26:54 +0900 - Change "writers" to "readers" for Deref. (rust-lang/nomicon#346) ## reference 7 commits in c97d14fa6fed0baa9255432b8a93cb70614f80e3..b5f6c2362baf932db9440fbfcb509b309237ee85 2022-03-19 18:18:10 -0700 to 2022-04-10 19:19:51 -0700 - Fix typo: `?` should be inside `<sup>` tags (rust-lang/reference#1190) - Update aarch64 to use neon as fp (rust-lang/reference#1184) - Boolean literal expressions (rust-lang/reference#1189) - Document that unary negation of a signed integer literal cannot cause an overflow error (rust-lang/reference#1188) - Document compatibility between declarative and procedural macro tokens (rust-lang/reference#1169) - Document native library modifier syntax and the `whole-archive` modifier specifically (rust-lang/reference#1170) - Numeric literal expressions and literal suffixes (rust-lang/reference#1177) ## book 8 commits in ea90bbaf53ba64ef4e2da9ac2352b298aec6bec8..765318b844569a642ceef7bf1adab9639cbf6af3 2022-03-28 21:59:34 -0400 to 2022-04-12 21:14:47 -0400 - Propagate nostarch edits to src - Propagate updated test example code to nostarch snapshot - Edits to nostarch edits - edits from nostarch - Fix error message for the example code - update ch13-02 to reflect changes in rust-lang/book#2797 - Update to 1.59 - Edits to chapter 2 after tech review ## rust-by-example 4 commits in ec954f35eedf592cd173b21c05a7f80a65b61d8a..c2a98d9fc5d29c481d42052fbeccfde15ed03116 2022-03-22 11:09:06 -0300 to 2022-04-08 06:44:18 -0300 - Code highlight a variable (rust-lang/rust-by-example#1530) - Add a comment to note that warnings may not be shown in a browser in the Variable Bindings section (rust-lang/rust-by-example#1529) - Make all new types have UpperCamelCase names in code example in the Aliasing section (rust-lang/rust-by-example#1528) - Replace `C` with C/C++ (rust-lang/rust-by-example#1527) ## rustc-dev-guide 6 commits in 155126b1d2e2cb01ddb1d7ba9489b90d7cd173ad..eeb5a83c15b6ae60df3e4f19207376b22c6fbc4c 2022-03-22 14:34:21 +0100 to 2022-04-11 23:29:48 +0900 - method-lookup.md improvements (rust-lang/rustc-dev-guide#1296) - Consolidate crates.io convention section (rust-lang/rustc-dev-guide#1326) - Update examples with 1.61.0-nightly (latest version) (rust-lang/rustc-dev-guide#1330) - r-a: Use `python3 x.py` instead of `./x.py` (rust-lang/rustc-dev-guide#1335) - Update miri.md: correct a minor typo (rust-lang/rustc-dev-guide#1334) - Add example how lints can be feature gated
Update books ## nomicon 1 commits in 11f1165e8a2f5840467e748c8108dc53c948ee9a..c7d8467ca9158da58ef295ae65dbf00a308752d9 2022-03-19 16:02:00 -0400 to 2022-04-06 14:26:54 +0900 - Change "writers" to "readers" for Deref. (rust-lang/nomicon#346) ## reference 7 commits in c97d14fa6fed0baa9255432b8a93cb70614f80e3..b5f6c2362baf932db9440fbfcb509b309237ee85 2022-03-19 18:18:10 -0700 to 2022-04-10 19:19:51 -0700 - Fix typo: `?` should be inside `<sup>` tags (rust-lang/reference#1190) - Update aarch64 to use neon as fp (rust-lang/reference#1184) - Boolean literal expressions (rust-lang/reference#1189) - Document that unary negation of a signed integer literal cannot cause an overflow error (rust-lang/reference#1188) - Document compatibility between declarative and procedural macro tokens (rust-lang/reference#1169) - Document native library modifier syntax and the `whole-archive` modifier specifically (rust-lang/reference#1170) - Numeric literal expressions and literal suffixes (rust-lang/reference#1177) ## book 8 commits in ea90bbaf53ba64ef4e2da9ac2352b298aec6bec8..765318b844569a642ceef7bf1adab9639cbf6af3 2022-03-28 21:59:34 -0400 to 2022-04-12 21:14:47 -0400 - Propagate nostarch edits to src - Propagate updated test example code to nostarch snapshot - Edits to nostarch edits - edits from nostarch - Fix error message for the example code - update ch13-02 to reflect changes in rust-lang/book#2797 - Update to 1.59 - Edits to chapter 2 after tech review ## rust-by-example 4 commits in ec954f35eedf592cd173b21c05a7f80a65b61d8a..c2a98d9fc5d29c481d42052fbeccfde15ed03116 2022-03-22 11:09:06 -0300 to 2022-04-08 06:44:18 -0300 - Code highlight a variable (rust-lang/rust-by-example#1530) - Add a comment to note that warnings may not be shown in a browser in the Variable Bindings section (rust-lang/rust-by-example#1529) - Make all new types have UpperCamelCase names in code example in the Aliasing section (rust-lang/rust-by-example#1528) - Replace `C` with C/C++ (rust-lang/rust-by-example#1527) ## rustc-dev-guide 6 commits in 155126b1d2e2cb01ddb1d7ba9489b90d7cd173ad..eeb5a83c15b6ae60df3e4f19207376b22c6fbc4c 2022-03-22 14:34:21 +0100 to 2022-04-11 23:29:48 +0900 - method-lookup.md improvements (rust-lang/rustc-dev-guide#1296) - Consolidate crates.io convention section (rust-lang/rustc-dev-guide#1326) - Update examples with 1.61.0-nightly (latest version) (rust-lang/rustc-dev-guide#1330) - r-a: Use `python3 x.py` instead of `./x.py` (rust-lang/rustc-dev-guide#1335) - Update miri.md: correct a minor typo (rust-lang/rustc-dev-guide#1334) - Add example how lints can be feature gated
This describes what's going on if you write something like
-128_i8
: it invokes a no-op unary negation (taking -128 to -128), which the reference currently says should panic when overflow checks are enabled.In fact this situation is special-cased so that there is no panic.
As I understand it, it's implemented by folding the expression to a constant during conversion from HIR to THIR, before the overflow checks are inserted (when THIR is lowered to MIR).
There are comments about it here:
https://github.com/rust-lang/rust/blob/ec7b753ea91d8a5640388ea74fd231f91394ee9d/compiler/rustc_mir_build/src/thir/pattern/mod.rs#L563