Skip to content

Commit 97e6df4

Browse files
committed
rustc_public: Don't impl Serialize for ThreadLocalIndex.
It meant that `DefId(0, ThreadLocalIndex)` would go to json as `[0, null]`, instead of just `0` (like before this PR). Now it's back to going to `0`, so this PR won't effect JSON consumers. This can't be achieved with just `#[serde(skip)]`: https://play.rust-lang.org/?version=stable&mode=debug&edition=2024&gist=b4aafe4ff5312c4ddedd5e17ee361d5a
1 parent b1e3bd4 commit 97e6df4

File tree

7 files changed

+31
-16
lines changed

7 files changed

+31
-16
lines changed

compiler/rustc_public/src/abi.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ impl LayoutShape {
109109
}
110110
}
111111

112-
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize)]
112+
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
113113
pub struct Layout(usize, ThreadLocalIndex);
114114
index_impl!(Layout);
115115

compiler/rustc_public/src/crate_def.rs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
11
//! Module that define a common trait for things that represent a crate definition,
22
//! such as, a function, a trait, an enum, and any other definitions.
33
4-
use serde::Serialize;
5-
64
use crate::ty::{GenericArgs, Span, Ty, index_impl};
75
use crate::{AssocItems, Crate, Symbol, ThreadLocalIndex, with};
86

97
/// A unique identification number for each item accessible for the current compilation unit.
10-
#[derive(Clone, Copy, PartialEq, Eq, Hash, Serialize)]
8+
#[derive(Clone, Copy, PartialEq, Eq, Hash)]
119
pub struct DefId(pub(crate) usize, ThreadLocalIndex);
1210
index_impl!(DefId);
1311

compiler/rustc_public/src/lib.rs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,10 @@ pub use crate::crate_def::{CrateDef, CrateDefItems, CrateDefType, DefId};
3737
pub use crate::error::*;
3838
use crate::mir::mono::StaticDef;
3939
use crate::mir::{Body, Mutability};
40-
use crate::ty::{AssocItem, FnDef, ForeignModuleDef, ImplDef, ProvenanceMap, Span, TraitDef, Ty};
40+
use crate::ty::{
41+
AssocItem, FnDef, ForeignModuleDef, ImplDef, ProvenanceMap, Span, TraitDef, Ty,
42+
serialize_index_impl,
43+
};
4144
use crate::unstable::Stable;
4245

4346
pub mod abi;
@@ -57,8 +60,9 @@ pub mod visitor;
5760
pub type Symbol = String;
5861

5962
/// The number that identifies a crate.
60-
#[derive(Clone, Copy, Serialize, PartialEq, Eq, Debug)]
63+
#[derive(Clone, Copy, PartialEq, Eq, Debug)]
6164
pub struct CrateNum(pub(crate) usize, ThreadLocalIndex);
65+
serialize_index_impl!(CrateNum);
6266

6367
impl Debug for DefId {
6468
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
@@ -294,7 +298,6 @@ impl rustc_public_bridge::bridge::Allocation<compiler_interface::BridgeTys>
294298
}
295299

296300
#[derive(Clone, Copy, Hash, PartialEq, Eq, Default)]
297-
#[derive(serde::Serialize)] // TODO: Don't.
298301
/// Marker type for indexes into [`TLV`].
299302
///
300303
/// Makes things `!Send`/`!Sync`, so users don't move `rustc_public`` types to

compiler/rustc_public/src/mir/alloc.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ impl GlobalAlloc {
4747
}
4848

4949
/// A unique identification number for each provenance
50-
#[derive(Clone, Copy, PartialEq, Eq, Debug, Hash, Serialize)]
50+
#[derive(Clone, Copy, PartialEq, Eq, Debug, Hash)]
5151
pub struct AllocId(usize, ThreadLocalIndex);
5252
index_impl!(AllocId);
5353

compiler/rustc_public/src/mir/mono.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,7 @@ impl From<StaticDef> for CrateItem {
241241
}
242242
}
243243

244-
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, Serialize)]
244+
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
245245
pub struct InstanceDef(usize, ThreadLocalIndex);
246246
index_impl!(InstanceDef);
247247

compiler/rustc_public/src/rustc_internal/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ where
5353
}
5454

5555
pub fn crate_num(item: &crate::Crate) -> CrateNum {
56-
CrateNum::from_u32(item.id.0)
56+
item.id.0.into()
5757
}
5858

5959
// A thread local variable that stores a pointer to the tables mapping between TyCtxt

compiler/rustc_public/src/ty.rs

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use crate::mir::mono::StaticDef;
1313
use crate::target::MachineInfo;
1414
use crate::{Filename, IndexedVal, Opaque, ThreadLocalIndex};
1515

16-
#[derive(Copy, Clone, Eq, PartialEq, Hash, Serialize)]
16+
#[derive(Copy, Clone, Eq, PartialEq, Hash)]
1717
pub struct Ty(usize, ThreadLocalIndex);
1818

1919
impl Debug for Ty {
@@ -151,7 +151,7 @@ pub enum TyConstKind {
151151
ZSTValue(Ty),
152152
}
153153

154-
#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash, Serialize)]
154+
#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash)]
155155
pub struct TyConstId(usize, ThreadLocalIndex);
156156

157157
/// Represents a constant in MIR
@@ -212,7 +212,7 @@ impl MirConst {
212212
}
213213
}
214214

215-
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, Serialize)]
215+
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
216216
pub struct MirConstId(usize, ThreadLocalIndex);
217217

218218
type Ident = Opaque;
@@ -255,7 +255,7 @@ pub struct Placeholder<T> {
255255
pub bound: T,
256256
}
257257

258-
#[derive(Clone, Copy, PartialEq, Eq, Hash, Serialize)]
258+
#[derive(Clone, Copy, PartialEq, Eq, Hash)]
259259
pub struct Span(usize, ThreadLocalIndex);
260260

261261
impl Debug for Span {
@@ -1566,9 +1566,23 @@ macro_rules! index_impl {
15661566
self.0
15671567
}
15681568
}
1569+
$crate::ty::serialize_index_impl!($name);
1570+
};
1571+
}
1572+
macro_rules! serialize_index_impl {
1573+
($name:ident) => {
1574+
impl ::serde::Serialize for $name {
1575+
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
1576+
where
1577+
S: ::serde::Serializer,
1578+
{
1579+
let n: usize = self.0; // Make sure we're serializing an int.
1580+
::serde::Serialize::serialize(&n, serializer)
1581+
}
1582+
}
15691583
};
15701584
}
1571-
pub(crate) use index_impl;
1585+
pub(crate) use {index_impl, serialize_index_impl};
15721586

15731587
index_impl!(TyConstId);
15741588
index_impl!(MirConstId);
@@ -1588,7 +1602,7 @@ index_impl!(Span);
15881602
/// `a` is in the variant with the `VariantIdx` of `0`,
15891603
/// `c` is in the variant with the `VariantIdx` of `1`, and
15901604
/// `g` is in the variant with the `VariantIdx` of `0`.
1591-
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, Serialize)]
1605+
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
15921606
pub struct VariantIdx(usize, ThreadLocalIndex);
15931607

15941608
index_impl!(VariantIdx);

0 commit comments

Comments
 (0)