summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Krüger <matthias.krueger@famsik.de>2021-12-01 10:50:23 +0100
committerGitHub <noreply@github.com>2021-12-01 10:50:23 +0100
commit4f252f1a91e8c46508443ea92c6f221e6de5beb1 (patch)
tree78397810624b52cc485ce911abfbc6ab50561579
parentce197e2bceca00372c172a02a966b96287476c55 (diff)
parente7ee8230ced7c14043ca51191063c13e7fbc7212 (diff)
downloadrust-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.rs9
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
}