authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2016-04-09 17:35:26-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2016-04-09 17:35:26-07:00
loge66ed0f2e230ad3aed9a4207997df0ab7c99c2d6
treedfc7985aac46309e4b9b9028d1b63485e0142879
parent707131e37b2ee384d46c26ada83f3c83edf7278d

add error for assigning null to non-nullable pointer

closes #133

2 files changed, 10 insertions(+), 3 deletions(-)

src/analyze.cpp+6-3
......@@ -3391,12 +3391,15 @@ static TypeTableEntry *analyze_null_literal_expr(CodeGen *g, ImportTableEntry *i
33913391 assert(node->type == NodeTypeNullLiteral);
33923392
33933393 if (!expected_type) {
3394 add_node_error(g, node,
3395 buf_sprintf("unable to determine null type"));
3394 add_node_error(g, node, buf_sprintf("unable to determine null type"));
33963395 return g->builtin_types.entry_invalid;
33973396 }
33983397
3399 assert(expected_type->id == TypeTableEntryIdMaybe);
3398 if (expected_type->id != TypeTableEntryIdMaybe) {
3399 add_node_error(g, node,
3400 buf_sprintf("expected maybe type, got '%s'", buf_ptr(&expected_type->name)));
3401 return g->builtin_types.entry_invalid;
3402 }
34003403
34013404 node->data.null_literal.resolved_struct_val_expr.type_entry = expected_type;
34023405 node->data.null_literal.resolved_struct_val_expr.source_node = node;
test/run_tests.cpp+4
......@@ -1810,6 +1810,10 @@ fn derp(){}
18101810 )SOURCE", 2,
18111811 ".tmp_source.zig:3:12: error: no label in scope named 'label'",
18121812 ".tmp_source.zig:5:1: error: label 'label' defined but not used");
1813
1814 add_compile_fail_case("assign null to non-nullable pointer", R"SOURCE(
1815const a: &u8 = null;
1816 )SOURCE", 1, ".tmp_source.zig:2:16: error: expected maybe type, got '&u8'");
18131817}
18141818
18151819//////////////////////////////////////////////////////////////////////////////