mirror of
https://github.com/ziglang/zig.git
synced 2025-02-05 20:30:37 +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
|
// For opaque types a ptrCast is enough
|
||||||
expr
|
expr
|
||||||
else blk: {
|
else blk: {
|
||||||
const child_type_node = try transQualType(c, scope, child_type, loc);
|
const alignof = try Tag.std_meta_alignment.create(c.arena, dst_type_node);
|
||||||
const alignof = try Tag.std_meta_alignment.create(c.arena, child_type_node);
|
|
||||||
const align_cast = try Tag.align_cast.create(c.arena, .{ .lhs = alignof, .rhs = expr });
|
const align_cast = try Tag.align_cast.create(c.arena, .{ .lhs = alignof, .rhs = expr });
|
||||||
break :blk align_cast;
|
break :blk align_cast;
|
||||||
};
|
};
|
||||||
|
@ -1485,7 +1485,19 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
|
|||||||
, &[_][]const u8{
|
, &[_][]const u8{
|
||||||
\\pub export fn ptrcast() [*c]f32 {
|
\\pub export fn ptrcast() [*c]f32 {
|
||||||
\\ var a: [*c]c_int = undefined;
|
\\ 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 {
|
\\pub export fn test_ptr_cast() void {
|
||||||
\\ var p: ?*anyopaque = undefined;
|
\\ 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;
|
\\ _ = 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;
|
\\ _ = 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;
|
\\ _ = 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;
|
\\ _ = 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;
|
\\ _ = 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;
|
\\ _ = 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;
|
\\ _ = 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;
|
\\ _ = to_longlong;
|
||||||
\\ }
|
\\ }
|
||||||
\\}
|
\\}
|
||||||
|
Loading…
Reference in New Issue
Block a user