master
1pub fn addCases(cases: *tests.LlvmIrContext) void {
2 cases.addMatches("nonnull ptr load",
3 \\export fn entry(ptr: *i16) i16 {
4 \\ return ptr.*;
5 \\}
6 , &.{
7 "ptr nonnull",
8 "load i16, ptr %0",
9 }, .{});
10
11 cases.addMatches("nonnull ptr store",
12 \\export fn entry(ptr: *i16) void {
13 \\ ptr.* = 42;
14 \\}
15 , &.{
16 "ptr nonnull",
17 "store i16 42, ptr %0",
18 }, .{});
19
20 cases.addMatches("unused acquire atomic ptr load",
21 \\export fn entry(ptr: *i16) void {
22 \\ _ = @atomicLoad(i16, ptr, .acquire);
23 \\}
24 , &.{
25 "load atomic i16, ptr %0 acquire",
26 }, .{});
27
28 cases.addMatches("unused unordered atomic volatile ptr load",
29 \\export fn entry(ptr: *volatile i16) void {
30 \\ _ = @atomicLoad(i16, ptr, .unordered);
31 \\}
32 , &.{
33 "load atomic volatile i16, ptr %0 unordered",
34 }, .{});
35
36 cases.addMatches("unused volatile ptr load",
37 \\export fn entry(ptr: *volatile i16) void {
38 \\ _ = ptr.*;
39 \\}
40 , &.{
41 "load volatile i16, ptr %0",
42 }, .{});
43
44 cases.addMatches("dead volatile ptr store",
45 \\export fn entry(ptr: *volatile i16) void {
46 \\ ptr.* = 123;
47 \\ ptr.* = 321;
48 \\}
49 , &.{
50 "store volatile i16 123, ptr %0",
51 "store volatile i16 321, ptr %0",
52 }, .{});
53
54 cases.addMatches("unused volatile slice load",
55 \\export fn entry(ptr: *volatile i16) void {
56 \\ entry2(ptr[0..1]);
57 \\}
58 \\fn entry2(ptr: []volatile i16) void {
59 \\ _ = ptr[0];
60 \\}
61 , &.{
62 "load volatile i16, ptr",
63 }, .{});
64
65 cases.addMatches("dead volatile slice store",
66 \\export fn entry(ptr: *volatile i16) void {
67 \\ entry2(ptr[0..1]);
68 \\}
69 \\fn entry2(ptr: []volatile i16) void {
70 \\ ptr[0] = 123;
71 \\ ptr[0] = 321;
72 \\}
73 , &.{
74 "store volatile i16 123, ptr",
75 "store volatile i16 321, ptr",
76 }, .{});
77
78 cases.addMatches("allowzero ptr load",
79 \\export fn entry(ptr: *allowzero i16) i16 {
80 \\ return ptr.*;
81 \\}
82 , &.{
83 "null_pointer_is_valid",
84 "load i16, ptr %0",
85 }, .{});
86
87 cases.addMatches("allowzero ptr store",
88 \\export fn entry(ptr: *allowzero i16) void {
89 \\ ptr.* = 42;
90 \\}
91 , &.{
92 "null_pointer_is_valid",
93 "store i16 42, ptr %0",
94 }, .{});
95
96 cases.addMatches("allowzero slice load",
97 \\export fn entry(ptr: *allowzero i16) i16 {
98 \\ return entry2(ptr[0..1]);
99 \\}
100 \\fn entry2(ptr: []allowzero i16) i16 {
101 \\ return ptr[0];
102 \\}
103 , &.{
104 "null_pointer_is_valid",
105 "load i16, ptr",
106 }, .{});
107
108 cases.addMatches("allowzero slice store",
109 \\export fn entry(ptr: *allowzero i16) void {
110 \\ entry2(ptr[0..1]);
111 \\}
112 \\fn entry2(ptr: []allowzero i16) void {
113 \\ ptr[0] = 42;
114 \\}
115 , &.{
116 "null_pointer_is_valid",
117 "store i16 42, ptr",
118 }, .{});
119}
120
121const std = @import("std");
122const tests = @import("tests.zig");