From d8da34c64c0def6915cead3e16991ed97515ed71 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Tue, 31 Jan 2017 02:30:10 -0500 Subject: [PATCH] fix crash when assigning too large value to integer closes #228 --- src/ir.cpp | 5 +++++ test/run_tests.cpp | 6 ++++++ 2 files changed, 11 insertions(+) diff --git a/src/ir.cpp b/src/ir.cpp index f5604194de..eee938c018 100644 --- a/src/ir.cpp +++ b/src/ir.cpp @@ -7591,6 +7591,11 @@ static TypeTableEntry *ir_analyze_instruction_decl_var(IrAnalyze *ira, IrInstruc var->value.type = result_type; assert(var->value.type); + if (result_type->id == TypeTableEntryIdInvalid) { + decl_var_instruction->base.other = &decl_var_instruction->base; + return ira->codegen->builtin_types.entry_void; + } + bool is_comptime = ir_get_var_is_comptime(var); if (casted_init_value->value.special != ConstValSpecialRuntime) { diff --git a/test/run_tests.cpp b/test/run_tests.cpp index a359bcdea2..987e72aaf9 100644 --- a/test/run_tests.cpp +++ b/test/run_tests.cpp @@ -1656,6 +1656,12 @@ fn bar() -> i32 { } )SOURCE", 1, ".tmp_source.zig:11:9: error: parameter of type '(integer literal)' requires comptime"); + add_compile_fail_case("assign too big number to u16", R"SOURCE( +fn foo() { + var vga_mem: u16 = 0xB8000; +} + )SOURCE", 1, ".tmp_source.zig:3:24: error: integer value 753664 cannot be implicitly casted to type 'u16'"); + } //////////////////////////////////////////////////////////////////////////////