library IEEE;
use IEEE.std_logic_1164.all;

entity delayline is
    generic (
        delay : positive
    );
    port (
        clk   : in std_logic;
        i     : in std_logic_vector;
        o     : out std_logic_vector
    );
end entity;

architecture rtl of delayline is
    type delay_t is array (natural range <>) of std_logic_vector;
    signal d : delay_t(delay - 1 downto 0)(i'range); -- This statement causes the problem
begin
    assert i'length = o'length
        report "i and o length should be equal"
        severity error;

    (o, d) <= d & i when rising_edge(clk);

end architecture rtl;