package MINE is
  function REVERSE_ALIAS(X : in bit_vector) return bit_vector;
end MINE;

package body MINE is
  function REVERSE_ALIAS(X : in bit_vector) return bit_vector is
    variable Y : bit_vector(X'range);
    alias Y_ALIAS : bit_vector(X'length-1 downto 0) is Y;
    alias X_ALIAS : bit_vector(X'length-1 downto 0) is X;
  begin
    for i in 0 to X_ALIAS'length - 1 loop
        Y_ALIAS(i) := X_ALIAS(X_ALIAS'length - 1 - i);
    end loop;
    return Y;
  end REVERSE_ALIAS;
end MINE;

use work.MINE.all;
entity TEST_REVERSE_ALIAS is
end TEST_REVERSE_ALIAS;

architecture TWISTED of TEST_REVERSE_ALIAS is
  signal A : bit_vector(5 downto 0) := "111000";
  signal B : bit_vector(24 to 35) := "000110001101";
  signal C : bit_vector(40 downto 34) := "1111110";
  signal D : bit_vector(40 downto 35);
  signal E : bit_vector(0 to 11);
  signal F : bit_vector(0 to 6);
begin
  process
  begin
    wait for 10 ns;
    D <= REVERSE_ALIAS(A);
    E <= REVERSE_ALIAS(B);
    F <= REVERSE_ALIAS(C);
    wait;
  end process;
end TWISTED;
