Skip to content

Dependency loop caused by explicit mentioning of function pointer type #16932

Open
@copygirl

Description

@copygirl

Zig Version

0.11.0

Steps to Reproduce and Observed Behavior

With the following zig code:

const ecs_iter_next_action_t = ?*const fn (*ecs_iter_t) void;
const ecs_iter_t = struct { next: ecs_iter_next_action_t };

test {
    _ = ecs_iter_next_action_t;
}

pub fn main() void {
    var it = ecs_iter_t{ .next = &next_action };
    it.next.?(&it);
}

fn next_action(it: *ecs_iter_t) void {
    @import("std").debug.print("{any}\n", .{it});
}

Running zig run yields the expected output:

main.ecs_iter_t{ .next = fn(*main.ecs_iter_t) void@220780 }

However when running zig test (here with -freference-trace), I get a dependency loop error:

main.zig:1:1: error: dependency loop detected
const ecs_iter_next_action_t = ?*const fn (*ecs_iter_t) void;
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
referenced by:
    ecs_iter_t: main.zig:2:20
    ecs_iter_next_action_t: main.zig:1:45
    ecs_iter_t: main.zig:2:35

Expected Behavior

No dependency loop.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugObserved behavior contradicts documented or intended behavior

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions