Commit bc3e99c5e5

Jimmi Holst Christensen <jimmiholstchristensen@gmail.com>
2018-10-01 20:30:34
Fixed StackTrace not being resolved when panic is invalid (#1615)
1 parent d4d22df
Changed files (2)
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);
 }
-
test/compile_errors.zig
@@ -1,6 +1,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 {