4 ビットである必要がある列挙型がありますが、その型の変数を宣言すると、コンパイラはその変数に 8 ビットを割り当てます。
以下は、コードの簡略化されたバージョンです。
subtype ab_range_index is word range 0..3;
type ab_buffer_type is array(ab_range_index) of bit;
type Buffer is record
...
var1 : some_buffer_type;
Orig_AB_var : ab_buffer_type;
...
end record;
for Buffer use record
...
var1 at 16 range 0..5;
Orig_AB_var at 16 range 6..9;
...
end record;
...
type AB_type is (A,B);
for AB_type use (A => 0, B => 5);
for AB_type'Size use 4;
...
procedure Proc(AB_buff : ab_buffer_type) is
AB_var : AB_type; -- AB_var'Size returns 8 in debugger.
for AB_var use at AB_buff'Address;
begin
data_valid = AB_var'valid; -- returns false since the variable
-- contains extra bits
...
これはすべて、以前の gnat バージョンでは機能しましたが、gnat 4.4.6 では機能しませんでした。gnat が Ada 仕様に準拠していることは理解しています。
上記の例の AB_var を強制的に 4 ビットにする方法はありますか? 「Object_Size を試しましたが、8 ビットの倍数である必要があります。