Commit 7a09482536
Changed files (2)
src
src/analyze.cpp
@@ -1018,6 +1018,8 @@ TypeTableEntry *get_fn_type(CodeGen *g, FnTypeId *fn_type_id) {
}
if (fn_type_id->return_type != nullptr) {
ensure_complete_type(g, fn_type_id->return_type);
+ if (type_is_invalid(fn_type_id->return_type))
+ return g->builtin_types.entry_invalid;
} else {
zig_panic("TODO implement inferred return types https://github.com/ziglang/zig/issues/447");
}
test/compile_errors.zig
@@ -1,6 +1,22 @@
const tests = @import("tests.zig");
pub fn addCases(cases: *tests.CompileErrorContext) void {
+ cases.add(
+ "error when evaluating return type",
+ \\const Foo = struct {
+ \\ map: i32(i32),
+ \\
+ \\ fn init() Foo {
+ \\ return undefined;
+ \\ }
+ \\};
+ \\export fn entry() void {
+ \\ var rule_set = try Foo.init();
+ \\}
+ ,
+ ".tmp_source.zig:2:13: error: invalid cast from type 'type' to 'i32'",
+ );
+
cases.add(
"slicing single-item pointer",
\\export fn entry(ptr: *i32) void {