diff --git a/src/Sema.zig b/src/Sema.zig index 797bc299c34d8831c6a287106c35878a1d8f8152..1b81e7653ea9d8586e8c887978078c9a97ba6925 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -30223,6 +30223,19 @@ fn checkPtrAttributes(sema: *Sema, dest_ty: Type, inst_ty: Type, in_memory_resul } }; return false; } + + if (inst_info.packed_offset.host_size != dest_info.packed_offset.host_size or + inst_info.packed_offset.bit_offset != dest_info.packed_offset.bit_offset) + { + in_memory_result.* = .{ .ptr_bit_range = .{ + .actual_host = inst_info.packed_offset.host_size, + .wanted_host = dest_info.packed_offset.host_size, + .actual_offset = inst_info.packed_offset.bit_offset, + .wanted_offset = dest_info.packed_offset.bit_offset, + } }; + return false; + } + if (inst_info.flags.alignment == .none and dest_info.flags.alignment == .none) return true; if (len0) return true; @@ -30243,19 +30256,6 @@ fn checkPtrAttributes(sema: *Sema, dest_ty: Type, inst_ty: Type, in_memory_resul } }; return false; } - - if (inst_info.packed_offset.host_size != dest_info.packed_offset.host_size or - inst_info.packed_offset.bit_offset != dest_info.packed_offset.bit_offset) - { - in_memory_result.* = .{ .ptr_bit_range = .{ - .actual_host = inst_info.packed_offset.host_size, - .wanted_host = dest_info.packed_offset.host_size, - .actual_offset = inst_info.packed_offset.bit_offset, - .wanted_offset = dest_info.packed_offset.bit_offset, - } }; - return false; - } - return true; } diff --git a/test/cases/compile_errors/coercion_from_vector_element_to_c_ptr.zig b/test/cases/compile_errors/coercion_from_vector_element_to_c_ptr.zig new file mode 100644 index 0000000000000000000000000000000000000000..8bf69016a6a8e0c7e51ef50f84dd632f9232037e --- /dev/null +++ b/test/cases/compile_errors/coercion_from_vector_element_to_c_ptr.zig @@ -0,0 +1,11 @@ +export fn foo() void { + var size: @Vector(4, c_int) = undefined; + bar(&size[0]); +} +extern fn bar([*c]c_int) void; + +// error +// +// 3:9: error: expected type '[*c]c_int', found '*align(4:0:4:0) c_int' +// 3:9: note: pointer host size '4' cannot cast into pointer host size '0' +// 5:15: note: parameter type declared here