-
-
Notifications
You must be signed in to change notification settings - Fork 3.1k
Open
Labels
bugObserved behavior contradicts documented or intended behaviorObserved behavior contradicts documented or intended behaviorfrontendTokenization, parsing, AstGen, Sema, and Liveness.Tokenization, parsing, AstGen, Sema, and Liveness.
Milestone
Description
Zig Version
0.16.0-dev.731+958faa703
Steps to Reproduce and Observed Behavior
fn foo() ?i32 {
return returnNull();
}
inline fn returnNull() null {
return null;
}
pub fn main() void {
_ = foo();
}
Compiler crash context:
Analyzing 'nulltype.zig'
> %20 = func_fancy(cc={
%15 = extended(builtin_value(calling_convention_inline)) node_offset:5:1 to :5:10
%16 = break_inline(%20, %15)
}, ret_ty=@null_value, body={
%17 = dbg_stmt(2, 5)
%18 = restore_err_ret_index_fn_entry(@null_value) node_offset:6:5 to :6:16
%19 = ret_node(@null_value) node_offset:6:5 to :6:16
}) (lbrace=1:29,rbrace=3:1) node_offset:5:1 to :5:10
%21 = break_inline(%14, %20)
For full context, use the command
zig4 ast-check -t nulltype.zig
in nulltype.zig
> %6 = decl_val("returnNull") token_offset:2:12 to :2:22
thread 165743 panic: reached unreachable code
Unwind error at address `/proc/self/exe:0x1b1e8fd` (unwind info unavailable), remaining frames may be incorrect
/home/ryan/Programming/zig/zig/src/Type.zig:2895:16: 0x3c5f294 in comptimeOnlyInner__anon_471984 (main.zig)
=> unreachable,
^
/home/ryan/Programming/zig/zig/src/Type.zig:2700:36: 0x30760e2 in comptimeOnlySema (main.zig)
return try ty.comptimeOnlyInner(.sema, pt.zcu, pt.tid);
^
/home/ryan/Programming/zig/zig/src/Sema.zig:9210:75: 0x4fae9c4 in funcCommon (main.zig)
const ret_ty_requires_comptime = try bare_return_type.comptimeOnlySema(pt);
^
/home/ryan/Programming/zig/zig/src/Sema.zig:25496:27: 0x46efb63 in zirFuncFancy (main.zig)
return sema.funcCommon(
^
/home/ryan/Programming/zig/zig/src/Sema.zig:1218:67: 0x3bd9c17 in analyzeBodyInner (main.zig)
.func_fancy => try sema.zirFuncFancy(block, inst),
^
/home/ryan/Programming/zig/zig/src/Sema.zig:1062:30: 0x3c1eed2 in analyzeInlineBody (main.zig)
if (sema.analyzeBodyInner(block, body)) |_| {
^
/home/ryan/Programming/zig/zig/src/Sema.zig:1095:39: 0x30695a2 in resolveInlineBody (main.zig)
return (try sema.analyzeInlineBody(block, body, break_target)) orelse .unreachable_value;
^
/home/ryan/Programming/zig/zig/src/Zcu/PerThread.zig:1179:58: 0x2a32565 in analyzeNavVal (main.zig)
const result_ref = try sema.resolveInlineBody(&block, value_body, inst_resolved.inst);
^
/home/ryan/Programming/zig/zig/src/Zcu/PerThread.zig:1008:80: 0x2428432 in ensureNavValUpToDate (main.zig)
const invalidate_value: bool, const new_failed: bool = if (pt.analyzeNavVal(nav_id)) |result| res: {
^
/home/ryan/Programming/zig/zig/src/Sema.zig:31324:49: 0x30783b4 in ensureNavResolved (main.zig)
.fully => return pt.ensureNavValUpToDate(nav_index),
^
/home/ryan/Programming/zig/zig/src/Sema.zig:31352:31: 0x48b4ea0 in analyzeNavRefInner (main.zig)
try sema.ensureNavResolved(block, src, orig_nav_index, if (is_ref) .type else .fully);
^
/home/ryan/Programming/zig/zig/src/Sema.zig:31235:44: 0x3c74b68 in analyzeNavVal (main.zig)
const ref = try sema.analyzeNavRefInner(block, src, nav_index, false);
^
/home/ryan/Programming/zig/zig/src/Sema.zig:6550:30: 0x46dc8f4 in zirDeclVal (main.zig)
return sema.analyzeNavVal(block, src, nav);
^
/home/ryan/Programming/zig/zig/src/Sema.zig:1191:65: 0x3bd84a5 in analyzeBodyInner (main.zig)
.decl_val => try sema.zirDeclVal(block, inst),
^
/home/ryan/Programming/zig/zig/src/Sema.zig:1044:26: 0x3060571 in analyzeFnBody (main.zig)
sema.analyzeBodyInner(block, body) catch |err| switch (err) {
^
/home/ryan/Programming/zig/zig/src/Zcu/PerThread.zig:2951:23: 0x3065162 in analyzeFnBodyInner (main.zig)
sema.analyzeFnBody(&inner_block, fn_info.body) catch |err| switch (err) {
^
/home/ryan/Programming/zig/zig/src/Zcu/PerThread.zig:1727:40: 0x2a232fd in analyzeFuncBody (main.zig)
var air = try pt.analyzeFnBodyInner(func_index);
^
/home/ryan/Programming/zig/zig/src/Zcu/PerThread.zig:1647:66: 0x2423ce5 in ensureFuncBodyUpToDate (main.zig)
const ies_outdated, const new_failed = if (pt.analyzeFuncBody(func_index)) |result|
^
/home/ryan/Programming/zig/zig/src/Compilation.zig:5147:38: 0x21cfe20 in processOneJob (main.zig)
pt.ensureFuncBodyUpToDate(func) catch |err| switch (err) {
^
/home/ryan/Programming/zig/zig/src/Compilation.zig:5017:30: 0x2017d60 in performAllTheWork (main.zig)
try processOneJob(@intFromEnum(Zcu.PerThread.Id.main), comp, job);
^
/home/ryan/Programming/zig/zig/src/Compilation.zig:3094:31: 0x1eec903 in update (main.zig)
try comp.performAllTheWork(main_progress_node);
^
/home/ryan/Programming/zig/zig/src/main.zig:4504:20: 0x1f0462b in updateModule (main.zig)
try comp.update(prog_node);
^
/home/ryan/Programming/zig/zig/src/main.zig:3597:21: 0x1dc331b in buildOutputType (main.zig)
updateModule(comp, color, root_prog_node) catch |err| switch (err) {
^
/home/ryan/Programming/zig/zig/src/main.zig:267:31: 0x1e229f4 in mainArgs (main.zig)
return buildOutputType(gpa, arena, args, .run);
^
/home/ryan/Programming/zig/zig/src/main.zig:204:20: 0x1d495b6 in main (main.zig)
return mainArgs(gpa, arena, args);
^
/home/ryan/Programming/zig/zig/lib/std/start.zig:627:37: 0x1d46835 in callMain (std.zig)
const result = root.main() catch |err| {
^
/home/ryan/Programming/zig/zig/lib/std/start.zig:232:5: 0x1d46261 in _start (std.zig)
asm volatile (switch (native_arch) {
^
Aborted (core dumped)
Expected Behavior
No crash, unsure if using null
as the return type here is intended to be allowed or not
Metadata
Metadata
Assignees
Labels
bugObserved behavior contradicts documented or intended behaviorObserved behavior contradicts documented or intended behaviorfrontendTokenization, parsing, AstGen, Sema, and Liveness.Tokenization, parsing, AstGen, Sema, and Liveness.