aboutsummaryrefslogtreecommitdiff
path: root/test/behavior
diff options
context:
space:
mode:
Diffstat (limited to 'test/behavior')
-rw-r--r--test/behavior/fn.zig14
-rw-r--r--test/behavior/packed-struct.zig22
-rw-r--r--test/behavior/union.zig30
3 files changed, 66 insertions, 0 deletions
diff --git a/test/behavior/fn.zig b/test/behavior/fn.zig
index 383d553781..044e4ff049 100644
--- a/test/behavior/fn.zig
+++ b/test/behavior/fn.zig
@@ -408,3 +408,17 @@ test "function with inferred error set but returning no error" {
const return_ty = @typeInfo(@TypeOf(S.foo)).Fn.return_type.?;
try expectEqual(0, @typeInfo(@typeInfo(return_ty).ErrorUnion.error_set).ErrorSet.?.len);
}
+
+test "import passed byref to function in return type" {
+ if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
+
+ const S = struct {
+ fn get() @import("std").ArrayListUnmanaged(i32) {
+ var x: @import("std").ArrayListUnmanaged(i32) = .{};
+ return x;
+ }
+ };
+ var list = S.get();
+ try expect(list.items.len == 0);
+}
diff --git a/test/behavior/packed-struct.zig b/test/behavior/packed-struct.zig
index 52083a492d..2dea485bf5 100644
--- a/test/behavior/packed-struct.zig
+++ b/test/behavior/packed-struct.zig
@@ -436,3 +436,25 @@ test "load pointer from packed struct" {
try expect(i == 123);
}
}
+
+test "@ptrToInt on a packed struct field" {
+ if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
+ if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
+ if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
+ if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
+ if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
+
+ const S = struct {
+ const P = packed struct {
+ x: u8,
+ y: u8,
+ z: u32,
+ };
+ var p0: P = P{
+ .x = 1,
+ .y = 2,
+ .z = 0,
+ };
+ };
+ try expect(@ptrToInt(&S.p0.z) - @ptrToInt(&S.p0.x) == 2);
+}
diff --git a/test/behavior/union.zig b/test/behavior/union.zig
index 8e4b262565..2f6fa78f0c 100644
--- a/test/behavior/union.zig
+++ b/test/behavior/union.zig
@@ -1226,3 +1226,33 @@ test "extern union most-aligned field is smaller" {
var a: ?U = .{ .un = [_]u8{0} ** 110 };
try expect(a != null);
}
+
+test "return an extern union from C calling convention" {
+ if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
+
+ const namespace = struct {
+ const S = extern struct {
+ x: c_int,
+ };
+ const U = extern union {
+ l: c_long,
+ d: f64,
+ s: S,
+ };
+
+ fn bar(arg_u: U) callconv(.C) U {
+ var u = arg_u;
+ return u;
+ }
+ };
+
+ var u: namespace.U = namespace.U{
+ .l = @as(c_long, 42),
+ };
+ u = namespace.bar(namespace.U{
+ .d = 4.0,
+ });
+ try expect(u.d == 4.0);
+}