aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2019-05-08 17:39:00 -0400
committerAndrew Kelley <andrew@ziglang.org>2019-05-08 17:39:00 -0400
commit0099583bd3eccbecbb827edbde46a40cf821fecf (patch)
treecb52a8242e85f3afd3343687efd79d2d1182bb97 /test
parent50bbb34594eedf7a978c00edb525bcea472b554b (diff)
downloadzig-0099583bd3eccbecbb827edbde46a40cf821fecf.tar.gz
zig-0099583bd3eccbecbb827edbde46a40cf821fecf.zip
C pointers support .? operator
see #1967
Diffstat (limited to 'test')
-rw-r--r--test/runtime_safety.zig20
-rw-r--r--test/stage1/behavior/pointers.zig18
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);
}