zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit 6d0afc2bd233121d6b82f66cc09f74310a6eea4a (tree)
parent 03b6d9f547417e1f56f5dfb5079f7aa2dee832a6
Author: Andrew Kelley <superjoe30@gmail.com>
Date:   Thu,  2 Mar 2017 18:51:19 -0500

add compile error for assigning number literal to non-comptime var

Diffstat:
Msrc/ir.cpp | 4+++-
Mstd/hash_map.zig | 3++-
Mtest/run_tests.cpp | 7+++++++
3 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/src/ir.cpp b/src/ir.cpp @@ -7858,6 +7858,8 @@ static TypeTableEntry *ir_analyze_instruction_decl_var(IrAnalyze *ira, IrInstruc result_type = ira->codegen->builtin_types.entry_invalid; } + bool is_comptime_var = ir_get_var_is_comptime(var); + switch (result_type->id) { case TypeTableEntryIdTypeDecl: zig_unreachable(); @@ -7865,7 +7867,7 @@ static TypeTableEntry *ir_analyze_instruction_decl_var(IrAnalyze *ira, IrInstruc break; // handled above case TypeTableEntryIdNumLitFloat: case TypeTableEntryIdNumLitInt: - if (is_export || is_extern || casted_init_value->value.special == ConstValSpecialRuntime) { + if (is_export || is_extern || (!var->src_is_const && !is_comptime_var)) { ir_add_error_node(ira, source_node, buf_sprintf("unable to infer variable type")); result_type = ira->codegen->builtin_types.entry_invalid; } diff --git a/std/hash_map.zig b/std/hash_map.zig @@ -7,7 +7,8 @@ const Allocator = mem.Allocator; const want_modification_safety = !@compileVar("is_release"); const debug_u32 = if (want_modification_safety) u32 else void; -pub fn HashMap(comptime K: type, comptime V: type, comptime hash: fn(key: K)->u32, +pub fn HashMap(comptime K: type, comptime V: type, + comptime hash: fn(key: K)->u32, comptime eql: fn(a: K, b: K)->bool) -> type { struct { diff --git a/test/run_tests.cpp b/test/run_tests.cpp @@ -1697,6 +1697,13 @@ fn foo() { } fn bar() -> i32 { 0 } )SOURCE", 1, ".tmp_source.zig:3:8: error: return value ignored"); + + add_compile_fail_case("integer literal on a non-comptime var", R"SOURCE( +fn foo() { + var i = 0; + while (i < 10; i += 1) { } +} + )SOURCE", 1, ".tmp_source.zig:3:5: error: unable to infer variable type"); } //////////////////////////////////////////////////////////////////////////////