commit ba5eeea1e55ab07f7848890209001657df3a1cf0 (tree)
parent 7dd18294b7988062461430d431eaad2ad7b19daa
Author: Andrew Kelley <superjoe30@gmail.com>
Date: Tue, 5 Jun 2018 11:28:30 -0400
Merge remote-tracking branch 'origin/master' into llvm7
Diffstat:
2 files changed, 18 insertions(+), 0 deletions(-)
diff --git a/src/analyze.cpp b/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");
}
diff --git a/test/compile_errors.zig b/test/compile_errors.zig
@@ -2,6 +2,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 {
\\ const slice = ptr[0..2];