1entity bug is
2end entity;
3
4architecture a of bug is
5  type enum_t is (enum0, enum1);
6  subtype enum_subtype_t is enum_t;
7
8  type enum_vec_t is array (natural range <>) of enum_t;
9  function resolve_enum(values : enum_vec_t) return enum_t;
10  subtype resolved_enum_t is resolve_enum enum_t;
11
12  function resolve_enum(values : enum_vec_t) return enum_t is
13  begin
14    return values(0);
15  end;
16
17  function func return enum_t is
18  begin
19    return enum_subtype_t'low;
20  end;
21
22  function func2 return enum_t is
23  begin
24    return resolved_enum_t'high;
25  end;
26
27begin
28
29  main : process is
30  begin
31    -- Should both be optimised out during constant folding
32    assert func = enum_t'low;
33    assert func2 = enum_t'high;
34    wait;
35  end process;
36end;
37