cbe: implement function alignment

This commit is contained in:
Jacob Young 2022-12-03 07:35:45 -05:00
parent ec3116f573
commit 6d1292552e
3 changed files with 11 additions and 2 deletions

View File

@ -65,8 +65,17 @@ typedef char bool;
#elif zig_has_attribute(aligned)
#define zig_align(alignment) __attribute__((aligned(alignment)))
#elif _MSC_VER
#define zig_align zig_align_unavailable
#else
#error the C compiler being used does not support aligning variables
#define zig_align zig_align_unavailable
#endif
#if zig_has_attribute(aligned)
#define zig_align_fn(alignment) __attribute__((aligned(alignment)))
#elif _MSC_VER
#define zig_align_fn zig_align_fn_unavailable
#else
#define zig_align_fn zig_align_fn_unavailable
#endif
#if zig_has_builtin(unreachable)

View File

@ -1387,6 +1387,7 @@ pub const DeclGen = struct {
try dg.renderType(w, Type.void, kind);
}
try w.writeByte(')');
if (fn_info.alignment > 0) try w.print(" zig_align_fn({})", .{fn_info.alignment});
}
fn renderPtrToFnTypedef(dg: *DeclGen, t: Type) error{ OutOfMemory, AnalysisFail }![]const u8 {

View File

@ -520,7 +520,6 @@ test "align(@alignOf(T)) T does not force resolution of T" {
test "align(N) on functions" {
if (builtin.zig_backend == .stage1) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO