Document that unary negation of a signed integer literal cannot cause an overflow error#1188
Conversation
ehuss
left a comment
There was a problem hiding this comment.
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.
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.
I agree, that's clearer. I've pushed that change.
… an overflow error
01bdb20 to
89a81e8
Compare
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 155126b..eeb5a83 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 155126b..eeb5a83 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 155126b..eeb5a83 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 155126b..eeb5a83 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 155126b..eeb5a83 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 155126b..eeb5a83 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 155126b..eeb5a83 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 155126b..eeb5a83 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 155126b..eeb5a83 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