master
1export const a: *u32 = a: {
2 var x: u32 = 123;
3 break :a &x;
4};
5
6export const b: [1]*u32 = b: {
7 var x: u32 = 123;
8 break :b .{&x};
9};
10
11export const c: *[1]u32 = c: {
12 var x: u32 = 123;
13 break :c (&x)[0..1];
14};
15
16export const d: *anyopaque = d: {
17 var x: u32 = 123;
18 break :d &x;
19};
20
21const S = extern struct { ptr: *u32 };
22export const e: S = e: {
23 var x: u32 = 123;
24 break :e .{ .ptr = &x };
25};
26
27// The pointer constness shouldn't matter - *any* reference to a comptime var is illegal in a global's value.
28export const f: *const u32 = f: {
29 var x: u32 = 123;
30 break :f &x;
31};
32
33// The pointer itself doesn't refer to a comptime var, but from it you can derive a pointer which does.
34export const g: *const *const u32 = g: {
35 const valid: u32 = 123;
36 var invalid: u32 = 123;
37 const aggregate: [2]*const u32 = .{ &valid, &invalid };
38 break :g &aggregate[0];
39};
40
41// Mutable globals should have the same restrictions as const globals.
42export var h: *[1]u32 = h: {
43 var x: [1]u32 = .{123};
44 break :h &x;
45};
46
47// error
48//
49// :1:27: error: global variable contains reference to comptime var
50// :2:5: note: 'a' points to comptime var declared here
51// :6:30: error: global variable contains reference to comptime var
52// :7:5: note: 'b[0]' points to comptime var declared here
53// :11:30: error: global variable contains reference to comptime var
54// :12:5: note: 'c' points to comptime var declared here
55// :16:33: error: global variable contains reference to comptime var
56// :17:5: note: 'd' points to comptime var declared here
57// :22:24: error: global variable contains reference to comptime var
58// :23:5: note: 'e.ptr' points to comptime var declared here
59// :28:33: error: global variable contains reference to comptime var
60// :29:5: note: 'f' points to comptime var declared here
61// :34:40: error: global variable contains reference to comptime var
62// :34:40: note: 'g' points to 'v0[0]', where
63// :36:5: note: 'v0[1]' points to comptime var declared here
64// :42:28: error: global variable contains reference to comptime var
65// :43:5: note: 'h' points to comptime var declared here