authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2021-05-19 10:26:50-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2021-05-19 10:26:50-07:00
logbfd051a53c9d1db7a7f8743cd981646a6ac37114
tree79ac02632f813577a3f0585aad30b001b9def539
parent1273bc277f7274683db5041d8b41d91903e3045e

stage2: use c_allocator not raw_c_allocator

when the raw C allocator alignment is not sufficient. closes #8835

1 files changed, 14 insertions(+), 5 deletions(-)

src/main.zig+14-5
......@@ -126,11 +126,20 @@ var general_purpose_allocator = std.heap.GeneralPurposeAllocator(.{
126126}){};
127127
128128pub fn main() anyerror!void {
129 const gpa = if (std.builtin.link_libc)
130 std.heap.raw_c_allocator
131 else
132 &general_purpose_allocator.allocator;
133 defer if (!std.builtin.link_libc) {
129 var gpa_need_deinit = false;
130 const gpa = gpa: {
131 if (!std.builtin.link_libc) {
132 gpa_need_deinit = true;
133 break :gpa &general_purpose_allocator.allocator;
134 }
135 // We would prefer to use raw libc allocator here, but cannot
136 // use it if it won't support the alignment we need.
137 if (@alignOf(std.c.max_align_t) < @alignOf(i128)) {
138 break :gpa std.heap.c_allocator;
139 }
140 break :gpa std.heap.raw_c_allocator;
141 };
142 defer if (gpa_need_deinit) {
134143 _ = general_purpose_allocator.deinit();
135144 };
136145 var arena_instance = std.heap.ArenaAllocator.init(gpa);