aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJimmi Holst Christensen <jimmiholstchristensen@gmail.com>2018-10-01 20:30:34 +0200
committerGitHub <noreply@github.com>2018-10-01 20:30:34 +0200
commitbc3e99c5e5a5f054e57a7056a64ff08762d42e9f (patch)
tree96d17ec46014f8545cfb0b43cabf8b1b2141a301
parentd4d22df1d90d9d78f2960e807c3dad061ed1c71a (diff)
downloadzig-bc3e99c5e5a5f054e57a7056a64ff08762d42e9f.tar.gz
zig-bc3e99c5e5a5f054e57a7056a64ff08762d42e9f.zip
Fixed StackTrace not being resolved when panic is invalid (#1615)
-rw-r--r--src/analyze.cpp4
-rw-r--r--test/compile_errors.zig10
2 files changed, 13 insertions, 1 deletions
diff --git a/src/analyze.cpp b/src/analyze.cpp
index 14cba3970e..4f8b2f8880 100644
--- a/src/analyze.cpp
+++ b/src/analyze.cpp
@@ -1058,7 +1058,10 @@ ZigType *get_ptr_to_stack_trace_type(CodeGen *g) {
if (g->stack_trace_type == nullptr) {
ConstExprValue *stack_trace_type_val = get_builtin_value(g, "StackTrace");
assert(stack_trace_type_val->type->id == ZigTypeIdMetaType);
+
g->stack_trace_type = stack_trace_type_val->data.x_type;
+ assertNoError(type_resolve(g, g->stack_trace_type, ResolveStatusZeroBitsKnown));
+
g->ptr_to_stack_trace_type = get_pointer_to_type(g, g->stack_trace_type, false);
}
return g->ptr_to_stack_trace_type;
@@ -6560,4 +6563,3 @@ uint32_t get_host_int_bytes(CodeGen *g, ZigType *struct_type, TypeStructField *f
LLVMTypeRef field_type = LLVMStructGetTypeAtIndex(struct_type->type_ref, field->gen_index);
return LLVMStoreSizeOfType(g->target_data_ref, field_type);
}
-
diff --git a/test/compile_errors.zig b/test/compile_errors.zig
index fb7b536be9..3b1b4a2496 100644
--- a/test/compile_errors.zig
+++ b/test/compile_errors.zig
@@ -2,6 +2,16 @@ const tests = @import("tests.zig");
pub fn addCases(cases: *tests.CompileErrorContext) void {
cases.add(
+ "Panic declared with wrong type signature in tests",
+ \\test "" {}
+ \\
+ \\pub fn panic() void {}
+ \\
+ ,
+ ".tmp_source.zig:3:5: error: expected 'fn([]const u8, ?*builtin.StackTrace) noreturn', found 'fn() void'",
+ );
+
+ cases.add(
"compile error when evaluating return type of inferred error set",
\\const Car = struct {
\\ foo: *SymbolThatDoesNotExist,