]> git.lizzy.rs Git - rust.git/commitdiff
Reduced the size of `LintExpectationId` by 12 bytes (RFC-2383)
authorxFrednet <xFrednet@gmail.com>
Wed, 24 Nov 2021 22:21:10 +0000 (23:21 +0100)
committerxFrednet <xFrednet@gmail.com>
Wed, 2 Mar 2022 16:46:10 +0000 (17:46 +0100)
compiler/rustc_lint/src/levels.rs
compiler/rustc_lint_defs/src/lib.rs

index 01454d2fbac003254f28f3fa590e2b4c7d3ed544..7045f8cf06ceb41beafadaf8f257d27e684fcda1 100644 (file)
@@ -312,7 +312,7 @@ pub(crate) fn push(
             for (lint_index, li) in metas.iter_mut().enumerate() {
                 let level = match level {
                     Level::Expect(mut id) => {
-                        id.set_lint_index(Some(lint_index));
+                        id.set_lint_index(Some(lint_index as u16));
                         Level::Expect(id)
                     }
                     level => level,
@@ -601,7 +601,8 @@ fn create_stable_id(
         hir_id: HirId,
         attr_index: usize,
     ) -> LintExpectationId {
-        let stable_id = LintExpectationId::Stable { hir_id, attr_index, lint_index: None };
+        let stable_id =
+            LintExpectationId::Stable { hir_id, attr_index: attr_index as u16, lint_index: None };
 
         self.expectation_id_map.insert(unstable_id, stable_id);
 
index 66629195153b42a6e062490af43a6eaa7d3c0ecb..2e5fd479738bedc0a2c3a7938ef057713ad710cc 100644 (file)
@@ -64,16 +64,20 @@ pub enum Applicability {
 ///
 /// Each lint inside the `expect` attribute is tracked individually, the `lint_index`
 /// identifies the lint inside the attribute and ensures that the IDs are unique.
+///
+/// The index values have a type of `u16` to reduce the size of the `LintExpectationId`.
+/// It's reasonable to assume that no user will define 2^16 attributes on one node or
+/// have that amount of lints listed. `u16` values should therefore suffice.
 #[derive(Clone, Copy, PartialEq, PartialOrd, Eq, Ord, Debug, Hash, Encodable, Decodable)]
 pub enum LintExpectationId {
     /// Used for lints emitted during the `EarlyLintPass`. This id is not
     /// has stable and should not be cached.
-    Unstable { attr_id: AttrId, lint_index: Option<usize> },
+    Unstable { attr_id: AttrId, lint_index: Option<u16> },
     /// The [`HirId`] that the lint expectation is attached to. This id is
     /// stable and can be cached. The additional index ensures that nodes with
     /// several expectations can correctly match diagnostics to the individual
     /// expectation.
-    Stable { hir_id: HirId, attr_index: usize, lint_index: Option<usize> },
+    Stable { hir_id: HirId, attr_index: u16, lint_index: Option<u16> },
 }
 
 impl LintExpectationId {
@@ -84,14 +88,14 @@ pub fn is_stable(&self) -> bool {
         }
     }
 
-    pub fn get_lint_index(&self) -> Option<usize> {
+    pub fn get_lint_index(&self) -> Option<u16> {
         let (LintExpectationId::Unstable { lint_index, .. }
         | LintExpectationId::Stable { lint_index, .. }) = self;
 
         *lint_index
     }
 
-    pub fn set_lint_index(&mut self, new_lint_index: Option<usize>) {
+    pub fn set_lint_index(&mut self, new_lint_index: Option<u16>) {
         let (LintExpectationId::Unstable { ref mut lint_index, .. }
         | LintExpectationId::Stable { ref mut lint_index, .. }) = self;
 
@@ -116,7 +120,7 @@ fn hash_stable(&self, hcx: &mut HCX, hasher: &mut StableHasher) {
 }
 
 impl<HCX: rustc_hir::HashStableContext> ToStableHashKey<HCX> for LintExpectationId {
-    type KeyType = (HirId, usize, usize);
+    type KeyType = (HirId, u16, u16);
 
     #[inline]
     fn to_stable_hash_key(&self, _: &HCX) -> Self::KeyType {