aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTristan Gingold <tgingold@free.fr>2014-06-22 11:00:41 +0200
committerTristan Gingold <tgingold@free.fr>2014-06-22 11:00:41 +0200
commit289f69a3ed370bc5847f1b98517a7bb6a038b427 (patch)
tree4ee0398ddac2432ff6b0e6f6181b4f08c659b15b
parent212268f54c947f4360a7d0e5b45faa97f76a4a9d (diff)
downloadghdl-289f69a3ed370bc5847f1b98517a7bb6a038b427.tar.gz
ghdl-289f69a3ed370bc5847f1b98517a7bb6a038b427.tar.bz2
ghdl-289f69a3ed370bc5847f1b98517a7bb6a038b427.zip
Strengthen Is_Signal_Object, add a test for alias.
-rw-r--r--iirs_utils.adb11
-rw-r--r--testsuite/gna/ticket20/morten2.vhdl93
-rwxr-xr-xtestsuite/gna/ticket20/testsuite.sh4
3 files changed, 97 insertions, 11 deletions
diff --git a/iirs_utils.adb b/iirs_utils.adb
index 5bc35fbef..7ee171c28 100644
--- a/iirs_utils.adb
+++ b/iirs_utils.adb
@@ -838,15 +838,6 @@ package body Iirs_Utils is
Adecl := Get_Base_Name (Name);
loop
case Get_Kind (Adecl) is
- when Iir_Kind_Variable_Declaration
- | Iir_Kind_Variable_Interface_Declaration
- | Iir_Kind_Constant_Declaration
- | Iir_Kind_Constant_Interface_Declaration
- | Iir_Kind_Implicit_Dereference
- | Iir_Kind_Dereference
- | Iir_Kind_Attribute_Value
- | Iir_Kind_Function_Call =>
- return False;
when Iir_Kind_Signal_Declaration
| Iir_Kind_Signal_Interface_Declaration
| Iir_Kind_Guard_Signal_Declaration
@@ -855,7 +846,7 @@ package body Iirs_Utils is
when Iir_Kind_Object_Alias_Declaration =>
Adecl := Get_Base_Name (Get_Name (Adecl));
when others =>
- Error_Kind ("is_signal_object", Adecl);
+ return False;
end case;
end loop;
end Is_Signal_Object;
diff --git a/testsuite/gna/ticket20/morten2.vhdl b/testsuite/gna/ticket20/morten2.vhdl
new file mode 100644
index 000000000..a556be025
--- /dev/null
+++ b/testsuite/gna/ticket20/morten2.vhdl
@@ -0,0 +1,93 @@
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+-- library std;
+use std.textio.all;
+
+entity morten2 is
+end entity;
+
+architecture foo of morten2 is
+
+ signal clk: std_logic := '0';
+ signal rst: std_logic := '1';
+ signal cnt_1: unsigned (7 downto 0);
+ signal cnt_3: unsigned (7 downto 0);
+
+ function to_bstring(sl : std_logic) return string is
+ alias bstring: string is std_logic'image(sl);
+ begin
+ --return "" & string'(std_logic'image(sl))(2); -- "" & character to get string
+ return "" & bstring(2);
+ end function;
+
+ function to_bstring(slv : std_logic_vector) return string is
+ alias slv_norm : std_logic_vector(1 to slv'length) is slv;
+ begin
+ if slv_norm'length = 0 then
+ return "";
+ elsif slv_norm'length = 1 then
+ return to_bstring(slv_norm(1));
+ else -- slv_norm'length > 0
+ return to_bstring(slv_norm(1)) & to_bstring(slv_norm(2 to slv_norm'length));
+ end if;
+ end function;
+
+begin
+
+
+PRINT:
+ process (clk) is
+ variable line_v : line;
+ file out_file : text open write_mode is "out.txt";
+ begin
+ if rising_edge(clk) then
+ write(line_v, to_bstring(rst) & " " &
+ to_bstring(std_logic_vector(cnt_1)) & " " &
+ to_bstring(std_logic_vector(cnt_3))
+ );
+ writeline(out_file, line_v);
+ end if;
+ end process;
+
+COUNTER1:
+ process (clk,rst)
+ begin
+ if rst = '1' then
+ cnt_1 <= (others => '0');
+ elsif rising_edge(clk) then
+ cnt_1 <= cnt_1 + 1;
+ end if;
+ end process;
+
+COUNTER3:
+ process (clk,rst)
+ begin
+ if rst = '1' then
+ cnt_3 <= (others => '0');
+ elsif rising_edge(clk) then
+ cnt_3 <= cnt_3 + 3;
+ end if;
+ end process;
+
+RESET:
+ process
+ begin
+ wait until rising_edge(clk);
+ wait until rising_edge(clk);
+ wait until rising_edge(clk);
+ rst <= '0';
+ wait;
+ end process;
+
+CLOCK:
+ process
+ begin
+ wait for 10 ns;
+ clk <= not clk;
+ if Now > 210 ns then
+ wait;
+ end if;
+ end process;
+
+end architecture;
diff --git a/testsuite/gna/ticket20/testsuite.sh b/testsuite/gna/ticket20/testsuite.sh
index 79085ee17..81df8b4f7 100755
--- a/testsuite/gna/ticket20/testsuite.sh
+++ b/testsuite/gna/ticket20/testsuite.sh
@@ -5,4 +5,6 @@
analyze morten1.vhdl
elab_simulate morten
-clean \ No newline at end of file
+analyze_failure morten2.vhdl
+
+clean