diff options
-rw-r--r-- | testsuite/gna/bug16782/bug.vhd | 36 | ||||
-rwxr-xr-x | testsuite/gna/bug16782/testsuite.sh | 10 |
2 files changed, 46 insertions, 0 deletions
diff --git a/testsuite/gna/bug16782/bug.vhd b/testsuite/gna/bug16782/bug.vhd new file mode 100644 index 000000000..93d219295 --- /dev/null +++ b/testsuite/gna/bug16782/bug.vhd @@ -0,0 +1,36 @@ +entity bug is end entity; +architecture arch of bug is + component comp is port(a :in bit_vector); end component; + constant DATAPATH :natural := 16; + signal a :bit_vector(DATAPATH-1 downto 0); +begin + i_comp: comp port map(a); +end architecture; + +entity comp is port(a :in bit_vector); end entity; +architecture arch of comp is + constant DATAPATH :natural := a'length; + signal state :natural; + signal tmp :bit_vector(31 downto 0); +begin + process(a) begin + case DATAPATH is + when 8=> + case state is + when 0=> tmp(1*DATAPATH-1 downto 0*DATAPATH)<=a; + when 1=> tmp(2*DATAPATH-1 downto 1*DATAPATH)<=a; +-- When DATAPATH>10 this range violates bounds, but this code should not be reached because "case DATAPATH is when 8=>" + when 2=> tmp(3*DATAPATH-1 downto 2*DATAPATH)<=a; + when 3=> tmp(4*DATAPATH-1 downto 3*DATAPATH)<=a; + when others=> + end case; + when 16=> + case state is + when 0=> tmp(1*DATAPATH-1 downto 0*DATAPATH)<=a; + when 1=> tmp(2*DATAPATH-1 downto 1*DATAPATH)<=a; + when others=> + end case; + when others=> + end case; + end process; +end architecture; diff --git a/testsuite/gna/bug16782/testsuite.sh b/testsuite/gna/bug16782/testsuite.sh new file mode 100755 index 000000000..2e2473fe7 --- /dev/null +++ b/testsuite/gna/bug16782/testsuite.sh @@ -0,0 +1,10 @@ +#! /bin/sh + +. ../../testenv.sh + +analyze bug.vhd +elab_simulate_failure bug + +clean + +echo "Test successful" |