foo = macro [T] (ptr: &u32) &T { return #pointer_cast(ptr); } A = struct { a: u32, } B = struct { b: u32, } [export] main = fn [cc(c)] () s32 { >var: u32 = 0; >a = foo[A](&var); >b = foo[B](&var); a.a = 1; if (b.b != 1) #trap(); if (var != 1) #trap(); return 0; }