summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--evaluation.adb2
-rw-r--r--testsuite/gna/sr2737/bit_vector_rol_ror.vhdl64
-rw-r--r--testsuite/gna/sr2737/repro.on1962
-rw-r--r--testsuite/gna/sr2737/repro.vhdl16
-rw-r--r--testsuite/gna/sr2737/testit.vhdl27
-rwxr-xr-xtestsuite/gna/sr2737/testsuite.sh16
-rw-r--r--translate/translation.adb10
7 files changed, 2095 insertions, 2 deletions
diff --git a/evaluation.adb b/evaluation.adb
index e5d4560..4fd522c 100644
--- a/evaluation.adb
+++ b/evaluation.adb
@@ -679,7 +679,7 @@ package body Evaluation is
| Iir_Predefined_Array_Ror =>
Cnt := Cnt mod Len;
if not Dir_Left then
- Cnt := Len - Cnt;
+ Cnt := (Len - Cnt) mod Len;
end if;
end case;
diff --git a/testsuite/gna/sr2737/bit_vector_rol_ror.vhdl b/testsuite/gna/sr2737/bit_vector_rol_ror.vhdl
new file mode 100644
index 0000000..9812f24
--- /dev/null
+++ b/testsuite/gna/sr2737/bit_vector_rol_ror.vhdl
@@ -0,0 +1,64 @@
+entity bit_vector_rol_ror is
+end entity;
+
+architecture ghdl_bug of bit_vector_rol_ror is
+
+ function TO_STRING (VALUE : BIT_VECTOR) return STRING is
+ alias ivalue : BIT_VECTOR(1 to value'length) is value;
+ variable result : STRING(1 to value'length);
+ begin
+ if value'length < 1 then
+ return "";
+ else
+ for i in ivalue'range loop
+ if iValue(i) = '0' then
+ result(i) := '0';
+ else
+ result(i) := '1';
+ end if;
+ end loop;
+ return result;
+ end if;
+ end function to_string;
+
+begin
+
+ assert bit_vector'("11100") ror -8 = "00111" report "ror -8 is broken" severity warning;
+ assert bit_vector'("11100") ror -7 = "10011" report "ror -7 is broken" severity warning;
+ assert bit_vector'("11100") ror -6 = "11001" report "ror -6 is broken" severity warning;
+ assert bit_vector'("11100") ror -5 = "11100" report "ror -5 is broken" severity warning;
+ assert bit_vector'("11100") ror -4 = "01110" report "ror -4 is broken" severity warning;
+ assert bit_vector'("11100") ror -3 = "00111" report "ror -3 is broken" severity warning;
+ assert bit_vector'("11100") ror -2 = "10011" report "ror -2 is broken" severity warning;
+ assert bit_vector'("11100") ror -1 = "11001" report "ror -1 is broken" severity warning;
+ assert bit_vector'("11100") ror 0 = "11100" report "ror 0 is broken" severity warning;
+ assert bit_vector'("11100") ror 1 = "01110" report "ror 1 is broken" severity warning;
+ assert bit_vector'("11100") ror 2 = "00111" report "ror 2 is broken" severity warning;
+ assert bit_vector'("11100") ror 3 = "10011" report "ror 3 is broken" severity warning;
+ assert bit_vector'("11100") ror 4 = "11001" report "ror 4 is broken" severity warning;
+ assert bit_vector'("11100" ror 5) = "11100" report "ror 5 is broken" severity warning;
+ assert bit_vector'("11100") ror 5 = "11100" report string'("ror 5 is broken " & TO_STRING(bit_vector'("11100"))&" produces "& TO_STRING(bit_vector'("11100") ror 5) &"!") severity warning;
+ assert bit_vector'("11100") ror 6 = "01110" report "ror 6 is broken" severity warning;
+ assert bit_vector'("11100") ror 7 = "00111" report "ror 7 is broken" severity warning;
+ assert bit_vector'("11100") ror 8 = "10011" report "ror 8 is broken" severity warning;
+
+ assert bit_vector'("11100") rol -8 = "10011" report "rol -8 is broken" severity warning;
+ assert bit_vector'("11100") rol -7 = "00111" report "rol -7 is broken" severity warning;
+ assert bit_vector'("11100") rol -6 = "01110" report "rol -6 is broken" severity warning;
+ assert bit_vector'("11100" rol -5) = "11100" report "rol -5 is broken" severity warning;
+ assert bit_vector'("11100") rol -5 = "11100" report string'("rol -5 is broken " & TO_STRING(bit_vector'("11100"))&" produces "& TO_STRING(bit_vector'("11100") rol-5) &"!") severity warning;
+ assert bit_vector'("11100") rol -4 = "11001" report "rol -4 is broken" severity warning;
+ assert bit_vector'("11100") rol -3 = "10011" report "rol -3 is broken" severity warning;
+ assert bit_vector'("11100") rol -2 = "00111" report "rol -2 is broken" severity warning;
+ assert bit_vector'("11100") rol -1 = "01110" report "rol -1 is broken" severity warning;
+ assert bit_vector'("11100") rol 0 = "11100" report "rol 0 is broken" severity warning;
+ assert bit_vector'("11100") rol 1 = "11001" report "rol 1 is broken" severity warning;
+ assert bit_vector'("11100") rol 2 = "10011" report "rol 2 is broken" severity warning;
+ assert bit_vector'("11100") rol 3 = "00111" report "rol 3 is broken" severity warning;
+ assert bit_vector'("11100") rol 4 = "01110" report "rol 4 is broken" severity warning;
+ assert bit_vector'("11100") rol 5 = "11100" report "rol 5 is broken" severity warning;
+ assert bit_vector'("11100") rol 6 = "11001" report "rol 6 is broken" severity warning;
+ assert bit_vector'("11100") rol 7 = "10011" report "rol 7 is broken" severity warning;
+ assert bit_vector'("11100") rol 8 = "00111" report "rol 8 is broken" severity warning;
+
+end architecture; \ No newline at end of file
diff --git a/testsuite/gna/sr2737/repro.on b/testsuite/gna/sr2737/repro.on
new file mode 100644
index 0000000..8073243
--- /dev/null
+++ b/testsuite/gna/sr2737/repro.on
@@ -0,0 +1,1962 @@
+-- internal declarations, part 1
+
+type __ghdl_size_type is unsigned (32);
+
+type __ghdl_index_type is unsigned (32);
+
+type __ghdl_i32 is signed (32);
+
+type __ghdl_real is float;
+
+type __ghdl_i64 is signed (64);
+
+type __ghdl_file_index is unsigned (32);
+
+type __ghdl_file_index_ptr is access __ghdl_file_index;
+
+type __ghdl_char is unsigned (8);
+
+type __ghdl_chararray is array [__ghdl_index_type] of __ghdl_char;
+
+type __ghdl_char_ptr is access __ghdl_chararray;
+
+type __ghdl_char_ptr_array is array [__ghdl_index_type] of __ghdl_char_ptr;
+
+type __ghdl_char_ptr_array_ptr is access __ghdl_char_ptr_array;
+
+type __ghdl_ptr is access __ghdl_char;
+
+type __ghdl_str_len is record
+ len: __ghdl_index_type;
+ str: __ghdl_char_ptr;
+end record;
+
+type __ghdl_str_len_array is array [__ghdl_index_type] of __ghdl_str_len;
+
+type __ghdl_str_len_ptr is access __ghdl_str_len;
+
+type __ghdl_bool_type is boolean {false, true};
+
+type __ghdl_bool_array_type is array [__ghdl_index_type] of __ghdl_bool_type;
+
+type __ghdl_bool_array_ptr is access __ghdl_bool_array_type;
+
+type __ghdl_compare_type is enum {lt = 0, eq = 1, gt = 2};
+
+type __ghdl_location is record
+ filename: __ghdl_char_ptr;
+ line: __ghdl_i32;
+ col: __ghdl_i32;
+end record;
+
+type __ghdl_location_ptr is access __ghdl_location;
+
+type __ghdl_dir_type is enum {dir_to = 0, dir_downto = 1};
+
+external function __ghdl_alloc (
+ size: __ghdl_size_type)
+ return __ghdl_ptr;
+
+external procedure __ghdl_program_error (
+ filename: __ghdl_char_ptr;
+ line: __ghdl_i32;
+ code: __ghdl_index_type);
+
+external procedure __ghdl_bound_check_failed_l0 (
+ index: __ghdl_index_type);
+
+external procedure __ghdl_bound_check_failed_l1 (
+ filename: __ghdl_char_ptr;
+ line: __ghdl_i32);
+
+external function __ghdl_stack2_allocate (
+ size: __ghdl_index_type)
+ return __ghdl_ptr;
+
+external function __ghdl_stack2_mark (
+ )
+ return __ghdl_ptr;
+
+external procedure __ghdl_stack2_release (
+ mark: __ghdl_ptr);
+
+external procedure __ghdl_memcpy (
+ dest: __ghdl_ptr;
+ src: __ghdl_ptr;
+ length: __ghdl_index_type);
+
+external procedure __ghdl_deallocate (
+ OBJ: __ghdl_ptr);
+
+external function __ghdl_malloc (
+ length: __ghdl_index_type)
+ return __ghdl_ptr;
+
+external function __ghdl_malloc0 (
+ length: __ghdl_index_type)
+ return __ghdl_ptr;
+
+external function __ghdl_text_file_elaborate (
+ )
+ return __ghdl_file_index;
+
+external function __ghdl_file_elaborate (
+ NAME: __ghdl_char_ptr)
+ return __ghdl_file_index;
+
+external procedure __ghdl_file_finalize (
+ file: __ghdl_file_index);
+
+external procedure __ghdl_text_file_finalize (
+ file: __ghdl_file_index);
+
+external procedure __ghdl_protected_enter (
+ OBJ: __ghdl_ptr);
+
+external procedure __ghdl_protected_leave (
+ OBJ: __ghdl_ptr);
+
+external procedure __ghdl_protected_init (
+ OBJ: __ghdl_ptr);
+
+external procedure __ghdl_protected_fini (
+ OBJ: __ghdl_ptr);
+
+type __ghdl_rtik is enum {__ghdl_rtik_top = 0, __ghdl_rtik_library = 1,
+ __ghdl_rtik_package = 2, __ghdl_rtik_package_body = 3,
+ __ghdl_rtik_entity = 4, __ghdl_rtik_architecture = 5,
+ __ghdl_rtik_process = 6, __ghdl_rtik_block = 7,
+ __ghdl_rtik_if_generate = 8, __ghdl_rtik_for_generate = 9,
+ __ghdl_rtik_instance = 10, __ghdl_rtik_constant = 11,
+ __ghdl_rtik_iterator = 12, __ghdl_rtik_variable = 13,
+ __ghdl_rtik_signal = 14, __ghdl_rtik_file = 15, __ghdl_rtik_port = 16,
+ __ghdl_rtik_generic = 17, __ghdl_rtik_alias = 18, __ghdl_rtik_guard = 19,
+ __ghdl_rtik_component = 20, __ghdl_rtik_attribute = 21,
+ __ghdl_rtik_type_b2 = 22, __ghdl_rtik_type_e8 = 23,
+ __ghdl_rtik_type_e32 = 24, __ghdl_rtik_type_i32 = 25,
+ __ghdl_rtik_type_i64 = 26, __ghdl_rtik_type_f64 = 27,
+ __ghdl_rtik_type_p32 = 28, __ghdl_rtik_type_p64 = 29,
+ __ghdl_rtik_type_access = 30, __ghdl_rtik_type_array = 31,
+ __ghdl_rtik_type_record = 32, __ghdl_rtik_type_file = 33,
+ __ghdl_rtik_subtype_scalar = 34, __ghdl_rtik_subtype_array = 35,
+ __ghdl_rtik_subtype_array_ptr = 36,
+ __ghdl_rtik_subtype_unconstrained_array = 37,
+ __ghdl_rtik_subtype_record = 38, __ghdl_rtik_subtype_access = 39,
+ __ghdl_rtik_type_protected = 40, __ghdl_rtik_element = 41,
+ __ghdl_rtik_unit = 42, __ghdl_rtik_attribute_transaction = 43,
+ __ghdl_rtik_attribute_quiet = 44, __ghdl_rtik_attribute_stable = 45,
+ __ghdl_rtik_psl_assert = 46, __ghdl_rtik_error = 47};
+
+type __ghdl_rti_depth is unsigned (8);
+
+type __ghdl_rti_u8 is unsigned (8);
+
+type __ghdl_rti_common is record
+ kind: __ghdl_rtik;
+ depth: __ghdl_rti_depth;
+ mode: __ghdl_rti_u8;
+ max_depth: __ghdl_rti_depth;
+end record;
+
+type __ghdl_rti_access is access __ghdl_rti_common;
+
+type __ghdl_rti_array is array [__ghdl_index_type] of __ghdl_rti_access;
+
+type __ghdl_rti_arr_acc is access __ghdl_rti_array;
+
+type __ghdl_component_link_type is record;
+
+type __ghdl_component_link_acc is access __ghdl_component_link_type;
+
+type __ghdl_entity_link_type is record
+ rti: __ghdl_rti_access;
+ parent: __ghdl_component_link_acc;
+end record;
+
+type __ghdl_entity_link_acc is access __ghdl_entity_link_type;
+
+type __ghdl_component_link_type is record
+ INSTANCE: __ghdl_entity_link_acc;
+ stmt: __ghdl_rti_access;
+end record;
+
+type __ghdl_rti_loc is union
+ offset: __ghdl_index_type;
+ address: __ghdl_ptr;
+end union;
+
+type __ghdl_rtin_block is record
+ common: __ghdl_rti_common;
+ name: __ghdl_char_ptr;
+ loc: __ghdl_rti_loc;
+ parent: __ghdl_rti_access;
+ size: __ghdl_index_type;
+ nbr_child: __ghdl_index_type;
+ children: __ghdl_rti_arr_acc;
+end record;
+
+type __ghdl_rtin_type_scalar is record
+ common: __ghdl_rti_common;
+ name: __ghdl_char_ptr;
+end record;
+
+type __ghdl_rtin_type_enum is record
+ common: __ghdl_rti_common;
+ name: __ghdl_char_ptr;
+ nbr: __ghdl_index_type;
+ lits: __ghdl_char_ptr_array_ptr;
+end record;
+
+type __ghdl_rtin_subtype_scalar is record
+ common: __ghdl_rti_common;
+ name: __ghdl_char_ptr;
+ base: __ghdl_rti_access;
+ range: __ghdl_rti_loc;
+end record;
+
+type __ghdl_rti_unit_val is union
+ unit_32: __ghdl_i32;
+ unit_64: __ghdl_i64;
+ addr: __ghdl_ptr;
+end union;
+
+type __ghdl_rtin_unit is record
+ common: __ghdl_rti_common;
+ name: __ghdl_char_ptr;
+ value: __ghdl_rti_unit_val;
+end record;
+
+type __ghdl_rtin_type_physical is record
+ common: __ghdl_rti_common;
+ name: __ghdl_char_ptr;
+ nbr: __ghdl_index_type;
+ units: __ghdl_rti_arr_acc;
+end record;
+
+type __ghdl_rtin_type_fileacc is record
+ common: __ghdl_rti_common;
+ name: __ghdl_char_ptr;
+ base: __ghdl_rti_access;
+end record;
+
+type __ghdl_rtin_type_array is record
+ common: __ghdl_rti_common;
+ name: __ghdl_char_ptr;
+ element: __ghdl_rti_access;
+ nbr_dim: __ghdl_index_type;
+ indexes: __ghdl_rti_arr_acc;
+end record;
+
+type __ghdl_rtin_subtype_array is record
+ common: __ghdl_rti_common;
+ name: __ghdl_char_ptr;
+ basetype: __ghdl_rti_access;
+ bounds: __ghdl_rti_loc;
+ val_size: __ghdl_rti_loc;
+ sig_size: __ghdl_rti_loc;
+end record;
+
+type __ghdl_rtin_type_record is record
+ common: __ghdl_rti_common;
+ name: __ghdl_char_ptr;
+ nbrel: __ghdl_index_type;
+ elements: __ghdl_rti_arr_acc;
+end record;
+
+type __ghdl_rtin_element is record
+ common: __ghdl_rti_common;
+ name: __ghdl_char_ptr;
+ eltype: __ghdl_rti_access;
+ val_off: __ghdl_index_type;
+ sig_off: __ghdl_index_type;
+end record;
+
+type __ghdl_rtin_object is record
+ common: __ghdl_rti_common;
+ name: __ghdl_char_ptr;
+ loc: __ghdl_rti_loc;
+ obj_type: __ghdl_rti_access;
+end record;
+
+type __ghdl_rtin_instance is record
+ common: __ghdl_rti_common;
+ name: __ghdl_char_ptr;
+ loc: __ghdl_rti_loc;
+ parent: __ghdl_rti_access;
+ instance: __ghdl_rti_access;
+end record;
+
+type __ghdl_rtin_component is record
+ common: __ghdl_rti_common;
+ name: __ghdl_char_ptr;
+ nbr_child: __ghdl_index_type;
+ children: __ghdl_rti_arr_acc;
+end record;
+
+external procedure __ghdl_signal_name_rti (
+ OBJ: __ghdl_rti_access;
+ ctxt: __ghdl_rti_access;
+ addr: __ghdl_ptr);
+
+external procedure __ghdl_process_register (
+ this: __ghdl_ptr;
+ proc: __ghdl_ptr;
+ ctxt: __ghdl_rti_access;
+ addr: __ghdl_ptr);
+
+external procedure __ghdl_sensitized_process_register (
+ this: __ghdl_ptr;
+ proc: __ghdl_ptr;
+ ctxt: __ghdl_rti_access;
+ addr: __ghdl_ptr);
+
+external procedure __ghdl_postponed_process_register (
+ this: __ghdl_ptr;
+ proc: __ghdl_ptr;
+ ctxt: __ghdl_rti_access;
+ addr: __ghdl_ptr);
+
+external procedure __ghdl_postponed_sensitized_process_register (
+ this: __ghdl_ptr;
+ proc: __ghdl_ptr;
+ ctxt: __ghdl_rti_access;
+ addr: __ghdl_ptr);
+
+external procedure __ghdl_finalize_register (
+ this: __ghdl_ptr;
+ proc: __ghdl_ptr);
+
+-- package std.standard
+
+type std__standard__boolean is boolean {false, true};
+
+type std__standard__boolean__PTR is access std__standard__boolean;
+
+type std__standard__boolean__SIG is access std__standard__boolean;
+
+type std__standard__boolean__TRT is record
+ left: std__standard__boolean;
+ right: std__standard__boolean;
+ dir: __ghdl_dir_type;
+ length: __ghdl_index_type;
+end record;
+
+type std__standard__boolean__TRPTR is access std__standard__boolean__TRT;
+
+type std__standard__BOOLEAN_ARRAY is array [__ghdl_index_type] of
+ std__standard__boolean;
+
+type std__standard__bit is boolean {C_0, C_1};
+
+type std__standard__bit__PTR is access std__standard__bit;
+
+type std__standard__bit__SIG is access std__standard__bit;
+
+type std__standard__bit__TRT is record
+ left: std__standard__bit;
+ right: std__standard__bit;
+ dir: __ghdl_dir_type;
+ length: __ghdl_index_type;
+end record;
+
+type std__standard__bit__TRPTR is access std__standard__bit__TRT;
+
+type std__standard__character is enum {nul = 0, soh = 1, stx = 2, etx = 3,
+ eot = 4, enq = 5, ack = 6, bel = 7, bs = 8, ht = 9, lf = 10, vt = 11,
+ ff = 12, cr = 13, so = 14, si = 15, dle = 16, dc1 = 17, dc2 = 18, dc3 = 19,
+ dc4 = 20, nak = 21, syn = 22, etb = 23, can = 24, em = 25, sub = 26,
+ esc = 27, fsp = 28, gsp = 29, rsp = 30, usp = 31, C20 = 32, C21 = 33,
+ C22 = 34, C23 = 35, C24 = 36, C25 = 37, C26 = 38, C27 = 39, C28 = 40,
+ C29 = 41, C2a = 42, C2b = 43, C2c = 44, C2d = 45, C2e = 46, C2f = 47,
+ C_0 = 48, C_1 = 49, C_2 = 50, C_3 = 51, C_4 = 52, C_5 = 53, C_6 = 54,
+ C_7 = 55, C_8 = 56, C_9 = 57, C3a = 58, C3b = 59, C3c = 60, C3d = 61,
+ C3e = 62, C3f = 63, C40 = 64, C_A = 65, C_B = 66, C_C = 67, C_D = 68,
+ C_E = 69, C_F = 70, C_G = 71, C_H = 72, C_I = 73, C_J = 74, C_K = 75,
+ C_L = 76, C_M = 77, C_N = 78, C_O = 79, C_P = 80, C_Q = 81, C_R = 82,
+ C_S = 83, C_T = 84, C_U = 85, C_V = 86, C_W = 87, C_X = 88, C_Y = 89,
+ C_Z = 90, C5b = 91, C5c = 92, C5d = 93, C5e = 94, C5f = 95, C60 = 96,
+ C_a = 97, C_b = 98, C_c = 99, C_d = 100, C_e = 101, C_f = 102, C_g = 103,
+ C_h = 104, C_i = 105, C_j = 106, C_k = 107, C_l = 108, C_m = 109,
+ C_n = 110, C_o = 111, C_p = 112, C_q = 113, C_r = 114, C_s = 115,
+ C_t = 116, C_u = 117, C_v = 118, C_w = 119, C_x = 120, C_y = 121,
+ C_z = 122, C7b = 123, C7c = 124, C7d = 125, C7e = 126, del = 127,
+ c128 = 128, c129 = 129, c130 = 130, c131 = 131, c132 = 132, c133 = 133,
+ c134 = 134, c135 = 135, c136 = 136, c137 = 137, c138 = 138, c139 = 139,
+ c140 = 140, c141 = 141, c142 = 142, c143 = 143, c144 = 144, c145 = 145,
+ c146 = 146, c147 = 147, c148 = 148, c149 = 149, c150 = 150, c151 = 151,
+ c152 = 152, c153 = 153, c154 = 154, c155 = 155, c156 = 156, c157 = 157,
+ c158 = 158, c159 = 159, Ca0 = 160, Ca1 = 161, Ca2 = 162, Ca3 = 163,
+ Ca4 = 164, Ca5 = 165, Ca6 = 166, Ca7 = 167, Ca8 = 168, Ca9 = 169,
+ Caa = 170, Cab = 171, Cac = 172, Cad = 173, Cae = 174, Caf = 175,
+ Cb0 = 176, Cb1 = 177, Cb2 = 178, Cb3 = 179, Cb4 = 180, Cb5 = 181,
+ Cb6 = 182, Cb7 = 183, Cb8 = 184, Cb9 = 185, Cba = 186, Cbb = 187,
+ Cbc = 188, Cbd = 189, Cbe = 190, Cbf = 191, Cc0 = 192, Cc1 = 193,
+ Cc2 = 194, Cc3 = 195, Cc4 = 196, Cc5 = 197, Cc6 = 198, Cc7 = 199,
+ Cc8 = 200, Cc9 = 201, Cca = 202, Ccb = 203, Ccc = 204, Ccd = 205,
+ Cce = 206, Ccf = 207, Cd0 = 208, Cd1 = 209, Cd2 = 210, Cd3 = 211,
+ Cd4 = 212, Cd5 = 213, Cd6 = 214, Cd7 = 215, Cd8 = 216, Cd9 = 217,
+ Cda = 218, Cdb = 219, Cdc = 220, Cdd = 221, Cde = 222, Cdf = 223,
+ Ce0 = 224, Ce1 = 225, Ce2 = 226, Ce3 = 227, Ce4 = 228, Ce5 = 229,
+ Ce6 = 230, Ce7 = 231, Ce8 = 232, Ce9 = 233, Cea = 234, Ceb = 235,
+ Cec = 236, Ced = 237, Cee = 238, Cef = 239, Cf0 = 240, Cf1 = 241,
+ Cf2 = 242, Cf3 = 243, Cf4 = 244, Cf5 = 245, Cf6 = 246, Cf7 = 247,
+ Cf8 = 248, Cf9 = 249, Cfa = 250, Cfb = 251, Cfc = 252, Cfd = 253,
+ Cfe = 254, Cff = 255};
+
+type std__standard__character__PTR is access std__standard__character;
+
+type std__standard__character__SIG is access std__standard__character;
+
+type std__standard__character__TRT is record
+ left: std__standard__character;
+ right: std__standard__character;
+ dir: __ghdl_dir_type;
+ length: __ghdl_index_type;
+end record;
+
+type std__standard__character__TRPTR is access std__standard__character__TRT;
+
+external constant std__standard__character__BTR : std__standard__character__TRT
+ ;
+
+type std__standard__severity_level is enum {note = 0, warning = 1, error = 2,
+ failure = 3};
+
+type std__standard__severity_level__PTR is access std__standard__severity_level
+ ;
+
+type std__standard__severity_level__SIG is access std__standard__severity_level
+ ;
+
+type std__standard__severity_level__TRT is record
+ left: std__standard__severity_level;
+ right: std__standard__severity_level;
+ dir: __ghdl_dir_type;
+ length: __ghdl_index_type;
+end record;
+
+type std__standard__severity_level__TRPTR is access
+ std__standard__severity_level__TRT;
+
+external constant std__standard__severity_level__BTR :
+ std__standard__severity_level__TRT;
+
+type std__standard__UNIVERSAL_INTEGER__BT is signed (32);
+
+type std__standard__UNIVERSAL_INTEGER__BT__PTR is access
+ std__standard__UNIVERSAL_INTEGER__BT;
+
+type std__standard__UNIVERSAL_INTEGER__BT__SIG is access
+ std__standard__UNIVERSAL_INTEGER__BT;
+
+type std__standard__UNIVERSAL_INTEGER__BT__TRT is record
+ left: std__standard__UNIVERSAL_INTEGER__BT;
+ right: std__standard__UNIVERSAL_INTEGER__BT;
+ dir: __ghdl_dir_type;
+ length: __ghdl_index_type;
+end record;
+
+type std__standard__UNIVERSAL_INTEGER__BT__TRPTR is access
+ std__standard__UNIVERSAL_INTEGER__BT__TRT;
+
+external constant std__standard__UNIVERSAL_INTEGER__STR :
+ std__standard__UNIVERSAL_INTEGER__BT__TRT;
+
+type std__standard__UNIVERSAL_REAL__BT is float;
+
+type std__standard__UNIVERSAL_REAL__BT__PTR is access
+ std__standard__UNIVERSAL_REAL__BT;
+
+type std__standard__UNIVERSAL_REAL__BT__SIG is access
+ std__standard__UNIVERSAL_REAL__BT;
+
+type std__standard__UNIVERSAL_REAL__BT__TRT is record
+ left: std__standard__UNIVERSAL_REAL__BT;
+ right: std__standard__UNIVERSAL_REAL__BT;
+ dir: __ghdl_dir_type;
+end record;
+
+type std__standard__UNIVERSAL_REAL__BT__TRPTR is access
+ std__standard__UNIVERSAL_REAL__BT__TRT;
+
+external constant std__standard__UNIVERSAL_REAL__STR :
+ std__standard__UNIVERSAL_REAL__BT__TRT;
+
+type std__standard__CONVERTIBLE_INTEGER__BT is signed (32);
+
+type std__standard__CONVERTIBLE_INTEGER__BT__PTR is access
+ std__standard__CONVERTIBLE_INTEGER__BT;
+
+type std__standard__CONVERTIBLE_INTEGER__BT__SIG is access
+ std__standard__CONVERTIBLE_INTEGER__BT;
+
+type std__standard__CONVERTIBLE_INTEGER__BT__TRT is record
+ left: std__standard__CONVERTIBLE_INTEGER__BT;
+ right: std__standard__CONVERTIBLE_INTEGER__BT;
+ dir: __ghdl_dir_type;
+ length: __ghdl_index_type;
+end record;
+
+type std__standard__CONVERTIBLE_INTEGER__BT__TRPTR is access
+ std__standard__CONVERTIBLE_INTEGER__BT__TRT;
+
+type std__standard__CONVERTIBLE_REAL__BT is float;
+
+type std__standard__CONVERTIBLE_REAL__BT__PTR is access
+ std__standard__CONVERTIBLE_REAL__BT;
+
+type std__standard__CONVERTIBLE_REAL__BT__SIG is access
+ std__standard__CONVERTIBLE_REAL__BT;
+
+type std__standard__CONVERTIBLE_REAL__BT__TRT is record
+ left: std__standard__CONVERTIBLE_REAL__BT;
+ right: std__standard__CONVERTIBLE_REAL__BT;
+ dir: __ghdl_dir_type;
+end record;
+
+type std__standard__CONVERTIBLE_REAL__BT__TRPTR is access
+ std__standard__CONVERTIBLE_REAL__BT__TRT;
+
+type std__standard__real__BT is float;
+
+type std__standard__real__BT__PTR is access std__standard__real__BT;
+
+type std__standard__real__BT__SIG is access std__standard__real__BT;
+
+type std__standard__real__BT__TRT is record
+ left: std__standard__real__BT;
+ right: std__standard__real__BT;
+ dir: __ghdl_dir_type;
+end record;
+
+type std__standard__real__BT__TRPTR is access std__standard__real__BT__TRT;
+
+external constant std__standard__real__STR : std__standard__real__BT__TRT;
+
+type std__standard__integer__BT is signed (32);
+
+type std__standard__integer__BT__PTR is access std__standard__integer__BT;
+
+type std__standard__integer__BT__SIG is access std__standard__integer__BT;
+
+type std__standard__integer__BT__TRT is record
+ left: std__standard__integer__BT;
+ right: std__standard__integer__BT;
+ dir: __ghdl_dir_type;
+ length: __ghdl_index_type;
+end record;
+
+type std__standard__integer__BT__TRPTR is access
+ std__standard__integer__BT__TRT;
+
+external constant std__standard__integer__STR : std__standard__integer__BT__TRT
+ ;
+
+external constant std__standard__natural__STR : std__standard__integer__BT__TRT
+ ;
+
+external constant std__standard__positive__STR :
+ std__standard__integer__BT__TRT;
+
+type std__standard__string__BASE is array [__ghdl_index_type] of
+ std__standard__character;
+
+type std__standard__string__BASEP is access std__standard__string__BASE;
+
+type std__standard__string__SIGBASE is array [__ghdl_index_type] of
+ std__standard__character__SIG;
+
+type std__standard__string__SIGBASEP is access std__standard__string__SIGBASE;
+
+type std__standard__string__BOUND is record
+ dim_1: std__standard__integer__BT__TRT;
+end record;
+
+type std__standard__string__BOUNDP is access std__standard__string__BOUND;
+
+type std__standard__string is record
+ BASE: std__standard__string__BASEP;
+ BOUNDS: std__standard__string__BOUNDP;
+end record;
+
+type std__standard__string__PTR is access std__standard__string;
+
+type std__standard__string__SIG is record
+ BASE: std__standard__string__SIGBASEP;
+ BOUNDS: std__standard__string__BOUNDP;
+end record;
+
+type std__standard__string__SIGPTR is access std__standard__string__SIG;
+
+external constant std__standard__string__BR1 : std__standard__string__BOUND;
+
+external function std__standard__string_EQ (
+ left: std__standard__string__PTR;
+ right: std__standard__string__PTR)
+ return std__standard__boolean;
+
+external function std__standard__string_CMP (
+ left: std__standard__string__PTR;
+ right: std__standard__string__PTR)
+ return __ghdl_compare_type;
+
+external procedure std__standard__string_CONCAT (
+ res: std__standard__string__PTR;
+ left: std__standard__string__PTR;
+ right: std__standard__string__PTR);
+
+type std__standard__bit_vector__BASE is array [__ghdl_index_type] of
+ std__standard__bit;
+
+type std__standard__bit_vector__BASEP is access std__standard__bit_vector__BASE
+ ;
+
+type std__standard__bit_vector__SIGBASE is array [__ghdl_index_type] of
+ std__standard__bit__SIG;
+
+type std__standard__bit_vector__SIGBASEP is access
+ std__standard__bit_vector__SIGBASE;
+
+type std__standard__bit_vector__BOUND is record
+ dim_1: std__standard__integer__BT__TRT;
+end record;
+
+type std__standard__bit_vector__BOUNDP is access
+ std__standard__bit_vector__BOUND;
+
+type std__standard__bit_vector is record
+ BASE: std__standard__bit_vector__BASEP;
+ BOUNDS: std__standard__bit_vector__BOUNDP;
+end record;
+
+type std__standard__bit_vector__PTR is access std__standard__bit_vector;
+
+type std__standard__bit_vector__SIG is record
+ BASE: std__standard__bit_vector__SIGBASEP;
+ BOUNDS: std__standard__bit_vector__BOUNDP;
+end record;
+
+type std__standard__bit_vector__SIGPTR is access std__standard__bit_vector__SIG
+ ;
+
+external constant std__standard__bit_vector__BR1 :
+ std__standard__bit_vector__BOUND;
+
+external function std__standard__bit_vector_EQ (
+ left: std__standard__bit_vector__PTR;
+ right: std__standard__bit_vector__PTR)
+ return std__standard__boolean;
+
+external function std__standard__bit_vector_CMP (
+ left: std__standard__bit_vector__PTR;
+ right: std__standard__bit_vector__PTR)
+ return __ghdl_compare_type;
+
+external procedure std__standard__bit_vector_CONCAT (
+ res: std__standard__bit_vector__PTR;
+ left: std__standard__bit_vector__PTR;
+ right: std__standard__bit_vector__PTR);
+
+external procedure std__standard__bit_vector_NOT (
+ res: std__standard__bit_vector__PTR;
+ left: std__standard__bit_vector__PTR);
+
+external procedure std__standard__bit_vector_AND (
+ res: std__standard__bit_vector__PTR;
+ left: std__standard__bit_vector__PTR;
+ right: std__standard__bit_vector__PTR);
+
+external procedure std__standard__bit_vector_OR (
+ res: std__standard__bit_vector__PTR;
+ left: std__standard__bit_vector__PTR;
+ right: std__standard__bit_vector__PTR);
+
+external procedure std__standard__bit_vector_NAND (
+ res: std__standard__bit_vector__PTR;
+ left: std__standard__bit_vector__PTR;
+ right: std__standard__bit_vector__PTR);
+
+external procedure std__standard__bit_vector_NOR (
+ res: std__standard__bit_vector__PTR;
+ left: std__standard__bit_vector__PTR;
+ right: std__standard__bit_vector__PTR);
+
+external procedure std__standard__bit_vector_XOR (
+ res: std__standard__bit_vector__PTR;
+ left: std__standard__bit_vector__PTR;
+ right: std__standard__bit_vector__PTR);
+
+external procedure std__standard__bit_vector_XNOR (
+ res: std__standard__bit_vector__PTR;
+ left: std__standard__bit_vector__PTR;
+ right: std__standard__bit_vector__PTR);
+
+external procedure std__standard__bit_vector_SHL (
+ res: std__standard__bit_vector__PTR;
+ left: std__standard__bit_vector__PTR;
+ right: std__standard__integer__BT);
+
+external procedure std__standard__bit_vector_SHA (
+ res: std__standard__bit_vector__PTR;
+ left: std__standard__bit_vector__PTR;
+ right: std__standard__integer__BT);
+
+external procedure std__standard__bit_vector_ROT (
+ res: std__standard__bit_vector__PTR;
+ left: std__standard__bit_vector__PTR;
+ right: std__standard__integer__BT);
+
+type std__standard__time__BT is signed (64);
+
+type std__standard__time__BT__PTR is access std__standard__time__BT;
+
+type std__standard__time__BT__SIG is access std__standard__time__BT;
+
+type std__standard__time__BT__TRT is record
+ left: std__standard__time__BT;
+ right: std__standard__time__BT;
+ dir: __ghdl_dir_type;
+end record;
+
+type std__standard__time__BT__TRPTR is access std__standard__time__BT__TRT;
+
+external constant std__standard__time__STR : std__standard__time__BT__TRT;
+
+external constant std__standard__delay_length__STR :
+ std__standard__time__BT__TRT;
+
+type std__standard__file_open_kind is enum {read_mode = 0, write_mode = 1,
+ append_mode = 2};
+
+type std__standard__file_open_kind__PTR is access std__standard__file_open_kind
+ ;
+
+type std__standard__file_open_kind__SIG is access std__standard__file_open_kind
+ ;
+
+type std__standard__file_open_kind__TRT is record
+ left: std__standard__file_open_kind;
+ right: std__standard__file_open_kind;
+ dir: __ghdl_dir_type;
+ length: __ghdl_index_type;
+end record;
+
+type std__standard__file_open_kind__TRPTR is access
+ std__standard__file_open_kind__TRT;
+
+external constant std__standard__file_open_kind__BTR :
+ std__standard__file_open_kind__TRT;
+
+type std__standard__file_open_status is enum {open_ok = 0, status_error = 1,
+ name_error = 2, mode_error = 3};
+
+type std__standard__file_open_status__PTR is access
+ std__standard__file_open_status;
+
+type std__standard__file_open_status__SIG is access
+ std__standard__file_open_status;
+
+type std__standard__file_open_status__TRT is record
+ left: std__standard__file_open_status;
+ right: std__standard__file_open_status;
+ dir: __ghdl_dir_type;
+ length: __ghdl_index_type;
+end record;
+
+type std__standard__file_open_status__TRPTR is access
+ std__standard__file_open_status__TRT;
+
+external constant std__standard__file_open_status__BTR :
+ std__standard__file_open_status__TRT;
+
+external constant std__standard__RTI : __ghdl_rtin_block;
+
+external constant std__standard__boolean__RTI : __ghdl_rtin_type_enum;
+
+external constant std__standard__bit__RTI : __ghdl_rtin_type_enum;
+
+external constant std__standard__character__RTI : __ghdl_rtin_type_enum;
+
+external constant std__standard__severity_level__RTI : __ghdl_rtin_type_enum;
+
+external constant std__standard__UNIVERSAL_INTEGER__BT__RTI :
+ __ghdl_rtin_type_scalar;
+
+external constant std__standard__UNIVERSAL_INTEGER__RTI :
+ __ghdl_rtin_subtype_scalar;
+
+external constant std__standard__UNIVERSAL_REAL__BT__RTI :
+ __ghdl_rtin_type_scalar;
+
+external constant std__standard__UNIVERSAL_REAL__RTI :
+ __ghdl_rtin_subtype_scalar;
+
+external constant std__standard__integer__BT__RTI : __ghdl_rtin_type_scalar;
+
+external constant std__standard__integer__RTI : __ghdl_rtin_subtype_scalar;
+
+external constant std__standard__real__BT__RTI : __ghdl_rtin_type_scalar;
+
+external constant std__standard__real__RTI : __ghdl_rtin_subtype_scalar;
+
+external constant std__standard__natural__RTI : __ghdl_rtin_subtype_scalar;
+
+external constant std__standard__positive__RTI : __ghdl_rtin_subtype_scalar;
+
+external constant std__standard__string__RTI : __ghdl_rtin_type_array;
+
+external constant std__standard__bit_vector__RTI : __ghdl_rtin_type_array;
+
+external constant std__standard__time__BT__RTI : __ghdl_rtin_type_physical;
+
+external constant std__standard__time__RTI : __ghdl_rtin_subtype_scalar;
+
+external constant std__standard__delay_length__RTI : __ghdl_rtin_subtype_scalar
+ ;
+
+external constant std__standard__file_open_kind__RTI : __ghdl_rtin_type_enum;
+
+external constant std__standard__file_open_status__RTI : __ghdl_rtin_type_enum;
+
+external constant std__standard__foreign__RTI : __ghdl_rtin_object;
+
+type __ghdl_std_ulogic_boolean_array_type is subarray
+ std__standard__BOOLEAN_ARRAY[__ghdl_index_type'[9]];
+
+external constant __ghdl_std_ulogic_to_boolean_array :
+ __ghdl_std_ulogic_boolean_array_type;
+
+-- internal declarations, part 2
+
+external var __ghdl_now : std__standard__time__BT;
+
+external procedure __ghdl_assert_failed (
+ msg: std__standard__string__PTR;
+ severity: std__standard__severity_level;
+ location: __ghdl_location_ptr;
+ unit: __ghdl_rti_access);
+
+external procedure __ghdl_psl_assert_failed (
+ msg: std__standard__string__PTR;
+ severity: std__standard__severity_level;
+ location: __ghdl_location_ptr;
+ unit: __ghdl_rti_access);
+
+external procedure __ghdl_report (
+ msg: std__standard__string__PTR;
+ severity: std__standard__severity_level;
+ location: __ghdl_location_ptr;
+ unit: __ghdl_rti_access);
+
+external var __ghdl_assert_default_report : std__standard__string;
+
+external procedure __ghdl_text_write (
+ file: __ghdl_file_index;
+ str: std__standard__string__PTR);
+
+external function __ghdl_text_read_length (
+ file: __ghdl_file_index;
+ str: std__standard__string__PTR)
+ return std__standard__integer__BT;
+
+external procedure __ghdl_write_scalar (
+ file: __ghdl_file_index;
+ ptr: __ghdl_ptr;
+ length: __ghdl_index_type);
+
+external procedure __ghdl_read_scalar (
+ file: __ghdl_file_index;
+ ptr: __ghdl_ptr;
+ length: __ghdl_index_type);
+
+external function __ghdl_real_exp (
+ left: std__standard__real__BT;
+ right: std__standard__integer__BT)
+ return std__standard__real__BT;
+
+external function __ghdl_integer_exp (
+ left: std__standard__integer__BT;
+ right: std__standard__integer__BT)
+ return std__standard__integer__BT;
+
+external procedure __ghdl_image_b2 (
+ res: std__standard__string__PTR;
+ val: __ghdl_bool_type;
+ rti: __ghdl_rti_access);
+
+external function __ghdl_value_b2 (
+ val: std__standard__string__PTR;
+ rti: __ghdl_rti_access)
+ return __ghdl_bool_type;
+
+external procedure __ghdl_image_e8 (
+ res: std__standard__string__PTR;
+ val: __ghdl_i32;
+ rti: __ghdl_rti_access);
+
+external function __ghdl_value_e8 (
+ val: std__standard__string__PTR;
+ rti: __ghdl_rti_access)
+ return __ghdl_i32;
+
+external procedure __ghdl_image_e32 (
+ res: std__standard__string__PTR;
+ val: __ghdl_i32;
+ rti: __ghdl_rti_access);
+
+external function __ghdl_value_e32 (
+ val: std__standard__string__PTR;
+ rti: __ghdl_rti_access)
+ return __ghdl_i32;
+
+external procedure __ghdl_image_i32 (
+ res: std__standard__string__PTR;
+ val: __ghdl_i32);
+
+external function __ghdl_value_i32 (
+ val: std__standard__string__PTR)
+ return __ghdl_i32;
+
+external procedure __ghdl_image_p32 (
+ res: std__standard__string__PTR;
+ val: __ghdl_i32;
+ rti: __ghdl_rti_access);
+
+external function __ghdl_value_p32 (
+ val: std__standard__string__PTR;
+ rti: __ghdl_rti_access)
+ return __ghdl_i32;
+
+external procedure __ghdl_image_p64 (
+ res: std__standard__string__PTR;
+ val: __ghdl_i64;
+ rti: __ghdl_rti_access);
+
+external function __ghdl_value_p64 (
+ val: std__standard__string__PTR;
+ rti: __ghdl_rti_access)
+ return __ghdl_i64;
+
+external procedure __ghdl_image_f64 (
+ res: std__standard__string__PTR;
+ val: __ghdl_real);
+
+external function __ghdl_value_f64 (
+ val: std__standard__string__PTR)
+ return __ghdl_real;
+
+external procedure __ghdl_text_file_open (
+ file: __ghdl_file_index;
+ mode: __ghdl_i32;
+ str: std__standard__string__PTR);
+
+external procedure __ghdl_file_open (
+ file: __ghdl_file_index;
+ mode: __ghdl_i32;
+ str: std__standard__string__PTR);
+
+external function __ghdl_text_file_open_status (
+ file: __ghdl_file_index;
+ mode: __ghdl_i32;
+ str: std__standard__string__PTR)
+ return __ghdl_i32;
+
+external function __ghdl_file_open_status (
+ file: __ghdl_file_index;
+ mode: __ghdl_i32;
+ str: std__standard__string__PTR)
+ return __ghdl_i32;
+
+external function __ghdl_file_endfile (
+ file: __ghdl_file_index)
+ return std__standard__boolean;
+
+external procedure __ghdl_text_file_close (
+ file: __ghdl_file_index);
+
+external procedure __ghdl_file_close (
+ file: __ghdl_file_index);
+
+external procedure __ghdl_signal_create_resolution (
+ func: __ghdl_ptr;
+ INSTANCE: __ghdl_ptr;
+ sig: __ghdl_ptr;
+ nbr_sig: __ghdl_index_type);
+
+type __ghdl_scalar_bytes is subarray __ghdl_chararray[__ghdl_index_type'[8]];
+
+type __ghdl_signal_ptr is access;
+
+type __ghdl_signal is record
+ value: __ghdl_scalar_bytes;
+ driving_value: __ghdl_scalar_bytes;
+ last_value: __ghdl_scalar_bytes;
+ last_event: std__standard__time__BT;
+ last_active: std__standard__time__BT;
+ active_chain: __ghdl_signal_ptr;
+ event: std__standard__boolean;
+ active: std__standard__boolean;
+ has_active: __ghdl_bool_type;
+end record;
+
+type __ghdl_signal_ptr is access __ghdl_signal;
+
+type __ghdl_signal_ptr_ptr is access __ghdl_signal_ptr;
+
+external var __ghdl_signal_active_chain : __ghdl_signal_ptr;
+
+external procedure __ghdl_signal_merge_rti (
+ sig: __ghdl_signal_ptr;
+ RTI: __ghdl_rti_access);
+
+external procedure __ghdl_signal_add_source (
+ targ: __ghdl_signal_ptr;
+ src: __ghdl_signal_ptr);
+
+external procedure __ghdl_signal_effective_value (
+ targ: __ghdl_signal_ptr;
+ src: __ghdl_signal_ptr);
+
+external procedure __ghdl_signal_set_disconnect (
+ sig: __ghdl_signal_ptr;
+ time: std__standard__time__BT);
+
+external procedure __ghdl_signal_disconnect (
+ sig: __ghdl_signal_ptr);
+
+external function __ghdl_signal_get_nbr_drivers (
+ sig: __ghdl_signal_ptr)
+ return __ghdl_index_type;
+
+external function __ghdl_signal_get_nbr_ports (
+ sig: __ghdl_signal_ptr)
+ return __ghdl_index_type;
+
+external function __ghdl_signal_read_driver (
+ sig: __ghdl_signal_ptr;
+ num: __ghdl_index_type)
+ return __ghdl_ptr;
+
+external function __ghdl_signal_read_port (
+ sig: __ghdl_signal_ptr;
+ num: __ghdl_index_type)
+ return __ghdl_ptr;
+
+external function __ghdl_signal_driving (
+ sig: __ghdl_signal_ptr)
+ return std__standard__boolean;
+
+external procedure __ghdl_signal_simple_assign_error (
+ sig: __ghdl_signal_ptr;
+ filename: __ghdl_char_ptr;
+ line: __ghdl_i32);
+
+external procedure __ghdl_signal_start_assign_error (
+ sig: __ghdl_signal_ptr;
+ reject: std__standard__time__BT;
+ after: std__standard__time__BT;
+ filename: __ghdl_char_ptr;
+ line: __ghdl_i32);
+
+external procedure __ghdl_signal_next_assign_error (
+ sig: __ghdl_signal_ptr;
+ after: std__standard__time__BT;
+ filename: __ghdl_char_ptr;
+ line: __ghdl_i32);
+
+external procedure __ghdl_signal_start_assign_null (
+ sig: __ghdl_signal_ptr;
+ reject: std__standard__time__BT;
+ after: std__standard__time__BT);
+
+external procedure __ghdl_signal_next_assign_null (
+ sig: __ghdl_signal_ptr;
+ after: std__standard__time__BT);
+
+external function __ghdl_create_signal_e8 (
+ init_val: __ghdl_i32;
+ resolv_func: __ghdl_ptr;
+ resolv_inst: __ghdl_ptr)
+ return __ghdl_signal_ptr;
+
+external procedure __ghdl_signal_init_e8 (
+ sig: __ghdl_signal_ptr;
+ val: __ghdl_i32);
+
+external procedure __ghdl_signal_simple_assign_e8 (
+ sig: __ghdl_signal_ptr;
+ val: __ghdl_i32);
+
+external procedure __ghdl_signal_start_assign_e8 (
+ sig: __ghdl_signal_ptr;
+ reject: std__standard__time__BT;
+ val: __ghdl_i32;
+ after: std__standard__time__BT);
+
+external procedure __ghdl_signal_next_assign_e8 (
+ sig: __ghdl_signal_ptr;
+ val: __ghdl_i32;
+ after: std__standard__time__BT);
+
+external procedure __ghdl_signal_associate_e8 (
+ sig: __ghdl_signal_ptr;
+ val: __ghdl_i32);
+
+external function __ghdl_signal_driving_value_e8 (
+ sig: __ghdl_signal_ptr)
+ return __ghdl_i32;
+
+external function __ghdl_create_signal_e32 (
+ init_val: __ghdl_i32;
+ resolv_func: __ghdl_ptr;
+ resolv_inst: __ghdl_ptr)
+ return __ghdl_signal_ptr;
+
+external procedure __ghdl_signal_init_e32 (
+ sig: __ghdl_signal_ptr;
+ val: __ghdl_i32);
+
+external procedure __ghdl_signal_simple_assign_e32 (
+ sig: __ghdl_signal_ptr;
+ val: __ghdl_i32);
+
+external procedure __ghdl_signal_start_assign_e32 (
+ sig: __ghdl_signal_ptr;
+ reject: std__standard__time__BT;
+ val: __ghdl_i32;
+ after: std__standard__time__BT);
+
+external procedure __ghdl_signal_next_assign_e32 (
+ sig: __ghdl_signal_ptr;
+ val: __ghdl_i32;
+ after: std__standard__time__BT);
+
+external procedure __ghdl_signal_associate_e32 (
+ sig: __ghdl_signal_ptr;
+ val: __ghdl_i32);
+
+external function __ghdl_signal_driving_value_e32 (
+ sig: __ghdl_signal_ptr)
+ return __ghdl_i32;
+
+external function __ghdl_create_signal_b2 (
+ init_val: __ghdl_bool_type;
+ resolv_func: __ghdl_ptr;
+ resolv_inst: __ghdl_ptr)
+ return __ghdl_signal_ptr;
+
+external procedure __ghdl_signal_init_b2 (
+ sig: __ghdl_signal_ptr;
+ val: __ghdl_bool_type);
+
+external procedure __ghdl_signal_simple_assign_b2 (
+ sig: __ghdl_signal_ptr;
+ val: __ghdl_bool_type);
+
+external procedure __ghdl_signal_start_assign_b2 (
+ sig: __ghdl_signal_ptr;
+ reject: std__standard__time__BT;
+ val: __ghdl_bool_type;
+ after: std__standard__time__BT);
+
+external procedure __ghdl_signal_next_assign_b2 (
+ sig: __ghdl_signal_ptr;
+ val: __ghdl_bool_type;
+ after: std__standard__time__BT);
+
+external procedure __ghdl_signal_associate_b2 (
+ sig: __ghdl_signal_ptr;
+ val: __ghdl_bool_type);
+
+external function __ghdl_signal_driving_value_b2 (
+ sig: __ghdl_signal_ptr)
+ return __ghdl_bool_type;
+
+external function __ghdl_create_signal_i32 (
+ init_val: __ghdl_i32;
+ resolv_func: __ghdl_ptr;
+ resolv_inst: __ghdl_ptr)
+ return __ghdl_signal_ptr;
+
+external procedure __ghdl_signal_init_i32 (
+ sig: __ghdl_signal_ptr;
+ val: __ghdl_i32);
+
+external procedure __ghdl_signal_simple_assign_i32 (
+ sig: __ghdl_signal_ptr;
+ val: __ghdl_i32);
+
+external procedure __ghdl_signal_start_assign_i32 (
+ sig: __ghdl_signal_ptr;
+ reject: std__standard__time__BT;
+ val: __ghdl_i32;
+ after: std__standard__time__BT);
+
+external procedure __ghdl_signal_next_assign_i32 (
+ sig: __ghdl_signal_ptr;
+ val: __ghdl_i32;
+ after: std__standard__time__BT);
+
+external procedure __ghdl_signal_associate_i32 (
+ sig: __ghdl_signal_ptr;
+ val: __ghdl_i32);
+
+external function __ghdl_signal_driving_value_i32 (
+ sig: __ghdl_signal_ptr)
+ return __ghdl_i32;
+
+external function __ghdl_create_signal_f64 (
+ init_val: __ghdl_real;
+ resolv_func: __ghdl_ptr;
+ resolv_inst: __ghdl_ptr)
+ return __ghdl_signal_ptr;
+
+external procedure __ghdl_signal_init_f64 (
+ sig: __ghdl_signal_ptr;
+ val: __ghdl_real);
+
+external procedure __ghdl_signal_simple_assign_f64 (
+ sig: __ghdl_signal_ptr;
+ val: __ghdl_real);
+
+external procedure __ghdl_signal_start_assign_f64 (
+ sig: __ghdl_signal_ptr;
+ reject: std__standard__time__BT;
+ val: __ghdl_real;
+ after: std__standard__time__BT);
+
+external procedure __ghdl_signal_next_assign_f64 (
+ sig: __ghdl_signal_ptr;
+ val: __ghdl_real;
+ after: std__standard__time__BT);
+
+external procedure __ghdl_signal_associate_f64 (
+ sig: __ghdl_signal_ptr;
+ val: __ghdl_real);
+
+external function __ghdl_signal_driving_value_f64 (
+ sig: __ghdl_signal_ptr)
+ return __ghdl_real;
+
+external function __ghdl_create_signal_i64 (
+ init_val: __ghdl_i64;
+ resolv_func: __ghdl_ptr;
+ resolv_inst: __ghdl_ptr)
+ return __ghdl_signal_ptr;
+
+external procedure __ghdl_signal_init_i64 (
+ sig: __ghdl_signal_ptr;
+ val: __ghdl_i64);
+
+external procedure __ghdl_signal_simple_assign_i64 (
+ sig: __ghdl_signal_ptr;
+ val: __ghdl_i64);
+
+external procedure __ghdl_signal_start_assign_i64 (
+ sig: __ghdl_signal_ptr;
+ reject: std__standard__time__BT;
+ val: __ghdl_i64;
+ after: std__standard__time__BT);
+
+external procedure __ghdl_signal_next_assign_i64 (
+ sig: __ghdl_signal_ptr;
+ val: __ghdl_i64;
+ after: std__standard__time__BT);
+
+external procedure __ghdl_signal_associate_i64 (
+ sig: __ghdl_signal_ptr;
+ val: __ghdl_i64);
+
+external function __ghdl_signal_driving_value_i64 (
+ sig: __ghdl_signal_ptr)
+ return __ghdl_i64;
+
+external procedure __ghdl_process_add_sensitivity (
+ sig: __ghdl_signal_ptr);
+
+external procedure __ghdl_process_add_driver (
+ sig: __ghdl_signal_ptr);
+
+external procedure __ghdl_signal_direct_driver (
+ sig: __ghdl_signal_ptr;
+ drv: __ghdl_ptr);
+
+external procedure __ghdl_signal_in_conversion (
+ func: __ghdl_ptr;
+ INSTANCE: __ghdl_ptr;
+ src: __ghdl_signal_ptr;
+ src_len: __ghdl_index_type;
+ dst: __ghdl_signal_ptr;
+ dst_len: __ghdl_index_type);
+
+external procedure __ghdl_signal_out_conversion (
+ func: __ghdl_ptr;
+ INSTANCE: __ghdl_ptr;
+ src: __ghdl_signal_ptr;
+ src_len: __ghdl_index_type;
+ dst: __ghdl_signal_ptr;
+ dst_len: __ghdl_index_type);
+
+external function __ghdl_create_stable_signal (
+ val: std__standard__time__BT)
+ return __ghdl_signal_ptr;
+
+external function __ghdl_create_quiet_signal (
+ val: std__standard__time__BT)
+ return __ghdl_signal_ptr;
+
+external function __ghdl_create_transaction_signal (
+ )
+ return __ghdl_signal_ptr;
+
+external procedure __ghdl_signal_attribute_register_prefix (
+ sig: __ghdl_signal_ptr);
+
+external function __ghdl_create_delayed_signal (
+ sig: __ghdl_signal_ptr;
+ val: std__standard__time__BT)
+ return __ghdl_signal_ptr;
+
+external function __ghdl_signal_create_guard (
+ this: __ghdl_ptr;
+ proc: __ghdl_ptr)
+ return __ghdl_signal_ptr;
+
+external procedure __ghdl_signal_guard_dependence (
+ sig: __ghdl_signal_ptr);
+
+external procedure __ghdl_process_wait_exit (
+ );
+
+external procedure __ghdl_process_wait_timeout (
+ time: std__standard__time__BT);
+
+external procedure __ghdl_process_wait_set_timeout (
+ time: std__standard__time__BT);
+
+external procedure __ghdl_process_wait_add_sensitivity (
+ sig: __ghdl_signal_ptr);
+
+external function __ghdl_process_wait_suspend (
+ )
+ return __ghdl_bool_type;
+
+external procedure __ghdl_process_wait_close (
+ );
+
+external procedure __ghdl_get_path_name (
+ res: std__standard__string__PTR;
+ ctxt: __ghdl_rti_access;
+ addr: __ghdl_ptr;
+ name: __ghdl_str_len_ptr);
+
+external procedure __ghdl_get_instance_name (
+ res: std__standard__string__PTR;
+ ctxt: __ghdl_rti_access;
+ addr: __ghdl_ptr;
+ name: __ghdl_str_len_ptr);
+
+private constant _UI00000000 : subarray __ghdl_chararray[__ghdl_index_type'[11]
+ ];
+
+constant _UI00000000 := {__ghdl_char'[114], __ghdl_char'[101],
+ __ghdl_char'[112], __ghdl_char'[114], __ghdl_char'[111], __ghdl_char'[46],
+ __ghdl_char'[118], __ghdl_char'[104], __ghdl_char'[100], __ghdl_char'[108],
+ __ghdl_char'[0]};
+
+--F repro.vhdl
+
+-- entity repro
+
+type work__repro__INSTTYPE is record;
+
+type work__repro__INSTPTR is access work__repro__INSTTYPE;
+
+type work__repro__INSTTYPE is record
+ RTI: __ghdl_entity_link_type;
+end record;
+
+public procedure work__repro__ELAB (
+ INSTANCE: work__repro__INSTPTR);
+
+external constant work__RTI : __ghdl_rtin_type_scalar;
+
+public constant work__repro__RTI : __ghdl_rtin_block;
+
+private constant work__repro__RTISTR : subarray __ghdl_chararray[
+ __ghdl_index_type'[6]];
+
+constant work__repro__RTISTR := {__ghdl_char'[114], __ghdl_char'[101],
+ __ghdl_char'[112], __ghdl_char'[114], __ghdl_char'[111], __ghdl_char'[0]};
+
+private constant work__repro__RTIARRAY : subarray __ghdl_rti_array[
+ __ghdl_index_type'[1]];
+
+constant work__repro__RTIARRAY := {__ghdl_rti_access'[null]};
+
+constant work__repro__RTI := {.common =
+ {.kind = __ghdl_rtik'[__ghdl_rtik_entity], .depth = __ghdl_rti_depth'[1],
+ .mode = __ghdl_rti_u8'[0], .max_depth = __ghdl_rti_depth'[0]},
+ .name = __ghdl_char_ptr'address (work__repro__RTISTR),
+ .loc = {.address = __ghdl_ptr'[null]},
+ .parent = __ghdl_rti_access'unchecked_address (work__RTI),
+ .size = __ghdl_index_type'sizeof (work__repro__INSTTYPE),
+ .nbr_child = __ghdl_index_type'[0],
+ .children = __ghdl_rti_arr_acc'address (work__repro__RTIARRAY)};
+
+public procedure work__repro__ELAB (
+ INSTANCE: work__repro__INSTPTR)
+declare
+begin
+ --# 1
+ --# 1
+end;
+
+--F repro.vhdl
+
+-- architecture ghdl_bug
+
+type work__repro__ARCH__ghdl_bug__INSTTYPE is record;
+
+type work__repro__ARCH__ghdl_bug__INSTPTR is access
+ work__repro__ARCH__ghdl_bug__INSTTYPE;
+
+type work__repro__ARCH__ghdl_bug__P0__INSTTYPE is record
+end record;
+
+type work__repro__ARCH__ghdl_bug__P1__INSTTYPE is record
+end record;
+
+type work__repro__ARCH__ghdl_bug__P2__INSTTYPE is record
+end record;
+
+type work__repro__ARCH__ghdl_bug__P3__INSTTYPE is record
+end record;
+
+type work__repro__ARCH__ghdl_bug__INSTTYPE is record
+ ENTITY: work__repro__INSTTYPE;
+ P0: work__repro__ARCH__ghdl_bug__P0__INSTTYPE;
+ P1: work__repro__ARCH__ghdl_bug__P1__INSTTYPE;
+ P2: work__repro__ARCH__ghdl_bug__P2__INSTTYPE;
+ P3: work__repro__ARCH__ghdl_bug__P3__INSTTYPE;
+end record;
+
+public constant work__repro__ARCH__ghdl_bug__INSTSIZE : __ghdl_index_type;
+
+constant work__repro__ARCH__ghdl_bug__INSTSIZE := __ghdl_index_type'sizeof (
+ work__repro__ARCH__ghdl_bug__INSTTYPE);
+
+public procedure work__repro__ARCH__ghdl_bug__ELAB (
+ INSTANCE: work__repro__INSTPTR);
+
+public constant work__repro__ARCH__ghdl_bug__RTI : __ghdl_rtin_block;
+
+public constant work__repro__ARCH__ghdl_bug__P0__RTI : __ghdl_rtin_block;
+
+private constant work__repro__ARCH__ghdl_bug__P0__RTISTR : subarray
+ __ghdl_chararray[__ghdl_index_type'[3]];
+
+constant work__repro__ARCH__ghdl_bug__P0__RTISTR := {__ghdl_char'[80],
+ __ghdl_char'[48], __ghdl_char'[0]};
+
+private constant work__repro__ARCH__ghdl_bug__P0__RTIARRAY : subarray
+ __ghdl_rti_array[__ghdl_index_type'[1]];
+
+constant work__repro__ARCH__ghdl_bug__P0__RTIARRAY :=
+ {__ghdl_rti_access'[null]};
+
+constant work__repro__ARCH__ghdl_bug__P0__RTI := {.common =
+ {.kind = __ghdl_rtik'[__ghdl_rtik_process], .depth = __ghdl_rti_depth'[2],
+ .mode = __ghdl_rti_u8'[0], .max_depth = __ghdl_rti_depth'[0]},
+ .name = __ghdl_char_ptr'address (work__repro__ARCH__ghdl_bug__P0__RTISTR),
+ .loc = {.offset = __ghdl_index_type'offsetof (
+ work__repro__ARCH__ghdl_bug__INSTTYPE.P0)},
+ .parent = __ghdl_rti_access'unchecked_address (
+ work__repro__ARCH__ghdl_bug__RTI),
+ .size = __ghdl_index_type'sizeof (work__repro__ARCH__ghdl_bug__P0__INSTTYPE)
+ , .nbr_child = __ghdl_index_type'[0],
+ .children = __ghdl_rti_arr_acc'address (
+ work__repro__ARCH__ghdl_bug__P0__RTIARRAY)};
+
+public constant work__repro__ARCH__ghdl_bug__P1__RTI : __ghdl_rtin_block;
+
+private constant work__repro__ARCH__ghdl_bug__P1__RTISTR : subarray
+ __ghdl_chararray[__ghdl_index_type'[3]];
+
+constant work__repro__ARCH__ghdl_bug__P1__RTISTR := {__ghdl_char'[80],
+ __ghdl_char'[49], __ghdl_char'[0]};
+
+private constant work__repro__ARCH__ghdl_bug__P1__RTIARRAY : subarray
+ __ghdl_rti_array[__ghdl_index_type'[1]];
+
+constant work__repro__ARCH__ghdl_bug__P1__RTIARRAY :=
+ {__ghdl_rti_access'[null]};
+
+constant work__repro__ARCH__ghdl_bug__P1__RTI := {.common =
+ {.kind = __ghdl_rtik'[__ghdl_rtik_process], .depth = __ghdl_rti_depth'[2],
+ .mode = __ghdl_rti_u8'[0], .max_depth = __ghdl_rti_depth'[0]},
+ .name = __ghdl_char_ptr'address (work__repro__ARCH__ghdl_bug__P1__RTISTR),
+ .loc = {.offset = __ghdl_index_type'offsetof (
+ work__repro__ARCH__ghdl_bug__INSTTYPE.P1)},
+ .parent = __ghdl_rti_access'unchecked_address (
+ work__repro__ARCH__ghdl_bug__RTI),
+ .size = __ghdl_index_type'sizeof (work__repro__ARCH__ghdl_bug__P1__INSTTYPE)
+ , .nbr_child = __ghdl_index_type'[0],
+ .children = __ghdl_rti_arr_acc'address (
+ work__repro__ARCH__ghdl_bug__P1__RTIARRAY)};
+
+public constant work__repro__ARCH__ghdl_bug__P2__RTI : __ghdl_rtin_block;
+
+private constant work__repro__ARCH__ghdl_bug__P2__RTISTR : subarray
+ __ghdl_chararray[__ghdl_index_type'[3]];
+
+constant work__repro__ARCH__ghdl_bug__P2__RTISTR := {__ghdl_char'[80],
+ __ghdl_char'[50], __ghdl_char'[0]};
+
+private constant work__repro__ARCH__ghdl_bug__P2__RTIARRAY : subarray
+ __ghdl_rti_array[__ghdl_index_type'[1]];
+
+constant work__repro__ARCH__ghdl_bug__P2__RTIARRAY :=
+ {__ghdl_rti_access'[null]};
+
+constant work__repro__ARCH__ghdl_bug__P2__RTI := {.common =
+ {.kind = __ghdl_rtik'[__ghdl_rtik_process], .depth = __ghdl_rti_depth'[2],
+ .mode = __ghdl_rti_u8'[0], .max_depth = __ghdl_rti_depth'[0]},
+ .name = __ghdl_char_ptr'address (work__repro__ARCH__ghdl_bug__P2__RTISTR),
+ .loc = {.offset = __ghdl_index_type'offsetof (
+ work__repro__ARCH__ghdl_bug__INSTTYPE.P2)},
+ .parent = __ghdl_rti_access'unchecked_address (
+ work__repro__ARCH__ghdl_bug__RTI),
+ .size = __ghdl_index_type'sizeof (work__repro__ARCH__ghdl_bug__P2__INSTTYPE)
+ , .nbr_child = __ghdl_index_type'[0],
+ .children = __ghdl_rti_arr_acc'address (
+ work__repro__ARCH__ghdl_bug__P2__RTIARRAY)};
+
+public constant work__repro__ARCH__ghdl_bug__P3__RTI : __ghdl_rtin_block;
+
+private constant work__repro__ARCH__ghdl_bug__P3__RTISTR : subarray
+ __ghdl_chararray[__ghdl_index_type'[3]];
+
+constant work__repro__ARCH__ghdl_bug__P3__RTISTR := {__ghdl_char'[80],
+ __ghdl_char'[51], __ghdl_char'[0]};
+
+private constant work__repro__ARCH__ghdl_bug__P3__RTIARRAY : subarray
+ __ghdl_rti_array[__ghdl_index_type'[1]];
+
+constant work__repro__ARCH__ghdl_bug__P3__RTIARRAY :=
+ {__ghdl_rti_access'[null]};
+
+constant work__repro__ARCH__ghdl_bug__P3__RTI := {.common =
+ {.kind = __ghdl_rtik'[__ghdl_rtik_process], .depth = __ghdl_rti_depth'[2],
+ .mode = __ghdl_rti_u8'[0], .max_depth = __ghdl_rti_depth'[0]},
+ .name = __ghdl_char_ptr'address (work__repro__ARCH__ghdl_bug__P3__RTISTR),
+ .loc = {.offset = __ghdl_index_type'offsetof (
+ work__repro__ARCH__ghdl_bug__INSTTYPE.P3)},
+ .parent = __ghdl_rti_access'unchecked_address (
+ work__repro__ARCH__ghdl_bug__RTI),
+ .size = __ghdl_index_type'sizeof (work__repro__ARCH__ghdl_bug__P3__INSTTYPE)
+ , .nbr_child = __ghdl_index_type'[0],
+ .children = __ghdl_rti_arr_acc'address (
+ work__repro__ARCH__ghdl_bug__P3__RTIARRAY)};
+
+private constant work__repro__ARCH__ghdl_bug__RTISTR : subarray
+ __ghdl_chararray[__ghdl_index_type'[9]];
+
+constant work__repro__ARCH__ghdl_bug__RTISTR := {__ghdl_char'[103],
+ __ghdl_char'[104], __ghdl_char'[100], __ghdl_char'[108], __ghdl_char'[95],
+ __ghdl_char'[98], __ghdl_char'[117], __ghdl_char'[103], __ghdl_char'[0]};
+
+private constant work__repro__ARCH__ghdl_bug__RTIARRAY : subarray
+ __ghdl_rti_array[__ghdl_index_type'[5]];
+
+constant work__repro__ARCH__ghdl_bug__RTIARRAY :=
+ {__ghdl_rti_access'unchecked_address (work__repro__ARCH__ghdl_bug__P0__RTI),
+ __ghdl_rti_access'unchecked_address (work__repro__ARCH__ghdl_bug__P1__RTI),
+ __ghdl_rti_access'unchecked_address (work__repro__ARCH__ghdl_bug__P2__RTI),
+ __ghdl_rti_access'unchecked_address (work__repro__ARCH__ghdl_bug__P3__RTI),
+ __ghdl_rti_access'[null]};
+
+constant work__repro__ARCH__ghdl_bug__RTI := {.common =
+ {.kind = __ghdl_rtik'[__ghdl_rtik_architecture],
+ .depth = __ghdl_rti_depth'[1], .mode = __ghdl_rti_u8'[0],
+ .max_depth = __ghdl_rti_depth'[0]},
+ .name = __ghdl_char_ptr'address (work__repro__ARCH__ghdl_bug__RTISTR),
+ .loc = {.offset = __ghdl_index_type'offsetof (
+ work__repro__ARCH__ghdl_bug__INSTTYPE.ENTITY)},
+ .parent = __ghdl_rti_access'unchecked_address (work__repro__RTI),
+ .size = __ghdl_index_type'sizeof (work__repro__ARCH__ghdl_bug__INSTTYPE),
+ .nbr_child = __ghdl_index_type'[4],
+ .children = __ghdl_rti_arr_acc'address (work__repro__ARCH__ghdl_bug__RTIARRAY
+ )};
+
+
+private procedure work__repro__ARCH__ghdl_bug__P0__PROC (
+ INSTANCE: work__repro__ARCH__ghdl_bug__INSTPTR)
+declare
+ type work__repro__ARCH__ghdl_bug__P0__U0 is subarray
+ std__standard__bit_vector__BASE[__ghdl_index_type'[5]];
+ private constant _UI00000001 : work__repro__ARCH__ghdl_bug__P0__U0;
+ constant _UI00000001 := {};
+ private constant work__repro__ARCH__ghdl_bug__P0__U1__STB :
+ std__standard__bit_vector__BOUND;
+ constant work__repro__ARCH__ghdl_bug__P0__U1__STB := {.dim_1 =
+ {.left = std__standard__integer__BT'[0],
+ .right = std__standard__integer__BT'[4], .dir = __ghdl_dir_type'[dir_to],
+ .length = __ghdl_index_type'[5]}};
+begin
+ --# 7
+ declare
+ local var T0_0 : std__standard__bit_vector;
+ type work__repro__ARCH__ghdl_bug__P0__U2 is subarray
+ std__standard__bit_vector__BASE[__ghdl_index_type'[5]];
+ private constant _UI00000002 : work__repro__ARCH__ghdl_bug__P0__U2;
+ constant _UI00000002 := {std__standard__bit'[C_1],
+ std__standard__bit'[C_1], std__standard__bit'[C_1],
+ std__standard__bit'[C_0], std__standard__bit'[C_0]};
+ private constant work__repro__ARCH__ghdl_bug__P0__U3__STB :
+ std__standard__bit_vector__BOUND;
+ constant work__repro__ARCH__ghdl_bug__P0__U3__STB := {.dim_1 =
+ {.left = std__standard__integer__BT'[0],
+ .right = std__standard__integer__BT'[4],
+ .dir = __ghdl_dir_type'[dir_to], .length = __ghdl_index_type'[5]}};
+ local var T0_1 : std__standard__bit_vector;
+ private constant _UI00000003 : __ghdl_location;
+ constant _UI00000003 :=
+ {.filename = __ghdl_char_ptr'address (_UI00000000),
+ .line = __ghdl_i32'[7], .col = __ghdl_i32'[3]};
+ type work__repro__ARCH__ghdl_bug__P0__U4 is subarray
+ std__standard__string__BASE[__ghdl_index_type'[16]];
+ private constant _UI00000004 : work__repro__ARCH__ghdl_bug__P0__U4;
+ constant _UI00000004 := {std__standard__character'[C_r],
+ std__standard__character'[C_o], std__standard__character'[C_r],
+ std__standard__character'[C20], std__standard__character'[C20],
+ std__standard__character'[C_5], std__standard__character'[C20],
+ std__standard__character'[C_i], std__standard__character'[C_s],
+ std__standard__character'[C20], std__standard__character'[C_b],
+ std__standard__character'[C_r], std__standard__character'[C_o],
+ std__standard__character'[C_k], std__standard__character'[C_e],
+ std__standard__character'[C_n]};
+ private constant work__repro__ARCH__ghdl_bug__P0__U5__STB :
+ std__standard__string__BOUND;
+ constant work__repro__ARCH__ghdl_bug__P0__U5__STB := {.dim_1 =
+ {.left = std__standard__integer__BT'[1],
+ .right = std__standard__integer__BT'[16],
+ .dir = __ghdl_dir_type'[dir_to], .length = __ghdl_index_type'[16]}};
+ begin
+ T0_0.BASE := std__standard__bit_vector__BASEP'conv (
+ std__standard__bit_vector__BASEP'address (_UI00000001));
+ T0_0.BOUNDS := std__standard__bit_vector__BOUNDP'address (
+ work__repro__ARCH__ghdl_bug__P0__U1__STB);
+ T0_1.BASE := std__standard__bit_vector__BASEP'conv (
+ std__standard__bit_vector__BASEP'address (_UI00000002));
+ T0_1.BOUNDS := std__standard__bit_vector__BOUNDP'address (
+ work__repro__ARCH__ghdl_bug__P0__U3__STB);
+ if not std__standard__bit_vector_EQ (std__standard__bit_vector__PTR
+ 'address (T0_0), std__standard__bit_vector__PTR'address (T0_1)) then
+ declare
+ local var T1_0 : std__standard__string;
+ begin
+ T1_0.BASE := std__standard__string__BASEP'conv (
+ std__standard__string__BASEP'address (_UI00000004));
+ T1_0.BOUNDS := std__standard__string__BOUNDP'address (
+ work__repro__ARCH__ghdl_bug__P0__U5__STB);
+ __ghdl_assert_failed (std__standard__string__PTR'address (T1_0),
+ std__standard__severity_level'[warning], __ghdl_location_ptr
+ 'address (_UI00000003), __ghdl_rti_access'[null]);
+ end;
+ end if;
+ end;
+end;
+
+
+private procedure work__repro__ARCH__ghdl_bug__P1__PROC (
+ INSTANCE: work__repro__ARCH__ghdl_bug__INSTPTR)
+declare
+ type work__repro__ARCH__ghdl_bug__P1__U0 is subarray
+ std__standard__bit_vector__BASE[__ghdl_index_type'[5]];
+ private constant _UI00000005 : work__repro__ARCH__ghdl_bug__P1__U0;
+ constant _UI00000005 := {std__standard__bit'[C_1], std__standard__bit'[C_1],
+ std__standard__bit'[C_1], std__standard__bit'[C_0],
+ std__standard__bit'[C_0]};
+ private constant work__repro__ARCH__ghdl_bug__P1__U1__STB :
+ std__standard__bit_vector__BOUND;
+ constant work__repro__ARCH__ghdl_bug__P1__U1__STB := {.dim_1 =
+ {.left = std__standard__integer__BT'[0],
+ .right = std__standard__integer__BT'[4], .dir = __ghdl_dir_type'[dir_to],
+ .length = __ghdl_index_type'[5]}};
+begin
+ --# 8
+ declare
+ local var T0_0 : std__standard__bit_vector;
+ local var T0_1 : __ghdl_ptr;
+ local var T0_2 : std__standard__bit_vector;
+ type work__repro__ARCH__ghdl_bug__P1__U2 is subarray
+ std__standard__bit_vector__BASE[__ghdl_index_type'[5]];
+ private constant _UI00000006 : work__repro__ARCH__ghdl_bug__P1__U2;
+ constant _UI00000006 := {std__standard__bit'[C_1],
+ std__standard__bit'[C_1], std__standard__bit'[C_1],
+ std__standard__bit'[C_0], std__standard__bit'[C_0]};
+ private constant work__repro__ARCH__ghdl_bug__P1__U3__STB :
+ std__standard__bit_vector__BOUND;
+ constant work__repro__ARCH__ghdl_bug__P1__U3__STB := {.dim_1 =
+ {.left = std__standard__integer__BT'[0],
+ .right = std__standard__integer__BT'[4],
+ .dir = __ghdl_dir_type'[dir_to], .length = __ghdl_index_type'[5]}};
+ local var T0_3 : std__standard__bit_vector;
+ private constant _UI00000007 : __ghdl_location;
+ constant _UI00000007 :=
+ {.filename = __ghdl_char_ptr'address (_UI00000000),
+ .line = __ghdl_i32'[8], .col = __ghdl_i32'[3]};
+ type work__repro__ARCH__ghdl_bug__P1__U4 is subarray
+ std__standard__string__BASE[__ghdl_index_type'[17]];
+ private constant _UI00000008 : work__repro__ARCH__ghdl_bug__P1__U4;
+ constant _UI00000008 := {std__standard__character'[C_r],
+ std__standard__character'[C_o], std__standard__character'[C_r],
+ std__standard__character'[C20], std__standard__character'[C20],
+ std__standard__character'[C_5], std__standard__character'[C20],
+ std__standard__character'[C_i], std__standard__character'[C_s],
+ std__standard__character'[C20], std__standard__character'[C_b],
+ std__standard__character'[C_r], std__standard__character'[C_o],
+ std__standard__character'[C_k], std__standard__character'[C_e],
+ std__standard__character'[C_n], std__standard__character'[C20]};
+ private constant work__repro__ARCH__ghdl_bug__P1__U5__STB :
+ std__standard__string__BOUND;
+ constant work__repro__ARCH__ghdl_bug__P1__U5__STB := {.dim_1 =
+ {.left = std__standard__integer__BT'[1],
+ .right = std__standard__integer__BT'[17],
+ .dir = __ghdl_dir_type'[dir_to], .length = __ghdl_index_type'[17]}};
+ begin
+ T0_0.BASE := std__standard__bit_vector__BASEP'conv (
+ std__standard__bit_vector__BASEP'address (_UI00000005));
+ T0_0.BOUNDS := std__standard__bit_vector__BOUNDP'address (
+ work__repro__ARCH__ghdl_bug__P1__U1__STB);
+ T0_1 := __ghdl_stack2_mark ();
+ std__standard__bit_vector_ROT (std__standard__bit_vector__PTR'address (T0_2
+ ), std__standard__bit_vector__PTR'address (T0_0),
+ std__standard__integer__BT'[5]);
+ T0_3.BASE := std__standard__bit_vector__BASEP'conv (
+ std__standard__bit_vector__BASEP'address (_UI00000006));
+ T0_3.BOUNDS := std__standard__bit_vector__BOUNDP'address (
+ work__repro__ARCH__ghdl_bug__P1__U3__STB);
+ if not std__standard__bit_vector_EQ (std__standard__bit_vector__PTR
+ 'address (T0_2), std__standard__bit_vector__PTR'address (T0_3)) then
+ declare
+ local var T1_0 : std__standard__string;
+ begin
+ T1_0.BASE := std__standard__string__BASEP'conv (
+ std__standard__string__BASEP'address (_UI00000008));
+ T1_0.BOUNDS := std__standard__string__BOUNDP'address (
+ work__repro__ARCH__ghdl_bug__P1__U5__STB);
+ __ghdl_assert_failed (std__standard__string__PTR'address (T1_0),
+ std__standard__severity_level'[warning], __ghdl_location_ptr
+ 'address (_UI00000007), __ghdl_rti_access'[null]);
+ end;
+ end if;
+ __ghdl_stack2_release (T0_1);
+ end;
+end;
+
+
+private procedure work__repro__ARCH__ghdl_bug__P2__PROC (
+ INSTANCE: work__repro__ARCH__ghdl_bug__INSTPTR)
+declare
+ type work__repro__ARCH__ghdl_bug__P2__U0 is subarray
+ std__standard__bit_vector__BASE[__ghdl_index_type'[5]];
+ private constant _UI00000009 : work__repro__ARCH__ghdl_bug__P2__U0;
+ constant _UI00000009 := {};
+ private constant work__repro__ARCH__ghdl_bug__P2__U1__STB :
+ std__standard__bit_vector__BOUND;
+ constant work__repro__ARCH__ghdl_bug__P2__U1__STB := {.dim_1 =
+ {.left = std__standard__integer__BT'[0],
+ .right = std__standard__integer__BT'[4], .dir = __ghdl_dir_type'[dir_to],
+ .length = __ghdl_index_type'[5]}};
+begin
+ --# 10
+ declare
+ local var T0_0 : std__standard__bit_vector;
+ type work__repro__ARCH__ghdl_bug__P2__U2 is subarray
+ std__standard__bit_vector__BASE[__ghdl_index_type'[5]];
+ private constant _UI0000000a : work__repro__ARCH__ghdl_bug__P2__U2;
+ constant _UI0000000a := {std__standard__bit'[C_1],
+ std__standard__bit'[C_1], std__standard__bit'[C_1],
+ std__standard__bit'[C_0], std__standard__bit'[C_0]};
+ private constant work__repro__ARCH__ghdl_bug__P2__U3__STB :
+ std__standard__bit_vector__BOUND;
+ constant work__repro__ARCH__ghdl_bug__P2__U3__STB := {.dim_1 =
+ {.left = std__standard__integer__BT'[0],
+ .right = std__standard__integer__BT'[4],
+ .dir = __ghdl_dir_type'[dir_to], .length = __ghdl_index_type'[5]}};
+ local var T0_1 : std__standard__bit_vector;
+ private constant _UI0000000b : __ghdl_location;
+ constant _UI0000000b :=
+ {.filename = __ghdl_char_ptr'address (_UI00000000),
+ .line = __ghdl_i32'[10], .col = __ghdl_i32'[3]};
+ type work__repro__ARCH__ghdl_bug__P2__U4 is subarray
+ std__standard__string__BASE[__ghdl_index_type'[16]];
+ private constant _UI0000000c : work__repro__ARCH__ghdl_bug__P2__U4;
+ constant _UI0000000c := {std__standard__character'[C_r],
+ std__standard__character'[C_o], std__standard__character'[C_l],
+ std__standard__character'[C20], std__standard__character'[C2d],
+ std__standard__character'[C_5], std__standard__character'[C20],
+ std__standard__character'[C_i], std__standard__character'[C_s],
+ std__standard__character'[C20], std__standard__character'[C_b],
+ std__standard__character'[C_r], std__standard__character'[C_o],
+ std__standard__character'[C_k], std__standard__character'[C_e],
+ std__standard__character'[C_n]};
+ private constant work__repro__ARCH__ghdl_bug__P2__U5__STB :
+ std__standard__string__BOUND;
+ constant work__repro__ARCH__ghdl_bug__P2__U5__STB := {.dim_1 =
+ {.left = std__standard__integer__BT'[1],
+ .right = std__standard__integer__BT'[16],
+ .dir = __ghdl_dir_type'[dir_to], .length = __ghdl_index_type'[16]}};
+ begin
+ T0_0.BASE := std__standard__bit_vector__BASEP'conv (
+ std__standard__bit_vector__BASEP'address (_UI00000009));
+ T0_0.BOUNDS := std__standard__bit_vector__BOUNDP'address (
+ work__repro__ARCH__ghdl_bug__P2__U1__STB);
+ T0_1.BASE := std__standard__bit_vector__BASEP'conv (
+ std__standard__bit_vector__BASEP'address (_UI0000000a));
+ T0_1.BOUNDS := std__standard__bit_vector__BOUNDP'address (
+ work__repro__ARCH__ghdl_bug__P2__U3__STB);
+ if not std__standard__bit_vector_EQ (std__standard__bit_vector__PTR
+ 'address (T0_0), std__standard__bit_vector__PTR'address (T0_1)) then
+ declare
+ local var T1_0 : std__standard__string;
+ begin
+ T1_0.BASE := std__standard__string__BASEP'conv (
+ std__standard__string__BASEP'address (_UI0000000c));
+ T1_0.BOUNDS := std__standard__string__BOUNDP'address (
+ work__repro__ARCH__ghdl_bug__P2__U5__STB);
+ __ghdl_assert_failed (std__standard__string__PTR'address (T1_0),
+ std__standard__severity_level'[warning], __ghdl_location_ptr
+ 'address (_UI0000000b), __ghdl_rti_access'[null]);
+ end;
+ end if;
+ end;
+end;
+
+
+private procedure work__repro__ARCH__ghdl_bug__P3__PROC (
+ INSTANCE: work__repro__ARCH__ghdl_bug__INSTPTR)
+declare
+ type work__repro__ARCH__ghdl_bug__P3__U0 is subarray
+ std__standard__bit_vector__BASE[__ghdl_index_type'[5]];
+ private constant _UI0000000d : work__repro__ARCH__ghdl_bug__P3__U0;
+ constant _UI0000000d := {std__standard__bit'[C_1], std__standard__bit'[C_1],
+ std__standard__bit'[C_1], std__standard__bit'[C_0],
+ std__standard__bit'[C_0]};
+ private constant work__repro__ARCH__ghdl_bug__P3__U1__STB :
+ std__standard__bit_vector__BOUND;
+ constant work__repro__ARCH__ghdl_bug__P3__U1__STB := {.dim_1 =
+ {.left = std__standard__integer__BT'[0],
+ .right = std__standard__integer__BT'[4], .dir = __ghdl_dir_type'[dir_to],
+ .length = __ghdl_index_type'[5]}};
+begin
+ --# 11
+ declare
+ local var T0_0 : std__standard__bit_vector;
+ local var T0_1 : __ghdl_ptr;
+ local var T0_2 : std__standard__bit_vector;
+ type work__repro__ARCH__ghdl_bug__P3__U2 is subarray
+ std__standard__bit_vector__BASE[__ghdl_index_type'[5]];
+ private constant _UI0000000e : work__repro__ARCH__ghdl_bug__P3__U2;
+ constant _UI0000000e := {std__standard__bit'[C_1],
+ std__standard__bit'[C_1], std__standard__bit'[C_1],
+ std__standard__bit'[C_0], std__standard__bit'[C_0]};
+ private constant work__repro__ARCH__ghdl_bug__P3__U3__STB :
+ std__standard__bit_vector__BOUND;
+ constant work__repro__ARCH__ghdl_bug__P3__U3__STB := {.dim_1 =
+ {.left = std__standard__integer__BT'[0],
+ .right = std__standard__integer__BT'[4],
+ .dir = __ghdl_dir_type'[dir_to], .length = __ghdl_index_type'[5]}};
+ local var T0_3 : std__standard__bit_vector;
+ private constant _UI0000000f : __ghdl_location;
+ constant _UI0000000f :=
+ {.filename = __ghdl_char_ptr'address (_UI00000000),
+ .line = __ghdl_i32'[11], .col = __ghdl_i32'[3]};
+ type work__repro__ARCH__ghdl_bug__P3__U4 is subarray
+ std__standard__string__BASE[__ghdl_index_type'[17]];
+ private constant _UI00000010 : work__repro__ARCH__ghdl_bug__P3__U4;
+ constant _UI00000010 := {std__standard__character'[C_r],
+ std__standard__character'[C_o], std__standard__character'[C_l],
+ std__standard__character'[C20], std__standard__character'[C2d],
+ std__standard__character'[C_5], std__standard__character'[C20],
+ std__standard__character'[C_i], std__standard__character'[C_s],
+ std__standard__character'[C20], std__standard__character'[C_b],
+ std__standard__character'[C_r], std__standard__character'[C_o],
+ std__standard__character'[C_k], std__standard__character'[C_e],
+ std__standard__character'[C_n], std__standard__character'[C20]};
+ private constant work__repro__ARCH__ghdl_bug__P3__U5__STB :
+ std__standard__string__BOUND;
+ constant work__repro__ARCH__ghdl_bug__P3__U5__STB := {.dim_1 =
+ {.left = std__standard__integer__BT'[1],
+ .right = std__standard__integer__BT'[17],
+ .dir = __ghdl_dir_type'[dir_to], .length = __ghdl_index_type'[17]}};
+ begin
+ T0_0.BASE := std__standard__bit_vector__BASEP'conv (
+ std__standard__bit_vector__BASEP'address (_UI0000000d));
+ T0_0.BOUNDS := std__standard__bit_vector__BOUNDP'address (
+ work__repro__ARCH__ghdl_bug__P3__U1__STB);
+ T0_1 := __ghdl_stack2_mark ();
+ std__standard__bit_vector_ROT (std__standard__bit_vector__PTR'address (T0_2
+ ), std__standard__bit_vector__PTR'address (T0_0), -
+ std__standard__integer__BT'[-5]);
+ T0_3.BASE := std__standard__bit_vector__BASEP'conv (
+ std__standard__bit_vector__BASEP'address (_UI0000000e));
+ T0_3.BOUNDS := std__standard__bit_vector__BOUNDP'address (
+ work__repro__ARCH__ghdl_bug__P3__U3__STB);
+ if not std__standard__bit_vector_EQ (std__standard__bit_vector__PTR
+ 'address (T0_2), std__standard__bit_vector__PTR'address (T0_3)) then
+ declare
+ local var T1_0 : std__standard__string;
+ begin
+ T1_0.BASE := std__standard__string__BASEP'conv (
+ std__standard__string__BASEP'address (_UI00000010));
+ T1_0.BOUNDS := std__standard__string__BOUNDP'address (
+ work__repro__ARCH__ghdl_bug__P3__U5__STB);
+ __ghdl_assert_failed (std__standard__string__PTR'address (T1_0),
+ std__standard__severity_level'[warning], __ghdl_location_ptr
+ 'address (_UI0000000f), __ghdl_rti_access'[null]);
+ end;
+ end if;
+ __ghdl_stack2_release (T0_1);
+ end;
+end;
+
+public procedure work__repro__ARCH__ghdl_bug__ELAB (
+ INSTANCE: work__repro__INSTPTR)
+declare
+ local var ARCH_INSTANCE : work__repro__ARCH__ghdl_bug__INSTPTR;
+begin
+ ARCH_INSTANCE := work__repro__ARCH__ghdl_bug__INSTPTR'conv (INSTANCE);
+ INSTANCE.all.RTI.rti := __ghdl_rti_access'unchecked_address (
+ work__repro__ARCH__ghdl_bug__RTI);
+ work__repro__ELAB (INSTANCE);
+ --# 4
+ --# 4
+ --# 7
+ __ghdl_sensitized_process_register (__ghdl_ptr'unchecked_address (
+ ARCH_INSTANCE.all), __ghdl_ptr'subprg_addr (
+ work__repro__ARCH__ghdl_bug__P0__PROC), __ghdl_rti_access
+ 'unchecked_address (work__repro__ARCH__ghdl_bug__P0__RTI), __ghdl_ptr
+ 'unchecked_address (ARCH_INSTANCE.all.P0));
+ --# 8
+ __ghdl_sensitized_process_register (__ghdl_ptr'unchecked_address (
+ ARCH_INSTANCE.all), __ghdl_ptr'subprg_addr (
+ work__repro__ARCH__ghdl_bug__P1__PROC), __ghdl_rti_access
+ 'unchecked_address (work__repro__ARCH__ghdl_bug__P1__RTI), __ghdl_ptr
+ 'unchecked_address (ARCH_INSTANCE.all.P1));
+ --# 10
+ __ghdl_sensitized_process_register (__ghdl_ptr'unchecked_address (
+ ARCH_INSTANCE.all), __ghdl_ptr'subprg_addr (
+ work__repro__ARCH__ghdl_bug__P2__PROC), __ghdl_rti_access
+ 'unchecked_address (work__repro__ARCH__ghdl_bug__P2__RTI), __ghdl_ptr
+ 'unchecked_address (ARCH_INSTANCE.all.P2));
+ --# 11
+ __ghdl_sensitized_process_register (__ghdl_ptr'unchecked_address (
+ ARCH_INSTANCE.all), __ghdl_ptr'subprg_addr (
+ work__repro__ARCH__ghdl_bug__P3__PROC), __ghdl_rti_access
+ 'unchecked_address (work__repro__ARCH__ghdl_bug__P3__RTI), __ghdl_ptr
+ 'unchecked_address (ARCH_INSTANCE.all.P3));
+end;
+
diff --git a/testsuite/gna/sr2737/repro.vhdl b/testsuite/gna/sr2737/repro.vhdl
new file mode 100644
index 0000000..571afe9
--- /dev/null
+++ b/testsuite/gna/sr2737/repro.vhdl
@@ -0,0 +1,16 @@
+entity repro is
+end entity;
+
+architecture ghdl_bug of repro is
+
+begin
+ -- Static
+ assert bit_vector'("11100" ror 5) = "11100" report "ror 5 is broken" severity warning;
+ -- Not static
+ assert bit_vector'("11100") ror 5 = "11100" report string'("ror 5 is broken ") severity warning;
+
+ -- static
+ assert bit_vector'("11100" rol -5) = "11100" report "rol -5 is broken" severity warning;
+ -- not static
+ assert bit_vector'("11100") rol -5 = "11100" report string'("rol -5 is broken ") severity warning;
+end architecture;
diff --git a/testsuite/gna/sr2737/testit.vhdl b/testsuite/gna/sr2737/testit.vhdl
new file mode 100644
index 0000000..d1e9cda
--- /dev/null
+++ b/testsuite/gna/sr2737/testit.vhdl
@@ -0,0 +1,27 @@
+entity testit is
+
+end entity;
+
+architecture behave of testit is
+
+ subtype shiftrange is integer range -8 to 8;
+ signal input: bit_vector (1 to 5) := "11100";
+ signal ror_val: bit_vector (1 to 5);
+ signal rol_val: bit_vector (1 to 5);
+ signal shft: shiftrange;
+
+begin
+
+process
+begin
+ for i in shiftrange loop
+ ror_val <= input ror i;
+ rol_val <= input rol i;
+ shft <= i;
+ wait for 20 ns; -- a convenient length of time
+ end loop;
+ wait;
+
+end process;
+
+end architecture;
diff --git a/testsuite/gna/sr2737/testsuite.sh b/testsuite/gna/sr2737/testsuite.sh
new file mode 100755
index 0000000..0e34c43
--- /dev/null
+++ b/testsuite/gna/sr2737/testsuite.sh
@@ -0,0 +1,16 @@
+#! /bin/sh
+
+. ../../testenv.sh
+
+analyze testit.vhdl
+elab_simulate testit
+
+analyze repro.vhdl
+elab_simulate repro
+
+analyze bit_vector_rol_ror.vhdl
+elab_simulate bit_vector_rol_ror
+
+clean
+
+echo "Test successful"
diff --git a/translate/translation.adb b/translate/translation.adb
index cccecef..572e205 100644
--- a/translate/translation.adb
+++ b/translate/translation.adb
@@ -17943,9 +17943,17 @@ package body Translation is
Finish_If_Stmt (If_Blk);
if Shift = Rotation then
+ -- * If I1 = LENGTH then
+ -- * I1 := 0
+ Start_If_Stmt (If_Blk, New_Compare_Op (ON_Ge,
+ New_Obj_Value (Var_I1),
+ New_Obj_Value (Var_Length),
+ Ghdl_Bool_Type));
+ Init_Var (Var_I1);
+ Finish_If_Stmt (If_Blk);
+
-- * for I = 0 to LENGTH - 1 loop
-- * RES[I] := L[I1];
-
Init_Var (Var_I);
Start_Loop_Stmt (Label);
Gen_Exit_When (Label, New_Compare_Op (ON_Ge,