diff options
author | Matthias Krüger <matthias.krueger@famsik.de> | 2021-12-01 10:50:23 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-12-01 10:50:23 +0100 |
commit | 4f252f1a91e8c46508443ea92c6f221e6de5beb1 (patch) | |
tree | 78397810624b52cc485ce911abfbc6ab50561579 | |
parent | ce197e2bceca00372c172a02a966b96287476c55 (diff) | |
parent | e7ee8230ced7c14043ca51191063c13e7fbc7212 (diff) | |
download | rust-4f252f1a91e8c46508443ea92c6f221e6de5beb1.tar.gz |
Rollup merge of #91404 - nnethercote:fix-bad-NodeId-limit-checking, r=dtolnay
Fix bad `NodeId` limit checking.
`Resolver::next_node_id` converts a `u32` to a `usize` (which is
possibly bigger), does a checked add, and then converts the result back
to a `u32`. The `usize` conversion completely subverts the checked add!
This commit removes the conversion to/from `usize`.
-rw-r--r-- | compiler/rustc_resolve/src/lib.rs | 9 |
1 files changed, 3 insertions, 6 deletions
diff --git a/compiler/rustc_resolve/src/lib.rs b/compiler/rustc_resolve/src/lib.rs index d17e8875a1e..a8ae4736c04 100644 --- a/compiler/rustc_resolve/src/lib.rs +++ b/compiler/rustc_resolve/src/lib.rs @@ -1430,12 +1430,9 @@ impl<'a> Resolver<'a> { } pub fn next_node_id(&mut self) -> NodeId { - let next = self - .next_node_id - .as_usize() - .checked_add(1) - .expect("input too large; ran out of NodeIds"); - self.next_node_id = ast::NodeId::from_usize(next); + let next = + self.next_node_id.as_u32().checked_add(1).expect("input too large; ran out of NodeIds"); + self.next_node_id = ast::NodeId::from_u32(next); self.next_node_id } |