authorgravatar for 33614480+em-dash@users.noreply.github.comMeredith Oleander <33614480+em-dash@users.noreply.github.com> 2022-08-05 22:38:48+10:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2022-08-05 15:38:48+03:00
logfd3415ad5e007005f7d568c41967c563e2066e95
tree7c526f182ab74edf9e3993f354aab1cb2e3a538d
parentb3950d4a88425719a642fe71d4739185a8632f89
signaturebadge-question-mark Signed by PGP key 4AEE18F83AFDEB23

translate-c: fix alignment in pointer casts


2 files changed, 22 insertions(+), 11 deletions(-)

src/translate_c.zig+1-2
......@@ -4001,8 +4001,7 @@ fn transCPtrCast(
40014001 // For opaque types a ptrCast is enough
40024002 expr
40034003 else blk: {
4004 const child_type_node = try transQualType(c, scope, child_type, loc);
4005 const alignof = try Tag.std_meta_alignment.create(c.arena, child_type_node);
4004 const alignof = try Tag.std_meta_alignment.create(c.arena, dst_type_node);
40064005 const align_cast = try Tag.align_cast.create(c.arena, .{ .lhs = alignof, .rhs = expr });
40074006 break :blk align_cast;
40084007 };
test/translate_c.zig+21-9
......@@ -1485,7 +1485,19 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
14851485 , &[_][]const u8{
14861486 \\pub export fn ptrcast() [*c]f32 {
14871487 \\ var a: [*c]c_int = undefined;
1488 \\ return @ptrCast([*c]f32, @alignCast(@import("std").meta.alignment(f32), a));
1488 \\ return @ptrCast([*c]f32, @alignCast(@import("std").meta.alignment([*c]f32), a));
1489 \\}
1490 });
1491
1492 cases.add("casting pointer to pointer",
1493 \\float **ptrptrcast() {
1494 \\ int **a;
1495 \\ return (float **)a;
1496 \\}
1497 , &[_][]const u8{
1498 \\pub export fn ptrptrcast() [*c][*c]f32 {
1499 \\ var a: [*c][*c]c_int = undefined;
1500 \\ return @ptrCast([*c][*c]f32, @alignCast(@import("std").meta.alignment([*c][*c]f32), a));
14891501 \\}
14901502 });
14911503
......@@ -1509,23 +1521,23 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
15091521 \\pub export fn test_ptr_cast() void {
15101522 \\ var p: ?*anyopaque = undefined;
15111523 \\ {
1512 \\ var to_char: [*c]u8 = @ptrCast([*c]u8, @alignCast(@import("std").meta.alignment(u8), p));
1524 \\ var to_char: [*c]u8 = @ptrCast([*c]u8, @alignCast(@import("std").meta.alignment([*c]u8), p));
15131525 \\ _ = to_char;
1514 \\ var to_short: [*c]c_short = @ptrCast([*c]c_short, @alignCast(@import("std").meta.alignment(c_short), p));
1526 \\ var to_short: [*c]c_short = @ptrCast([*c]c_short, @alignCast(@import("std").meta.alignment([*c]c_short), p));
15151527 \\ _ = to_short;
1516 \\ var to_int: [*c]c_int = @ptrCast([*c]c_int, @alignCast(@import("std").meta.alignment(c_int), p));
1528 \\ var to_int: [*c]c_int = @ptrCast([*c]c_int, @alignCast(@import("std").meta.alignment([*c]c_int), p));
15171529 \\ _ = to_int;
1518 \\ var to_longlong: [*c]c_longlong = @ptrCast([*c]c_longlong, @alignCast(@import("std").meta.alignment(c_longlong), p));
1530 \\ var to_longlong: [*c]c_longlong = @ptrCast([*c]c_longlong, @alignCast(@import("std").meta.alignment([*c]c_longlong), p));
15191531 \\ _ = to_longlong;
15201532 \\ }
15211533 \\ {
1522 \\ var to_char: [*c]u8 = @ptrCast([*c]u8, @alignCast(@import("std").meta.alignment(u8), p));
1534 \\ var to_char: [*c]u8 = @ptrCast([*c]u8, @alignCast(@import("std").meta.alignment([*c]u8), p));
15231535 \\ _ = to_char;
1524 \\ var to_short: [*c]c_short = @ptrCast([*c]c_short, @alignCast(@import("std").meta.alignment(c_short), p));
1536 \\ var to_short: [*c]c_short = @ptrCast([*c]c_short, @alignCast(@import("std").meta.alignment([*c]c_short), p));
15251537 \\ _ = to_short;
1526 \\ var to_int: [*c]c_int = @ptrCast([*c]c_int, @alignCast(@import("std").meta.alignment(c_int), p));
1538 \\ var to_int: [*c]c_int = @ptrCast([*c]c_int, @alignCast(@import("std").meta.alignment([*c]c_int), p));
15271539 \\ _ = to_int;
1528 \\ var to_longlong: [*c]c_longlong = @ptrCast([*c]c_longlong, @alignCast(@import("std").meta.alignment(c_longlong), p));
1540 \\ var to_longlong: [*c]c_longlong = @ptrCast([*c]c_longlong, @alignCast(@import("std").meta.alignment([*c]c_longlong), p));
15291541 \\ _ = to_longlong;
15301542 \\ }
15311543 \\}