Skip to content

Commit 906bf49

Browse files
committed
Declare all "fixed" metadata kinds as MetadataKindId
1 parent cd40bbf commit 906bf49

File tree

2 files changed

+116
-0
lines changed

2 files changed

+116
-0
lines changed

compiler/rustc_codegen_llvm/src/llvm/metadata_kind.rs

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,67 @@ impl From<MetadataType> for MetadataKindId {
1111
Self(value as c_uint)
1212
}
1313
}
14+
15+
macro_rules! declare_fixed_metadata_kinds {
16+
(
17+
$(
18+
FIXED_MD_KIND($variant:ident, $value:literal)
19+
)*
20+
) => {
21+
// Use a submodule to group all declarations into one `#[expect(..)]`.
22+
#[expect(dead_code)]
23+
mod fixed_kinds {
24+
use super::MetadataKindId;
25+
$(
26+
#[expect(non_upper_case_globals)]
27+
pub(crate) const $variant: MetadataKindId = MetadataKindId($value);
28+
)*
29+
}
30+
};
31+
}
32+
33+
// Must be kept in sync with the corresponding static assertions in `RustWrapper.cpp`.
34+
declare_fixed_metadata_kinds! {
35+
FIXED_MD_KIND(MD_dbg, 0)
36+
FIXED_MD_KIND(MD_tbaa, 1)
37+
FIXED_MD_KIND(MD_prof, 2)
38+
FIXED_MD_KIND(MD_fpmath, 3)
39+
FIXED_MD_KIND(MD_range, 4)
40+
FIXED_MD_KIND(MD_tbaa_struct, 5)
41+
FIXED_MD_KIND(MD_invariant_load, 6)
42+
FIXED_MD_KIND(MD_alias_scope, 7)
43+
FIXED_MD_KIND(MD_noalias, 8)
44+
FIXED_MD_KIND(MD_nontemporal, 9)
45+
FIXED_MD_KIND(MD_mem_parallel_loop_access, 10)
46+
FIXED_MD_KIND(MD_nonnull, 11)
47+
FIXED_MD_KIND(MD_dereferenceable, 12)
48+
FIXED_MD_KIND(MD_dereferenceable_or_null, 13)
49+
FIXED_MD_KIND(MD_make_implicit, 14)
50+
FIXED_MD_KIND(MD_unpredictable, 15)
51+
FIXED_MD_KIND(MD_invariant_group, 16)
52+
FIXED_MD_KIND(MD_align, 17)
53+
FIXED_MD_KIND(MD_loop, 18)
54+
FIXED_MD_KIND(MD_type, 19)
55+
FIXED_MD_KIND(MD_section_prefix, 20)
56+
FIXED_MD_KIND(MD_absolute_symbol, 21)
57+
FIXED_MD_KIND(MD_associated, 22)
58+
FIXED_MD_KIND(MD_callees, 23)
59+
FIXED_MD_KIND(MD_irr_loop, 24)
60+
FIXED_MD_KIND(MD_access_group, 25)
61+
FIXED_MD_KIND(MD_callback, 26)
62+
FIXED_MD_KIND(MD_preserve_access_index, 27)
63+
FIXED_MD_KIND(MD_vcall_visibility, 28)
64+
FIXED_MD_KIND(MD_noundef, 29)
65+
FIXED_MD_KIND(MD_annotation, 30)
66+
FIXED_MD_KIND(MD_nosanitize, 31)
67+
FIXED_MD_KIND(MD_func_sanitize, 32)
68+
FIXED_MD_KIND(MD_exclude, 33)
69+
FIXED_MD_KIND(MD_memprof, 34)
70+
FIXED_MD_KIND(MD_callsite, 35)
71+
FIXED_MD_KIND(MD_kcfi_type, 36)
72+
FIXED_MD_KIND(MD_pcsections, 37)
73+
FIXED_MD_KIND(MD_DIAssignID, 38)
74+
FIXED_MD_KIND(MD_coro_outside_frame, 39)
75+
FIXED_MD_KIND(MD_mmra, 40)
76+
FIXED_MD_KIND(MD_noalias_addrspace, 41)
77+
}

compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1824,3 +1824,55 @@ extern "C" size_t LLVMRustEnzymeGetMaxTypeDepth() {
18241824
return 6; // Default fallback depth
18251825
}
18261826
#endif
1827+
1828+
// Statically assert that the fixed metadata kind IDs declared in
1829+
// `metadata_kind.rs` match the ones actually used by LLVM.
1830+
#define FIXED_MD_KIND(VARIANT, VALUE) \
1831+
static_assert(::llvm::LLVMContext::VARIANT == VALUE);
1832+
// Must be kept in sync with the corresponding list in `metadata_kind.rs`.
1833+
FIXED_MD_KIND(MD_dbg, 0)
1834+
FIXED_MD_KIND(MD_tbaa, 1)
1835+
FIXED_MD_KIND(MD_prof, 2)
1836+
FIXED_MD_KIND(MD_fpmath, 3)
1837+
FIXED_MD_KIND(MD_range, 4)
1838+
FIXED_MD_KIND(MD_tbaa_struct, 5)
1839+
FIXED_MD_KIND(MD_invariant_load, 6)
1840+
FIXED_MD_KIND(MD_alias_scope, 7)
1841+
FIXED_MD_KIND(MD_noalias, 8)
1842+
FIXED_MD_KIND(MD_nontemporal, 9)
1843+
FIXED_MD_KIND(MD_mem_parallel_loop_access, 10)
1844+
FIXED_MD_KIND(MD_nonnull, 11)
1845+
FIXED_MD_KIND(MD_dereferenceable, 12)
1846+
FIXED_MD_KIND(MD_dereferenceable_or_null, 13)
1847+
FIXED_MD_KIND(MD_make_implicit, 14)
1848+
FIXED_MD_KIND(MD_unpredictable, 15)
1849+
FIXED_MD_KIND(MD_invariant_group, 16)
1850+
FIXED_MD_KIND(MD_align, 17)
1851+
FIXED_MD_KIND(MD_loop, 18)
1852+
FIXED_MD_KIND(MD_type, 19)
1853+
FIXED_MD_KIND(MD_section_prefix, 20)
1854+
FIXED_MD_KIND(MD_absolute_symbol, 21)
1855+
FIXED_MD_KIND(MD_associated, 22)
1856+
FIXED_MD_KIND(MD_callees, 23)
1857+
FIXED_MD_KIND(MD_irr_loop, 24)
1858+
FIXED_MD_KIND(MD_access_group, 25)
1859+
FIXED_MD_KIND(MD_callback, 26)
1860+
FIXED_MD_KIND(MD_preserve_access_index, 27)
1861+
FIXED_MD_KIND(MD_vcall_visibility, 28)
1862+
FIXED_MD_KIND(MD_noundef, 29)
1863+
FIXED_MD_KIND(MD_annotation, 30)
1864+
FIXED_MD_KIND(MD_nosanitize, 31)
1865+
FIXED_MD_KIND(MD_func_sanitize, 32)
1866+
FIXED_MD_KIND(MD_exclude, 33)
1867+
FIXED_MD_KIND(MD_memprof, 34)
1868+
FIXED_MD_KIND(MD_callsite, 35)
1869+
FIXED_MD_KIND(MD_kcfi_type, 36)
1870+
FIXED_MD_KIND(MD_pcsections, 37)
1871+
FIXED_MD_KIND(MD_DIAssignID, 38)
1872+
FIXED_MD_KIND(MD_coro_outside_frame, 39)
1873+
FIXED_MD_KIND(MD_mmra, 40)
1874+
FIXED_MD_KIND(MD_noalias_addrspace, 41)
1875+
// If some fixed metadata kinds are not present and consistent in all supported
1876+
// LLVM versions, it's fine to omit them from this list; in that case Rust-side
1877+
// code cannot declare them as fixed IDs and must look them up by name instead.
1878+
#undef FIXED_MD_KIND

0 commit comments

Comments
 (0)