1#skip amdgcn-amdhsa-none-baseline-whole-llvm-lld-pic
2#skip amdgcn-amdpal-none-baseline-whole-llvm-lld-pic
3#skip amdgcn-mesa3d-none-baseline-whole-llvm-lld-pic
4
5#skip bpfeb-freestanding-none-baseline-whole-llvm-lld-pic
6
7#skip bpfel-freestanding-none-baseline-whole-llvm-lld-pic
8
9#skip csky-freestanding-eabi-baseline-whole-llvm-lld-pic
10#skip csky-freestanding-eabihf-baseline-whole-llvm-lld-pic
11#skip csky-linux-eabi-baseline-whole-llvm-lld-pic
12#skip csky-linux-eabihf-baseline-whole-llvm-lld-pic
13#skip csky-linux-gnueabi-baseline-whole-llvm-lld-pic
14#skip csky-linux-gnueabihf-baseline-whole-llvm-lld-pic
15
16#skip nvptx-cuda-none-baseline-whole-llvm-lld-pic
17#skip nvptx-nvcl-none-baseline-whole-llvm-lld-pic
18
19#skip nvptx64-cuda-none-baseline-whole-llvm-lld-pic
20#skip nvptx64-nvcl-none-baseline-whole-llvm-lld-pic
21
22#skip spirv32-opencl-none-baseline-whole-llvm-lld-pic
23#skip spirv32-opengl-none-baseline-whole-llvm-lld-pic
24#skip spirv32-vulkan-none-baseline-whole-llvm-lld-pic
25
26#skip spirv64-amdhsa-none-baseline-whole-llvm-lld-pic
27#skip spirv64-opencl-none-baseline-whole-llvm-lld-pic
28#skip spirv64-vulkan-none-baseline-whole-llvm-lld-pic
29
30#skip x86_64-linux-gnux32-baseline-whole-llvm-new-pic
31#skip x86_64-linux-muslx32-baseline-whole-llvm-new-pic
32#skip x86_64-linux-x32-baseline-whole-llvm-new-pic
33
34#obj {
35--name test -fno-lld -fno-new-linker -ofmt=llvmir
36-Mroot=test.zig
37#}
38
39#write test.zig {
40export fn entry(ptr: *allowzero i16) i16 {
41 return ptr.*;
42}
43#}
44#update "load"
45#check llvm {
46define #...@test.entry(ptr #...%0) #...#0 #...{
47#...load i16, ptr %0#...
48}
49
50#...
51attributes #0 = {#... null_pointer_is_valid #...}
52#}
53
54#write test.zig {
55export fn entry(ptr: *allowzero i16) void {
56 ptr.* = 42;
57}
58#}
59#update "store"
60#check llvm {
61define #...@test.entry(ptr #...%0) #...#0 #...{
62#...store i16 42, ptr %0#...
63}
64
65#...
66attributes #0 = {#... null_pointer_is_valid #...}
67#}
68
69#write test.zig {
70export fn entry(ptr: *allowzero i16) i16 {
71 return entry2(ptr[0..1]);
72}
73fn entry2(slice: []allowzero i16) i16 {
74 @setRuntimeSafety(false);
75 return slice[0];
76}
77#}
78#update "slice load"
79#check llvm {
80define #...@test.entry2(#..., ptr #...%1, #...) #...#2 #...{
81#...load i16, ptr %#...
82}
83
84#...
85attributes #2 = {#... null_pointer_is_valid #...}
86#}
87
88#write test.zig {
89export fn entry(ptr: *allowzero i16) void {
90 entry2(ptr[0..1]);
91}
92fn entry2(slice: []allowzero i16) void {
93 @setRuntimeSafety(false);
94 slice[0] = 42;
95}
96#}
97#update "slice store"
98#check llvm {
99define #...@test.entry2(#..., ptr #...%1, #...) #...#2 #...{
100#...store i16 42, ptr %#...
101}
102
103#...
104attributes #2 = {#... null_pointer_is_valid #...}
105#}