diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2019-05-08 17:39:00 -0400 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2019-05-08 17:39:00 -0400 |
| commit | 0099583bd3eccbecbb827edbde46a40cf821fecf (patch) | |
| tree | cb52a8242e85f3afd3343687efd79d2d1182bb97 /test | |
| parent | 50bbb34594eedf7a978c00edb525bcea472b554b (diff) | |
| download | zig-0099583bd3eccbecbb827edbde46a40cf821fecf.tar.gz zig-0099583bd3eccbecbb827edbde46a40cf821fecf.zip | |
C pointers support .? operator
see #1967
Diffstat (limited to 'test')
| -rw-r--r-- | test/runtime_safety.zig | 20 | ||||
| -rw-r--r-- | test/stage1/behavior/pointers.zig | 18 |
2 files changed, 30 insertions, 8 deletions
diff --git a/test/runtime_safety.zig b/test/runtime_safety.zig index 78b45ac05f..b10accd213 100644 --- a/test/runtime_safety.zig +++ b/test/runtime_safety.zig @@ -1,6 +1,26 @@ const tests = @import("tests.zig"); pub fn addCases(cases: *tests.CompareOutputContext) void { + cases.addRuntimeSafety(".? operator on null pointer", + \\pub fn panic(message: []const u8, stack_trace: ?*@import("builtin").StackTrace) noreturn { + \\ @import("std").os.exit(126); + \\} + \\pub fn main() void { + \\ var ptr: ?*i32 = null; + \\ var b = ptr.?; + \\} + ); + + cases.addRuntimeSafety(".? operator on C pointer", + \\pub fn panic(message: []const u8, stack_trace: ?*@import("builtin").StackTrace) noreturn { + \\ @import("std").os.exit(126); + \\} + \\pub fn main() void { + \\ var ptr: [*c]i32 = null; + \\ var b = ptr.?; + \\} + ); + cases.addRuntimeSafety("@ptrToInt address zero to non-optional pointer", \\pub fn panic(message: []const u8, stack_trace: ?*@import("builtin").StackTrace) noreturn { \\ @import("std").os.exit(126); diff --git a/test/stage1/behavior/pointers.zig b/test/stage1/behavior/pointers.zig index 8b1f7d0cb8..1a7616e757 100644 --- a/test/stage1/behavior/pointers.zig +++ b/test/stage1/behavior/pointers.zig @@ -159,10 +159,10 @@ test "assign null directly to C pointer and test null equality" { expect(!(null != x)); const y: [*c]i32 = null; - expect(y == null); - expect(null == y); - expect(!(y != null)); - expect(!(null != y)); + comptime expect(y == null); + comptime expect(null == y); + comptime expect(!(y != null)); + comptime expect(!(null != y)); var n: i32 = 1234; var x1: [*c]i32 = &n; @@ -170,11 +170,13 @@ test "assign null directly to C pointer and test null equality" { expect(!(null == x1)); expect(x1 != null); expect(null != x1); + expect(x1.?.* == 1234); const nc: i32 = 1234; const y1: [*c]const i32 = &nc; - expect(!(y1 == null)); - expect(!(null == y1)); - expect(y1 != null); - expect(null != y1); + comptime expect(!(y1 == null)); + comptime expect(!(null == y1)); + comptime expect(y1 != null); + comptime expect(null != y1); + comptime expect(y1.?.* == 1234); } |
