authorgravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2022-12-03 07:35:45-05:00
committergravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2022-12-03 08:40:08-05:00
log6d1292552e14a5678f069c1880adf04022951138
treee3884a8dafee0b90bf7598e857f98283630ae954
parentec3116f57375bac136d07c6c4d9f07cbcc58194c

cbe: implement function alignment


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

lib/zig.h+10-1
......@@ -65,8 +65,17 @@ typedef char bool;
6565#elif zig_has_attribute(aligned)
6666#define zig_align(alignment) __attribute__((aligned(alignment)))
6767#elif _MSC_VER
68#define zig_align zig_align_unavailable
6869#else
69#error the C compiler being used does not support aligning variables
70#define zig_align zig_align_unavailable
71#endif
72
73#if zig_has_attribute(aligned)
74#define zig_align_fn(alignment) __attribute__((aligned(alignment)))
75#elif _MSC_VER
76#define zig_align_fn zig_align_fn_unavailable
77#else
78#define zig_align_fn zig_align_fn_unavailable
7079#endif
7180
7281#if zig_has_builtin(unreachable)
src/codegen/c.zig+1
......@@ -1387,6 +1387,7 @@ pub const DeclGen = struct {
13871387 try dg.renderType(w, Type.void, kind);
13881388 }
13891389 try w.writeByte(')');
1390 if (fn_info.alignment > 0) try w.print(" zig_align_fn({})", .{fn_info.alignment});
13901391 }
13911392
13921393 fn renderPtrToFnTypedef(dg: *DeclGen, t: Type) error{ OutOfMemory, AnalysisFail }![]const u8 {
test/behavior/align.zig-1
......@@ -520,7 +520,6 @@ test "align(@alignOf(T)) T does not force resolution of T" {
520520
521521test "align(N) on functions" {
522522 if (builtin.zig_backend == .stage1) return error.SkipZigTest;
523 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
524523 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
525524 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
526525 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO