mirror of
https://github.com/ziglang/zig.git
synced 2025-01-28 21:04:39 +00:00
translate-c: fix alignment in pointer casts
This commit is contained in:
parent
b3950d4a88
commit
fd3415ad5e
@ -4001,8 +4001,7 @@ fn transCPtrCast(
|
||||
// For opaque types a ptrCast is enough
|
||||
expr
|
||||
else blk: {
|
||||
const child_type_node = try transQualType(c, scope, child_type, loc);
|
||||
const alignof = try Tag.std_meta_alignment.create(c.arena, child_type_node);
|
||||
const alignof = try Tag.std_meta_alignment.create(c.arena, dst_type_node);
|
||||
const align_cast = try Tag.align_cast.create(c.arena, .{ .lhs = alignof, .rhs = expr });
|
||||
break :blk align_cast;
|
||||
};
|
||||
|
@ -1485,7 +1485,19 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
|
||||
, &[_][]const u8{
|
||||
\\pub export fn ptrcast() [*c]f32 {
|
||||
\\ var a: [*c]c_int = undefined;
|
||||
\\ return @ptrCast([*c]f32, @alignCast(@import("std").meta.alignment(f32), a));
|
||||
\\ return @ptrCast([*c]f32, @alignCast(@import("std").meta.alignment([*c]f32), a));
|
||||
\\}
|
||||
});
|
||||
|
||||
cases.add("casting pointer to pointer",
|
||||
\\float **ptrptrcast() {
|
||||
\\ int **a;
|
||||
\\ return (float **)a;
|
||||
\\}
|
||||
, &[_][]const u8{
|
||||
\\pub export fn ptrptrcast() [*c][*c]f32 {
|
||||
\\ var a: [*c][*c]c_int = undefined;
|
||||
\\ return @ptrCast([*c][*c]f32, @alignCast(@import("std").meta.alignment([*c][*c]f32), a));
|
||||
\\}
|
||||
});
|
||||
|
||||
@ -1509,23 +1521,23 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
|
||||
\\pub export fn test_ptr_cast() void {
|
||||
\\ var p: ?*anyopaque = undefined;
|
||||
\\ {
|
||||
\\ var to_char: [*c]u8 = @ptrCast([*c]u8, @alignCast(@import("std").meta.alignment(u8), p));
|
||||
\\ var to_char: [*c]u8 = @ptrCast([*c]u8, @alignCast(@import("std").meta.alignment([*c]u8), p));
|
||||
\\ _ = to_char;
|
||||
\\ var to_short: [*c]c_short = @ptrCast([*c]c_short, @alignCast(@import("std").meta.alignment(c_short), p));
|
||||
\\ var to_short: [*c]c_short = @ptrCast([*c]c_short, @alignCast(@import("std").meta.alignment([*c]c_short), p));
|
||||
\\ _ = to_short;
|
||||
\\ var to_int: [*c]c_int = @ptrCast([*c]c_int, @alignCast(@import("std").meta.alignment(c_int), p));
|
||||
\\ var to_int: [*c]c_int = @ptrCast([*c]c_int, @alignCast(@import("std").meta.alignment([*c]c_int), p));
|
||||
\\ _ = to_int;
|
||||
\\ var to_longlong: [*c]c_longlong = @ptrCast([*c]c_longlong, @alignCast(@import("std").meta.alignment(c_longlong), p));
|
||||
\\ var to_longlong: [*c]c_longlong = @ptrCast([*c]c_longlong, @alignCast(@import("std").meta.alignment([*c]c_longlong), p));
|
||||
\\ _ = to_longlong;
|
||||
\\ }
|
||||
\\ {
|
||||
\\ var to_char: [*c]u8 = @ptrCast([*c]u8, @alignCast(@import("std").meta.alignment(u8), p));
|
||||
\\ var to_char: [*c]u8 = @ptrCast([*c]u8, @alignCast(@import("std").meta.alignment([*c]u8), p));
|
||||
\\ _ = to_char;
|
||||
\\ var to_short: [*c]c_short = @ptrCast([*c]c_short, @alignCast(@import("std").meta.alignment(c_short), p));
|
||||
\\ var to_short: [*c]c_short = @ptrCast([*c]c_short, @alignCast(@import("std").meta.alignment([*c]c_short), p));
|
||||
\\ _ = to_short;
|
||||
\\ var to_int: [*c]c_int = @ptrCast([*c]c_int, @alignCast(@import("std").meta.alignment(c_int), p));
|
||||
\\ var to_int: [*c]c_int = @ptrCast([*c]c_int, @alignCast(@import("std").meta.alignment([*c]c_int), p));
|
||||
\\ _ = to_int;
|
||||
\\ var to_longlong: [*c]c_longlong = @ptrCast([*c]c_longlong, @alignCast(@import("std").meta.alignment(c_longlong), p));
|
||||
\\ var to_longlong: [*c]c_longlong = @ptrCast([*c]c_longlong, @alignCast(@import("std").meta.alignment([*c]c_longlong), p));
|
||||
\\ _ = to_longlong;
|
||||
\\ }
|
||||
\\}
|
||||
|
Loading…
Reference in New Issue
Block a user