authorgravatar for luuk@degram.devLuuk de Gram <luuk@degram.dev> 2021-12-04 19:38:56+01:00
committergravatar for luuk@degram.devLuuk de Gram <luuk@degram.dev> 2021-12-04 21:17:17+01:00
log74a5f4d848a48e3dde8bb43cfa5b36e89aa86dfe
treef1a98dba2f588ea95851a31e4e21c31a91323b8f
parentb7fe958f44160af17ef19e8e71f1bfb6930f190a
signaturelock-open Commit is signed but in an unrecognized format.

wasm: Initial behavior tests succeeding

Note: This also fixes a memory leak for inferred error sets, and for usingnamespace

6 files changed, 241 insertions(+), 193 deletions(-)

ci/zinc/linux_test.sh+1
...@@ -6,6 +6,7 @@ ZIG=$DEBUG_STAGING/bin/zig...@@ -6,6 +6,7 @@ ZIG=$DEBUG_STAGING/bin/zig
66
7$ZIG test test/behavior.zig -fno-stage1 -fLLVM -I test7$ZIG test test/behavior.zig -fno-stage1 -fLLVM -I test
8$ZIG test test/behavior.zig -fno-stage1 -ofmt=c -I test8$ZIG test test/behavior.zig -fno-stage1 -ofmt=c -I test
9$ZIG test test/behavior.zig -fno-stage1 -target wasm32-wasi --test-cmd wasmtime --test-cmd-bin
910
10$ZIG build test-behavior -fqemu -fwasmtime11$ZIG build test-behavior -fqemu -fwasmtime
11$ZIG build test-compiler-rt -fqemu -fwasmtime12$ZIG build test-compiler-rt -fqemu -fwasmtime
src/Module.zig+8-4
...@@ -1226,19 +1226,20 @@ pub const Fn = struct {...@@ -1226,19 +1226,20 @@ pub const Fn = struct {
1226 };1226 };
12271227
1228 pub fn deinit(func: *Fn, gpa: Allocator) void {1228 pub fn deinit(func: *Fn, gpa: Allocator) void {
1229 if (func.getInferredErrorSet()) |map| {1229 if (func.getInferredErrorSet()) |error_set_data| {
1230 map.deinit(gpa);1230 error_set_data.map.deinit(gpa);
1231 error_set_data.functions.deinit(gpa);
1231 }1232 }
1232 }1233 }
12331234
1234 pub fn getInferredErrorSet(func: *Fn) ?*std.StringHashMapUnmanaged(void) {1235 pub fn getInferredErrorSet(func: *Fn) ?*Type.Payload.ErrorSetInferred.Data {
1235 const ret_ty = func.owner_decl.ty.fnReturnType();1236 const ret_ty = func.owner_decl.ty.fnReturnType();
1236 if (ret_ty.tag() == .generic_poison) {1237 if (ret_ty.tag() == .generic_poison) {
1237 return null;1238 return null;
1238 }1239 }
1239 if (ret_ty.zigTypeTag() == .ErrorUnion) {1240 if (ret_ty.zigTypeTag() == .ErrorUnion) {
1240 if (ret_ty.errorUnionSet().castTag(.error_set_inferred)) |payload| {1241 if (ret_ty.errorUnionSet().castTag(.error_set_inferred)) |payload| {
1241 return &payload.data.map;1242 return &payload.data;
1242 }1243 }
1243 }1244 }
1244 return null;1245 return null;
...@@ -1301,6 +1302,7 @@ pub const Namespace = struct {...@@ -1301,6 +1302,7 @@ pub const Namespace = struct {
1301 key.destroy(mod);1302 key.destroy(mod);
1302 }1303 }
1303 anon_decls.deinit(gpa);1304 anon_decls.deinit(gpa);
1305 ns.usingnamespace_set.deinit(gpa);
1304 }1306 }
13051307
1306 pub fn deleteAllDecls(1308 pub fn deleteAllDecls(
...@@ -1332,6 +1334,8 @@ pub const Namespace = struct {...@@ -1332,6 +1334,8 @@ pub const Namespace = struct {
1332 child_decl.destroy(mod);1334 child_decl.destroy(mod);
1333 }1335 }
1334 anon_decls.deinit(gpa);1336 anon_decls.deinit(gpa);
1337
1338 ns.usingnamespace_set.deinit(gpa);
1335 }1339 }
13361340
1337 // This renders e.g. "std.fs.Dir.OpenOptions"1341 // This renders e.g. "std.fs.Dir.OpenOptions"
src/arch/wasm/CodeGen.zig+31-14
...@@ -1235,15 +1235,15 @@ fn airRetPtr(self: *Self, inst: Air.Inst.Index) InnerError!WValue {...@@ -1235,15 +1235,15 @@ fn airRetPtr(self: *Self, inst: Air.Inst.Index) InnerError!WValue {
1235 // local, containing the offset to the stack position1235 // local, containing the offset to the stack position
1236 const local = try self.allocLocal(Type.initTag(.i32)); // always pointer therefore i321236 const local = try self.allocLocal(Type.initTag(.i32)); // always pointer therefore i32
1237 try self.moveStack(@intCast(u32, abi_size), local.local);1237 try self.moveStack(@intCast(u32, abi_size), local.local);
1238
1239 return local;1238 return local;
1240}1239}
12411240
1242fn airRetLoad(self: *Self, inst: Air.Inst.Index) InnerError!WValue {1241fn airRetLoad(self: *Self, inst: Air.Inst.Index) InnerError!WValue {
1243 const un_op = self.air.instructions.items(.data)[inst].un_op;1242 const un_op = self.air.instructions.items(.data)[inst].un_op;
1244 const operand = self.resolveInst(un_op);1243 const operand = self.resolveInst(un_op);
1245 const result = try self.load(operand, self.air.typeOf(un_op), 0);1244
1246 try self.addLabel(.local_get, result.local);1245 const result = try self.load(operand, self.air.typeOf(un_op).childType(), 0);
1246 try self.emitWValue(result);
1247 try self.restoreStackPointer();1247 try self.restoreStackPointer();
1248 try self.addTag(.@"return");1248 try self.addTag(.@"return");
1249 return .none;1249 return .none;
...@@ -1301,8 +1301,11 @@ fn airCall(self: *Self, inst: Air.Inst.Index) InnerError!WValue {...@@ -1301,8 +1301,11 @@ fn airCall(self: *Self, inst: Air.Inst.Index) InnerError!WValue {
1301 // so load its value onto the stack1301 // so load its value onto the stack
1302 std.debug.assert(ty.zigTypeTag() == .Pointer);1302 std.debug.assert(ty.zigTypeTag() == .Pointer);
1303 const operand = self.resolveInst(pl_op.operand);1303 const operand = self.resolveInst(pl_op.operand);
1304 try self.emitWValue(operand);1304 const offset = switch (operand) {
1305 const result = try self.load(operand, fn_ty, operand.local_with_offset.offset);1305 .local_with_offset => |with_offset| with_offset.offset,
1306 else => @as(u32, 0),
1307 };
1308 const result = try self.load(operand, fn_ty, offset);
1306 try self.addLabel(.local_get, result.local);1309 try self.addLabel(.local_get, result.local);
13071310
1308 var fn_type = try self.genFunctype(fn_ty);1311 var fn_type = try self.genFunctype(fn_ty);
...@@ -1335,7 +1338,6 @@ fn airAlloc(self: *Self, inst: Air.Inst.Index) InnerError!WValue {...@@ -1335,7 +1338,6 @@ fn airAlloc(self: *Self, inst: Air.Inst.Index) InnerError!WValue {
1335 // local, containing the offset to the stack position1338 // local, containing the offset to the stack position
1336 const local = try self.allocLocal(Type.initTag(.i32)); // always pointer therefore i321339 const local = try self.allocLocal(Type.initTag(.i32)); // always pointer therefore i32
1337 try self.moveStack(@intCast(u32, abi_size), local.local);1340 try self.moveStack(@intCast(u32, abi_size), local.local);
1338
1339 return local;1341 return local;
1340}1342}
13411343
...@@ -1470,6 +1472,8 @@ fn airLoad(self: *Self, inst: Air.Inst.Index) InnerError!WValue {...@@ -1470,6 +1472,8 @@ fn airLoad(self: *Self, inst: Air.Inst.Index) InnerError!WValue {
1470 const operand = self.resolveInst(ty_op.operand);1472 const operand = self.resolveInst(ty_op.operand);
1471 const ty = self.air.getRefType(ty_op.ty);1473 const ty = self.air.getRefType(ty_op.ty);
14721474
1475 if (!ty.hasCodeGenBits()) return WValue{ .none = {} };
1476
1473 return switch (ty.zigTypeTag()) {1477 return switch (ty.zigTypeTag()) {
1474 .Struct, .ErrorUnion, .Optional, .Pointer => operand, // pass as pointer1478 .Struct, .ErrorUnion, .Optional, .Pointer => operand, // pass as pointer
1475 else => switch (operand) {1479 else => switch (operand) {
...@@ -1632,7 +1636,14 @@ fn emitConstant(self: *Self, val: Value, ty: Type) InnerError!void {...@@ -1632,7 +1636,14 @@ fn emitConstant(self: *Self, val: Value, ty: Type) InnerError!void {
1632 } else if (val.castTag(.decl_ref)) |payload| {1636 } else if (val.castTag(.decl_ref)) |payload| {
1633 const decl = payload.data;1637 const decl = payload.data;
1634 decl.alive = true;1638 decl.alive = true;
1635 try self.addLabel(.memory_address, decl.link.wasm.sym_index);1639 // Function pointers use a table index, rather than a memory address
1640 if (decl.ty.zigTypeTag() == .Fn) {
1641 const target_sym_index = decl.link.wasm.sym_index;
1642 try self.bin_file.addTableFunction(target_sym_index);
1643 try self.addLabel(.function_index, target_sym_index);
1644 } else {
1645 try self.addLabel(.memory_address, decl.link.wasm.sym_index);
1646 }
1636 } else return self.fail("Wasm TODO: emitConstant for other const pointer tag {s}", .{val.tag()});1647 } else return self.fail("Wasm TODO: emitConstant for other const pointer tag {s}", .{val.tag()});
1637 },1648 },
1638 .Void => {},1649 .Void => {},
...@@ -1873,7 +1884,7 @@ fn airCmp(self: *Self, inst: Air.Inst.Index, op: std.math.CompareOperator) Inner...@@ -1873,7 +1884,7 @@ fn airCmp(self: *Self, inst: Air.Inst.Index, op: std.math.CompareOperator) Inner
1873 });1884 });
1874 try self.addTag(Mir.Inst.Tag.fromOpcode(opcode));1885 try self.addTag(Mir.Inst.Tag.fromOpcode(opcode));
18751886
1876 const cmp_tmp = try self.allocLocal(lhs_ty);1887 const cmp_tmp = try self.allocLocal(Type.initTag(.i32)); // bool is always i32
1877 try self.addLabel(.local_set, cmp_tmp.local);1888 try self.addLabel(.local_set, cmp_tmp.local);
1878 return cmp_tmp;1889 return cmp_tmp;
1879}1890}
...@@ -2200,20 +2211,26 @@ fn airIntcast(self: *Self, inst: Air.Inst.Index) InnerError!WValue {...@@ -2200,20 +2211,26 @@ fn airIntcast(self: *Self, inst: Air.Inst.Index) InnerError!WValue {
2200 const operand = self.resolveInst(ty_op.operand);2211 const operand = self.resolveInst(ty_op.operand);
2201 const ref_ty = self.air.typeOf(ty_op.operand);2212 const ref_ty = self.air.typeOf(ty_op.operand);
2202 const ref_info = ref_ty.intInfo(self.target);2213 const ref_info = ref_ty.intInfo(self.target);
2203 const op_bits = ref_info.bits;2214 const wanted_info = ty.intInfo(self.target);
2204 const wanted_bits = ty.intInfo(self.target).bits;2215
2216 const op_bits = toWasmIntBits(ref_info.bits) orelse
2217 return self.fail("TODO: Wasm intcast integer types of bitsize: {d}", .{ref_info.bits});
2218 const wanted_bits = toWasmIntBits(wanted_info.bits) orelse
2219 return self.fail("TODO: Wasm intcast integer types of bitsize: {d}", .{wanted_info.bits});
22052220
2206 if (op_bits > 32 and wanted_bits <= 32) {2221 // hot path
2222 if (op_bits == wanted_bits) return operand;
2223
2224 if (op_bits > 32 and wanted_bits == 32) {
2207 try self.emitWValue(operand);2225 try self.emitWValue(operand);
2208 try self.addTag(.i32_wrap_i64);2226 try self.addTag(.i32_wrap_i64);
2209 } else if (op_bits <= 32 and wanted_bits > 32) {2227 } else if (op_bits == 32 and wanted_bits > 32) {
2210 try self.emitWValue(operand);2228 try self.emitWValue(operand);
2211 try self.addTag(switch (ref_info.signedness) {2229 try self.addTag(switch (ref_info.signedness) {
2212 .signed => .i64_extend_i32_s,2230 .signed => .i64_extend_i32_s,
2213 .unsigned => .i64_extend_i32_u,2231 .unsigned => .i64_extend_i32_u,
2214 });2232 });
2215 } else return operand;2233 }
2216
2217 const result = try self.allocLocal(ty);2234 const result = try self.allocLocal(ty);
2218 try self.addLabel(.local_set, result.local);2235 try self.addLabel(.local_set, result.local);
2219 return result;2236 return result;
src/arch/wasm/Emit.zig+17-1
...@@ -50,6 +50,7 @@ pub fn emitMir(emit: *Emit) InnerError!void {...@@ -50,6 +50,7 @@ pub fn emitMir(emit: *Emit) InnerError!void {
50 .call_indirect => try emit.emitCallIndirect(inst),50 .call_indirect => try emit.emitCallIndirect(inst),
51 .global_get => try emit.emitGlobal(tag, inst),51 .global_get => try emit.emitGlobal(tag, inst),
52 .global_set => try emit.emitGlobal(tag, inst),52 .global_set => try emit.emitGlobal(tag, inst),
53 .function_index => try emit.emitFunctionIndex(inst),
53 .memory_address => try emit.emitMemAddress(inst),54 .memory_address => try emit.emitMemAddress(inst),
5455
55 // immediates56 // immediates
...@@ -240,7 +241,7 @@ fn emitImm64(emit: *Emit, inst: Mir.Inst.Index) !void {...@@ -240,7 +241,7 @@ fn emitImm64(emit: *Emit, inst: Mir.Inst.Index) !void {
240 const extra_index = emit.mir.instructions.items(.data)[inst].payload;241 const extra_index = emit.mir.instructions.items(.data)[inst].payload;
241 const value = emit.mir.extraData(Mir.Imm64, extra_index);242 const value = emit.mir.extraData(Mir.Imm64, extra_index);
242 try emit.code.append(std.wasm.opcode(.i64_const));243 try emit.code.append(std.wasm.opcode(.i64_const));
243 try leb128.writeULEB128(emit.code.writer(), value.data.toU64());244 try leb128.writeILEB128(emit.code.writer(), @bitCast(i64, value.data.toU64()));
244}245}
245246
246fn emitFloat32(emit: *Emit, inst: Mir.Inst.Index) !void {247fn emitFloat32(emit: *Emit, inst: Mir.Inst.Index) !void {
...@@ -289,6 +290,21 @@ fn emitCallIndirect(emit: *Emit, inst: Mir.Inst.Index) !void {...@@ -289,6 +290,21 @@ fn emitCallIndirect(emit: *Emit, inst: Mir.Inst.Index) !void {
289 try leb128.writeULEB128(emit.code.writer(), label);290 try leb128.writeULEB128(emit.code.writer(), label);
290}291}
291292
293fn emitFunctionIndex(emit: *Emit, inst: Mir.Inst.Index) !void {
294 const symbol_index = emit.mir.instructions.items(.data)[inst].label;
295 try emit.code.append(std.wasm.opcode(.i32_const));
296 const index_offset = emit.offset();
297 var buf: [5]u8 = undefined;
298 leb128.writeUnsignedFixed(5, &buf, symbol_index);
299 try emit.code.appendSlice(&buf);
300
301 try emit.decl.link.wasm.relocs.append(emit.bin_file.allocator, .{
302 .offset = index_offset,
303 .index = symbol_index,
304 .relocation_type = .R_WASM_TABLE_INDEX_SLEB,
305 });
306}
307
292fn emitMemAddress(emit: *Emit, inst: Mir.Inst.Index) !void {308fn emitMemAddress(emit: *Emit, inst: Mir.Inst.Index) !void {
293 const symbol_index = emit.mir.instructions.items(.data)[inst].label;309 const symbol_index = emit.mir.instructions.items(.data)[inst].label;
294 try emit.code.append(std.wasm.opcode(.i32_const));310 try emit.code.append(std.wasm.opcode(.i32_const));
src/arch/wasm/Mir.zig+8-2
...@@ -373,11 +373,17 @@ pub const Inst = struct {...@@ -373,11 +373,17 @@ pub const Inst = struct {
373 i64_extend16_s = 0xC3,373 i64_extend16_s = 0xC3,
374 /// Uses `tag`374 /// Uses `tag`
375 i64_extend32_s = 0xC4,375 i64_extend32_s = 0xC4,
376 /// Contains a symbol to a function pointer
377 /// uses `label`
378 ///
379 /// Note: This uses `0xFE` as value as it is unused and not reserved
380 /// by the wasm specification, making it safe to use.
381 function_index = 0xFE,
376 /// Contains a symbol to a memory address382 /// Contains a symbol to a memory address
377 /// Uses `label`383 /// Uses `label`
378 ///384 ///
379 /// Note: This uses `0xFF` as value as it is unused and not-reserved385 /// Note: This uses `0xFF` as value as it is unused and not reserved
380 /// by the wasm specification, making it safe to use386 /// by the wasm specification, making it safe to use.
381 memory_address = 0xFF,387 memory_address = 0xFF,
382388
383 /// From a given wasm opcode, returns a MIR tag.389 /// From a given wasm opcode, returns a MIR tag.
test/behavior.zig+176-172
...@@ -1,198 +1,202 @@...@@ -1,198 +1,202 @@
1const builtin = @import("builtin");1const builtin = @import("builtin");
22
3test {3test {
4 // Tests that pass for stage1, stage2, and the C backend.4 // Tests that pass for stage1, stage2, the C -and wasm backend.
5 _ = @import("behavior/align.zig");
6 _ = @import("behavior/basic.zig");5 _ = @import("behavior/basic.zig");
7 _ = @import("behavior/bitcast.zig");6 _ = @import("behavior/bitcast.zig");
8 _ = @import("behavior/bool.zig");
9 _ = @import("behavior/bugs/624.zig");7 _ = @import("behavior/bugs/624.zig");
10 _ = @import("behavior/bugs/655.zig");8 _ = @import("behavior/bugs/655.zig");
11 _ = @import("behavior/bugs/679.zig");9 _ = @import("behavior/bugs/679.zig");
12 _ = @import("behavior/bugs/704.zig");
13 _ = @import("behavior/bugs/1111.zig");10 _ = @import("behavior/bugs/1111.zig");
14 _ = @import("behavior/bugs/1486.zig");11 _ = @import("behavior/bugs/1486.zig");
15 _ = @import("behavior/bugs/2346.zig");12 _ = @import("behavior/bugs/2346.zig");
16 _ = @import("behavior/bugs/2692.zig");
17 _ = @import("behavior/bugs/2889.zig");
18 _ = @import("behavior/bugs/3046.zig");
19 _ = @import("behavior/bugs/3586.zig");
20 _ = @import("behavior/bugs/4560.zig");
21 _ = @import("behavior/bugs/4769_a.zig");
22 _ = @import("behavior/bugs/4769_b.zig");
23 _ = @import("behavior/bugs/4954.zig");
24 _ = @import("behavior/bugs/6850.zig");13 _ = @import("behavior/bugs/6850.zig");
25 _ = @import("behavior/byval_arg_var.zig");
26 _ = @import("behavior/call.zig");
27 _ = @import("behavior/cast.zig");
28 _ = @import("behavior/defer.zig");
29 _ = @import("behavior/enum.zig");14 _ = @import("behavior/enum.zig");
30 _ = @import("behavior/error.zig");
31 _ = @import("behavior/fn_in_struct_in_comptime.zig");
32 _ = @import("behavior/generics.zig");
33 _ = @import("behavior/hasdecl.zig");15 _ = @import("behavior/hasdecl.zig");
34 _ = @import("behavior/hasfield.zig");16 _ = @import("behavior/hasfield.zig");
35 _ = @import("behavior/if.zig");
36 _ = @import("behavior/import.zig");17 _ = @import("behavior/import.zig");
37 _ = @import("behavior/incomplete_struct_param_tld.zig");
38 _ = @import("behavior/int128.zig");
39 _ = @import("behavior/inttoptr.zig");
40 _ = @import("behavior/member_func.zig");
41 _ = @import("behavior/null.zig");
42 _ = @import("behavior/optional.zig");
43 _ = @import("behavior/pointers.zig");
44 _ = @import("behavior/ptrcast.zig");
45 _ = @import("behavior/pub_enum.zig");18 _ = @import("behavior/pub_enum.zig");
46 _ = @import("behavior/ref_var_in_if_after_if_2nd_switch_prong.zig");
47 _ = @import("behavior/slice_sentinel_comptime.zig");19 _ = @import("behavior/slice_sentinel_comptime.zig");
48 _ = @import("behavior/struct.zig");
49 _ = @import("behavior/this.zig");
50 _ = @import("behavior/translate_c_macros.zig");
51 _ = @import("behavior/truncate.zig");20 _ = @import("behavior/truncate.zig");
52 _ = @import("behavior/underscore.zig");
53 _ = @import("behavior/usingnamespace.zig");21 _ = @import("behavior/usingnamespace.zig");
54 _ = @import("behavior/while.zig");
5522
56 if (builtin.object_format != .c) {23 // Tests that pass for stage1, stage2 and the C backend, but not for the wasm backend
57 // Tests that pass for stage1 and stage2 but not the C backend.24 if (!builtin.zig_is_stage2 or (builtin.zig_is_stage2 and builtin.stage2_arch != .wasm32)) {
58 _ = @import("behavior/align_llvm.zig");25 _ = @import("behavior/align.zig");
59 _ = @import("behavior/alignof.zig");26 _ = @import("behavior/bool.zig");
60 _ = @import("behavior/array.zig");27 _ = @import("behavior/bugs/704.zig");
61 _ = @import("behavior/atomics.zig");28 _ = @import("behavior/bugs/2692.zig");
62 _ = @import("behavior/basic_llvm.zig");29 _ = @import("behavior/bugs/2889.zig");
63 _ = @import("behavior/bugs/394.zig");30 _ = @import("behavior/bugs/3046.zig");
64 _ = @import("behavior/bugs/656.zig");31 _ = @import("behavior/bugs/3586.zig");
65 _ = @import("behavior/bugs/1277.zig");32 _ = @import("behavior/bugs/4560.zig");
66 _ = @import("behavior/bugs/1381.zig");33 _ = @import("behavior/bugs/4769_a.zig");
67 _ = @import("behavior/bugs/1500.zig");34 _ = @import("behavior/bugs/4769_b.zig");
68 _ = @import("behavior/bugs/1741.zig");35 _ = @import("behavior/bugs/4954.zig");
69 _ = @import("behavior/bugs/2006.zig");36 _ = @import("behavior/byval_arg_var.zig");
70 _ = @import("behavior/bugs/2578.zig");37 _ = @import("behavior/call.zig");
71 _ = @import("behavior/bugs/3007.zig");38 _ = @import("behavior/cast.zig");
72 _ = @import("behavior/bugs/3112.zig");39 _ = @import("behavior/defer.zig");
73 _ = @import("behavior/bugs/7250.zig");40 _ = @import("behavior/error.zig");
74 _ = @import("behavior/cast_llvm.zig");41 _ = @import("behavior/fn_in_struct_in_comptime.zig");
75 _ = @import("behavior/eval.zig");42 _ = @import("behavior/generics.zig");
76 _ = @import("behavior/floatop.zig");43 _ = @import("behavior/if.zig");
77 _ = @import("behavior/fn.zig");44 _ = @import("behavior/incomplete_struct_param_tld.zig");
78 _ = @import("behavior/for.zig");45 _ = @import("behavior/int128.zig");
79 _ = @import("behavior/generics_llvm.zig");46 _ = @import("behavior/inttoptr.zig");
80 _ = @import("behavior/math.zig");47 _ = @import("behavior/member_func.zig");
81 _ = @import("behavior/maximum_minimum.zig");48 _ = @import("behavior/null.zig");
82 _ = @import("behavior/namespace_depends_on_compile_var.zig");49 _ = @import("behavior/optional.zig");
83 _ = @import("behavior/null_llvm.zig");50 _ = @import("behavior/pointers.zig");
84 _ = @import("behavior/optional_llvm.zig");51 _ = @import("behavior/ptrcast.zig");
85 _ = @import("behavior/popcount.zig");52 _ = @import("behavior/ref_var_in_if_after_if_2nd_switch_prong.zig");
86 _ = @import("behavior/saturating_arithmetic.zig");53 _ = @import("behavior/struct.zig");
87 _ = @import("behavior/sizeof_and_typeof.zig");54 _ = @import("behavior/this.zig");
88 _ = @import("behavior/slice.zig");55 _ = @import("behavior/translate_c_macros.zig");
89 _ = @import("behavior/struct_llvm.zig");56 _ = @import("behavior/underscore.zig");
90 _ = @import("behavior/switch.zig");57 _ = @import("behavior/while.zig");
91 _ = @import("behavior/undefined.zig");
92 _ = @import("behavior/union.zig");
93 _ = @import("behavior/void.zig");
94 _ = @import("behavior/widening.zig");
9558
96 if (builtin.zig_is_stage2) {59 if (builtin.object_format != .c) {
97 // When all comptime_memory.zig tests pass, #9646 can be closed.60 // Tests that pass for stage1 and stage2 but not the C backend and wasm backend.
98 // _ = @import("behavior/comptime_memory.zig");61 _ = @import("behavior/align_llvm.zig");
99 _ = @import("behavior/slice_stage2.zig");62 _ = @import("behavior/alignof.zig");
100 } else {63 _ = @import("behavior/array.zig");
101 _ = @import("behavior/align_stage1.zig");64 _ = @import("behavior/atomics.zig");
102 _ = @import("behavior/array_stage1.zig");65 _ = @import("behavior/basic_llvm.zig");
103 if (builtin.os.tag != .wasi) {66 _ = @import("behavior/bugs/394.zig");
104 _ = @import("behavior/asm.zig");67 _ = @import("behavior/bugs/656.zig");
105 _ = @import("behavior/async_fn.zig");68 _ = @import("behavior/bugs/1277.zig");
106 }69 _ = @import("behavior/bugs/1381.zig");
107 _ = @import("behavior/await_struct.zig");70 _ = @import("behavior/bugs/1500.zig");
108 _ = @import("behavior/bit_shifting.zig");71 _ = @import("behavior/bugs/1741.zig");
109 _ = @import("behavior/bitcast_stage1.zig");72 _ = @import("behavior/bugs/2006.zig");
110 _ = @import("behavior/bitreverse.zig");73 _ = @import("behavior/bugs/2578.zig");
111 _ = @import("behavior/bugs/421.zig");74 _ = @import("behavior/bugs/3007.zig");
112 _ = @import("behavior/bugs/529.zig");75 _ = @import("behavior/bugs/3112.zig");
113 _ = @import("behavior/bugs/718.zig");76 _ = @import("behavior/bugs/7250.zig");
114 _ = @import("behavior/bugs/726.zig");77 _ = @import("behavior/cast_llvm.zig");
115 _ = @import("behavior/bugs/828.zig");78 _ = @import("behavior/eval.zig");
116 _ = @import("behavior/bugs/920.zig");79 _ = @import("behavior/floatop.zig");
117 _ = @import("behavior/bugs/1025.zig");80 _ = @import("behavior/fn.zig");
118 _ = @import("behavior/bugs/1076.zig");81 _ = @import("behavior/for.zig");
119 _ = @import("behavior/bugs/1120.zig");82 _ = @import("behavior/generics_llvm.zig");
120 _ = @import("behavior/bugs/1310.zig");83 _ = @import("behavior/math.zig");
121 _ = @import("behavior/bugs/1322.zig");84 _ = @import("behavior/maximum_minimum.zig");
122 _ = @import("behavior/bugs/1421.zig");85 _ = @import("behavior/namespace_depends_on_compile_var.zig");
123 _ = @import("behavior/bugs/1442.zig");86 _ = @import("behavior/null_llvm.zig");
124 _ = @import("behavior/bugs/1607.zig");87 _ = @import("behavior/optional_llvm.zig");
125 _ = @import("behavior/bugs/1735.zig");88 _ = @import("behavior/popcount.zig");
126 _ = @import("behavior/bugs/1851.zig");89 _ = @import("behavior/saturating_arithmetic.zig");
127 _ = @import("behavior/bugs/1914.zig");90 _ = @import("behavior/sizeof_and_typeof.zig");
128 _ = @import("behavior/bugs/2114.zig");91 _ = @import("behavior/slice.zig");
129 _ = @import("behavior/bugs/3367.zig");92 _ = @import("behavior/struct_llvm.zig");
130 _ = @import("behavior/bugs/3384.zig");93 _ = @import("behavior/switch.zig");
131 _ = @import("behavior/bugs/3742.zig");94 _ = @import("behavior/undefined.zig");
132 _ = @import("behavior/bugs/3779.zig");95 _ = @import("behavior/union.zig");
133 _ = @import("behavior/bugs/4328.zig");96 _ = @import("behavior/void.zig");
134 _ = @import("behavior/bugs/5398.zig");97 _ = @import("behavior/widening.zig");
135 _ = @import("behavior/bugs/5413.zig");98
136 _ = @import("behavior/bugs/5474.zig");99 if (builtin.zig_is_stage2) {
137 _ = @import("behavior/bugs/5487.zig");100 // When all comptime_memory.zig tests pass, #9646 can be closed.
138 _ = @import("behavior/bugs/6456.zig");101 // _ = @import("behavior/comptime_memory.zig");
139 _ = @import("behavior/bugs/6781.zig");102 _ = @import("behavior/slice_stage2.zig");
140 _ = @import("behavior/bugs/7003.zig");103 } else {
141 _ = @import("behavior/bugs/7027.zig");104 _ = @import("behavior/align_stage1.zig");
142 _ = @import("behavior/bugs/7047.zig");105 _ = @import("behavior/array_stage1.zig");
143 _ = @import("behavior/bugs/9584.zig");106 if (builtin.os.tag != .wasi) {
144 _ = @import("behavior/bugs/9967.zig");107 _ = @import("behavior/asm.zig");
145 _ = @import("behavior/bugs/10147.zig");108 _ = @import("behavior/async_fn.zig");
146 _ = @import("behavior/byteswap.zig");109 }
147 _ = @import("behavior/call_stage1.zig");110 _ = @import("behavior/await_struct.zig");
148 _ = @import("behavior/cast_stage1.zig");111 _ = @import("behavior/bit_shifting.zig");
149 _ = @import("behavior/const_slice_child.zig");112 _ = @import("behavior/bitcast_stage1.zig");
150 _ = @import("behavior/defer_stage1.zig");113 _ = @import("behavior/bitreverse.zig");
151 _ = @import("behavior/enum_stage1.zig");114 _ = @import("behavior/bugs/421.zig");
152 _ = @import("behavior/error_stage1.zig");115 _ = @import("behavior/bugs/529.zig");
153 _ = @import("behavior/eval_stage1.zig");116 _ = @import("behavior/bugs/718.zig");
154 _ = @import("behavior/field_parent_ptr.zig");117 _ = @import("behavior/bugs/726.zig");
155 _ = @import("behavior/floatop_stage1.zig");118 _ = @import("behavior/bugs/828.zig");
156 _ = @import("behavior/fn_stage1.zig");119 _ = @import("behavior/bugs/920.zig");
157 _ = @import("behavior/fn_delegation.zig");120 _ = @import("behavior/bugs/1025.zig");
158 _ = @import("behavior/for_stage1.zig");121 _ = @import("behavior/bugs/1076.zig");
159 _ = @import("behavior/if_stage1.zig");122 _ = @import("behavior/bugs/1120.zig");
160 _ = @import("behavior/ir_block_deps.zig");123 _ = @import("behavior/bugs/1310.zig");
161 _ = @import("behavior/math_stage1.zig");124 _ = @import("behavior/bugs/1322.zig");
162 _ = @import("behavior/merge_error_sets.zig");125 _ = @import("behavior/bugs/1421.zig");
163 _ = @import("behavior/misc.zig");126 _ = @import("behavior/bugs/1442.zig");
164 _ = @import("behavior/muladd.zig");127 _ = @import("behavior/bugs/1607.zig");
165 _ = @import("behavior/null_stage1.zig");128 _ = @import("behavior/bugs/1735.zig");
166 _ = @import("behavior/optional_stage1.zig");129 _ = @import("behavior/bugs/1851.zig");
167 _ = @import("behavior/pointers_stage1.zig");130 _ = @import("behavior/bugs/1914.zig");
168 _ = @import("behavior/popcount_stage1.zig");131 _ = @import("behavior/bugs/2114.zig");
169 _ = @import("behavior/ptrcast_stage1.zig");132 _ = @import("behavior/bugs/3367.zig");
170 _ = @import("behavior/reflection.zig");133 _ = @import("behavior/bugs/3384.zig");
171 _ = @import("behavior/select.zig");134 _ = @import("behavior/bugs/3742.zig");
172 _ = @import("behavior/shuffle.zig");135 _ = @import("behavior/bugs/3779.zig");
173 _ = @import("behavior/sizeof_and_typeof_stage1.zig");136 _ = @import("behavior/bugs/4328.zig");
174 _ = @import("behavior/slice_stage1.zig");137 _ = @import("behavior/bugs/5398.zig");
175 _ = @import("behavior/struct_contains_null_ptr_itself.zig");138 _ = @import("behavior/bugs/5413.zig");
176 _ = @import("behavior/struct_contains_slice_of_itself.zig");139 _ = @import("behavior/bugs/5474.zig");
177 _ = @import("behavior/struct_stage1.zig");140 _ = @import("behavior/bugs/5487.zig");
178 _ = @import("behavior/switch_prong_err_enum.zig");141 _ = @import("behavior/bugs/6456.zig");
179 _ = @import("behavior/switch_prong_implicit_cast.zig");142 _ = @import("behavior/bugs/6781.zig");
180 _ = @import("behavior/switch_stage1.zig");143 _ = @import("behavior/bugs/7003.zig");
181 _ = @import("behavior/try.zig");144 _ = @import("behavior/bugs/7027.zig");
182 _ = @import("behavior/tuple.zig");145 _ = @import("behavior/bugs/7047.zig");
183 _ = @import("behavior/type.zig");146 _ = @import("behavior/bugs/9584.zig");
184 _ = @import("behavior/type_info.zig");147 _ = @import("behavior/bugs/9967.zig");
185 _ = @import("behavior/typename.zig");148 _ = @import("behavior/bugs/10147.zig");
186 _ = @import("behavior/union_stage1.zig");149 _ = @import("behavior/byteswap.zig");
187 _ = @import("behavior/union_with_members.zig");150 _ = @import("behavior/call_stage1.zig");
188 _ = @import("behavior/var_args.zig");151 _ = @import("behavior/cast_stage1.zig");
189 _ = @import("behavior/vector.zig");152 _ = @import("behavior/const_slice_child.zig");
190 if (builtin.target.cpu.arch == .wasm32) {153 _ = @import("behavior/defer_stage1.zig");
191 _ = @import("behavior/wasm.zig");154 _ = @import("behavior/enum_stage1.zig");
155 _ = @import("behavior/error_stage1.zig");
156 _ = @import("behavior/eval_stage1.zig");
157 _ = @import("behavior/field_parent_ptr.zig");
158 _ = @import("behavior/floatop_stage1.zig");
159 _ = @import("behavior/fn_stage1.zig");
160 _ = @import("behavior/fn_delegation.zig");
161 _ = @import("behavior/for_stage1.zig");
162 _ = @import("behavior/if_stage1.zig");
163 _ = @import("behavior/ir_block_deps.zig");
164 _ = @import("behavior/math_stage1.zig");
165 _ = @import("behavior/merge_error_sets.zig");
166 _ = @import("behavior/misc.zig");
167 _ = @import("behavior/muladd.zig");
168 _ = @import("behavior/null_stage1.zig");
169 _ = @import("behavior/optional_stage1.zig");
170 _ = @import("behavior/pointers_stage1.zig");
171 _ = @import("behavior/popcount_stage1.zig");
172 _ = @import("behavior/ptrcast_stage1.zig");
173 _ = @import("behavior/reflection.zig");
174 _ = @import("behavior/select.zig");
175 _ = @import("behavior/shuffle.zig");
176 _ = @import("behavior/sizeof_and_typeof_stage1.zig");
177 _ = @import("behavior/slice_stage1.zig");
178 _ = @import("behavior/struct_contains_null_ptr_itself.zig");
179 _ = @import("behavior/struct_contains_slice_of_itself.zig");
180 _ = @import("behavior/struct_stage1.zig");
181 _ = @import("behavior/switch_prong_err_enum.zig");
182 _ = @import("behavior/switch_prong_implicit_cast.zig");
183 _ = @import("behavior/switch_stage1.zig");
184 _ = @import("behavior/try.zig");
185 _ = @import("behavior/tuple.zig");
186 _ = @import("behavior/type.zig");
187 _ = @import("behavior/type_info.zig");
188 _ = @import("behavior/typename.zig");
189 _ = @import("behavior/union_stage1.zig");
190 _ = @import("behavior/union_with_members.zig");
191 _ = @import("behavior/var_args.zig");
192 _ = @import("behavior/vector.zig");
193 if (builtin.target.cpu.arch == .wasm32) {
194 _ = @import("behavior/wasm.zig");
195 }
196 _ = @import("behavior/while_stage1.zig");
197 _ = @import("behavior/src.zig");
198 _ = @import("behavior/translate_c_macros_stage1.zig");
192 }199 }
193 _ = @import("behavior/while_stage1.zig");
194 _ = @import("behavior/src.zig");
195 _ = @import("behavior/translate_c_macros_stage1.zig");
196 }200 }
197 }201 }
198}202}