summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGavin Li <gavin@matician.com>2022-05-12 13:38:17 -0700
committerEmilio Cobos Álvarez <emilio@crisal.io>2022-05-17 13:58:45 +0200
commit5a01c551993e56d20240ef64d0ec78cd4195855d (patch)
tree3c64102b533667e36c03f9cab6ff643b9814ebbf /src
parent92487d4ed4c7ed0c006f461986b410b17f24cfa8 (diff)
Fix "dereferencing a null pointer" in C layout tests
Instead of dereferencing a null pointer, create a MaybeUninit from which we can extract well-defined addresses.
Diffstat (limited to 'src')
-rw-r--r--src/codegen/mod.rs4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/codegen/mod.rs b/src/codegen/mod.rs
index 4fcbaefd..e4ce9526 100644
--- a/src/codegen/mod.rs
+++ b/src/codegen/mod.rs
@@ -2192,7 +2192,9 @@ impl CodeGenerator for CompInfo {
quote! {
assert_eq!(
unsafe {
- &(*(::#prefix::ptr::null::<#canonical_ident>())).#field_name as *const _ as usize
+ let uninit = ::#prefix::mem::MaybeUninit::<#canonical_ident>::uninit();
+ let ptr = uninit.as_ptr();
+ ::#prefix::ptr::addr_of!((*ptr).#field_name) as usize - ptr as usize
},
#field_offset,
concat!("Offset of field: ", stringify!(#canonical_ident), "::", stringify!(#field_name))