| author | |
| committer | |
| log | 95857d6b2180c1bc1009a0ebb173ba66d44c34f7 |
| tree | 70cf160373d67ad8ed5d46af78d91f5bc6bb5aaf |
| parent | 36243567e610808834147218fa791cbaab535941 |
| signature |
Resolves: #203652 files changed, 13 insertions(+), 1 deletions(-)
src/Sema.zig+6-1| ... | ... | @@ -2274,15 +2274,20 @@ pub fn resolveFinalDeclValue( |
| 2274 | 2274 | src: LazySrcLoc, |
| 2275 | 2275 | air_ref: Air.Inst.Ref, |
| 2276 | 2276 | ) CompileError!Value { |
| 2277 | const zcu = sema.pt.zcu; | |
| 2278 | ||
| 2277 | 2279 | const val = try sema.resolveValueAllowVariables(air_ref) orelse { |
| 2278 | 2280 | return sema.failWithNeededComptime(block, src, .{ |
| 2279 | 2281 | .needed_comptime_reason = "global variable initializer must be comptime-known", |
| 2280 | 2282 | }); |
| 2281 | 2283 | }; |
| 2282 | 2284 | if (val.isGenericPoison()) return error.GenericPoison; |
| 2283 | if (val.canMutateComptimeVarState(sema.pt.zcu)) { | |
| 2285 | ||
| 2286 | const init_val: Value = if (val.getVariable(zcu)) |v| .fromInterned(v.init) else val; | |
| 2287 | if (init_val.canMutateComptimeVarState(zcu)) { | |
| 2284 | 2288 | return sema.fail(block, src, "global variable contains reference to comptime var", .{}); |
| 2285 | 2289 | } |
| 2290 | ||
| 2286 | 2291 | return val; |
| 2287 | 2292 | } |
| 2288 | 2293 |
test/cases/compile_errors/comptime_var_referenced_by_decl.zig+7| ... | ... | @@ -38,6 +38,12 @@ export const g: *const *const u32 = g: { |
| 38 | 38 | break :g &aggregate[0]; |
| 39 | 39 | }; |
| 40 | 40 | |
| 41 | // Mutable globals should have the same restrictions as const globals. | |
| 42 | export var h: *[1]u32 = h: { | |
| 43 | var x: [1]u32 = .{123}; | |
| 44 | break :h &x; | |
| 45 | }; | |
| 46 | ||
| 41 | 47 | // error |
| 42 | 48 | // |
| 43 | 49 | // :1:27: error: global variable contains reference to comptime var |
| ... | ... | @@ -47,3 +53,4 @@ export const g: *const *const u32 = g: { |
| 47 | 53 | // :22:24: error: global variable contains reference to comptime var |
| 48 | 54 | // :28:33: error: global variable contains reference to comptime var |
| 49 | 55 | // :34:40: error: global variable contains reference to comptime var |
| 56 | // :42:28: error: global variable contains reference to comptime var |