diff options
-rw-r--r-- | testsuite/gna/issue2216/ent.vhdl | 9 | ||||
-rw-r--r-- | testsuite/gna/issue2216/pkg.vhdl | 41 | ||||
-rwxr-xr-x | testsuite/gna/issue2216/testsuite.sh | 11 |
3 files changed, 61 insertions, 0 deletions
diff --git a/testsuite/gna/issue2216/ent.vhdl b/testsuite/gna/issue2216/ent.vhdl new file mode 100644 index 000000000..c551f5bdd --- /dev/null +++ b/testsuite/gna/issue2216/ent.vhdl @@ -0,0 +1,9 @@ +use work.MemorySupportPkg.all; + +entity ent is +end; + +architecture behav of ent is + constant c : MemBlockType := InitMemoryBaseType_X (3, 2); +begin +end; diff --git a/testsuite/gna/issue2216/pkg.vhdl b/testsuite/gna/issue2216/pkg.vhdl new file mode 100644 index 000000000..4dedf8bb4 --- /dev/null +++ b/testsuite/gna/issue2216/pkg.vhdl @@ -0,0 +1,41 @@ +package MemorySupportPkg is + + subtype MemoryBaseType is integer_vector ; + type MemBlockType is array (integer range <>) of MemoryBaseType ; + + function InitMemoryBaseType_X(BlockWidth, BaseWidth : integer) return MemBlockType ; + +end MemorySupportPkg ; + +package body MemorySupportPkg is + + +-- Works +-- ------------------------------------------------------------ +-- function InitMemoryBaseType_X(BlockWidth, BaseWidth : integer) return MemBlockType is +-- ------------------------------------------------------------ +-- constant BaseU : MemoryBaseType(0 to BaseWidth-1) := (others => -1) ; +-- begin +-- return MemBlockType'(0 to 2**BlockWidth-1 => BaseU) ; +-- end function InitMemoryBaseType_X ; + +-- Fails + ------------------------------------------------------------ + function InitMemoryBaseType_X(BlockWidth, BaseWidth : integer) return MemBlockType is + ------------------------------------------------------------ + constant BaseU : MemoryBaseType := (0 to BaseWidth-1 => -1) ; + begin + return MemBlockType'(0 to 2**BlockWidth-1 => BaseU) ; + end function InitMemoryBaseType_X ; + +-- Fails +-- ------------------------------------------------------------ +-- function InitMemoryBaseType_X(BlockWidth, BaseWidth : integer) return MemBlockType is +-- ------------------------------------------------------------ +-- constant BaseU : MemoryBaseType(0 to BaseWidth-1) := (others => -1) ; +-- constant BlockWidthU : MemBlockType(0 to 2**BlockWidth-1) := (others => BaseU) ; +-- -- --!! Also Fails constant BlockWidthU : MemBlockType := (0 to 2**BlockWidth-1 => BaseU) ; +-- begin +-- return BlockWidthU ; +-- end function InitMemoryBaseType_X ; +end MemorySupportPkg ; diff --git a/testsuite/gna/issue2216/testsuite.sh b/testsuite/gna/issue2216/testsuite.sh new file mode 100755 index 000000000..331a801f8 --- /dev/null +++ b/testsuite/gna/issue2216/testsuite.sh @@ -0,0 +1,11 @@ +#! /bin/sh + +. ../../testenv.sh + +export GHDL_STD_FLAGS=--std=08 +analyze pkg.vhdl ent.vhdl +elab_simulate ent + +clean + +echo "Test successful" |