From 34666ab2dc542936871357d4fe6f54600c5aa325 Mon Sep 17 00:00:00 2001
From: Tristan Gingold <tgingold@free.fr>
Date: Tue, 7 May 2019 20:05:57 +0200
Subject: Add reproducer for #816

---
 testsuite/gna/issue816/test.vhdl | 74 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 74 insertions(+)
 create mode 100644 testsuite/gna/issue816/test.vhdl

(limited to 'testsuite/gna/issue816/test.vhdl')

diff --git a/testsuite/gna/issue816/test.vhdl b/testsuite/gna/issue816/test.vhdl
new file mode 100644
index 000000000..c7ed25851
--- /dev/null
+++ b/testsuite/gna/issue816/test.vhdl
@@ -0,0 +1,74 @@
+library ieee;
+context ieee.ieee_std_context;
+
+library vunit_lib;
+context vunit_lib.vunit_context;
+
+entity tb_test is
+  generic ( runner_cfg : string );
+end entity;
+
+architecture tb of tb_test is
+
+  constant params: integer_vector_ptr_t := new_integer_vector_ptr(2, -1);
+
+  constant clk_period    : time    := 20 ns;
+
+  type time_t is array (natural range 0 to 1) of natural;
+
+  procedure set_time(t: time_t) is begin
+    set(params, 0, t(0));
+    set(params, 1, t(1));
+  end;
+
+  procedure get_time(variable t: inout time_t) is begin
+    t(0) := get(params, 0);
+    t(1) := get(params, 1);
+  end;
+
+  impure function get_time return time_t is
+    variable t: time_t;
+  begin
+--    t(0) := get(params, 0);
+--    t(1) := get(params, 1);
+    return t;
+  end;
+
+  constant null_time: time_t := (others => 0);
+
+  impure function to_string(t: time_t) return string is begin
+    return to_string(t(0)) & " " & to_string(t(1));
+  end;
+
+  signal clk: std_logic;
+
+begin
+
+  clk <= not clk after (clk_period/2);
+
+  run: process(all)
+    variable r: time_t;
+  begin
+    if rising_edge(clk) then
+--      info("Time: " & to_string(get_time));
+--      get_time(r);
+    end if;
+  end process;
+
+  main: process
+    variable t: time_t;
+  begin
+    test_runner_setup(runner, runner_cfg);
+      get_time(t);
+      if t = null_time then
+        set_time((others=>natural'high));
+      end if;
+      get_time(t);
+      info("Init test | time: " & to_string(t));
+      info("Test done");
+    test_runner_cleanup(runner);
+    wait;
+  end process;
+  test_runner_watchdog(runner, 500 ms);
+
+end architecture;
-- 
cgit v1.2.3