Skip to content

Issue with compilation when using arrays of functions, while executing external functions in the loop assigning the functions (in the array). #168

@FelixKawala

Description

@FelixKawala

Might have two separate issues here. I commented some peculiarities I found while playing around with the code.

Issue description:

Seems like adding an external function messes up the code generation, when arrays of functions are assigned. This also happens for arrays of structs that contain functions.

Issues:

  1. It seems like only the last function that was written to (in an array of functions) can be accessed, when using an external function in the loop.

  2. We also can't use range(...) to write to the function array. We need to use unroll(...).

The following code will not compile in the current configuration:

#[import] fn extern_fun(&u8) -> ();

#[export]
fn @main() -> i32 {
    let dummy_u8_ref:&u8;
    
    let mut test_arr:[fn()->i32 * 3];   // <- set this to 2 (since we are using 1 in test_arr(1)()) and it will compile. It seems like the last function
    let iterations = 3;                 // <- or set this to 2                                      written to can be accessed, every other function can't. 

    for i in unroll(0, iterations){     //    Changing this to "range" will result in no compilation even when excluding "extern_fun".
        extern_fun(dummy_u8_ref);       //    Without this it will compile just fine. (When using unroll).
        test_arr(i) = @||{i};           //    Without this it will not compile (no matter where the array is accessed).
    }
    
    test_arr(1)()                       //    Set this to 2 and it will compile. (0 also won't work). Without this line it will compile just fine. (With range or unroll).
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions