From 7e69fd1749a31c19d29c968989146dfb92852247 Mon Sep 17 00:00:00 2001 From: Nick Gasson Date: Wed, 18 Oct 2017 21:44:21 +0100 Subject: [PATCH] Fix use of alias in type conversion --- src/sem.c | 9 +++++++++ test/sem/alias.vhd | 8 ++++++++ 2 files changed, 17 insertions(+) diff --git a/src/sem.c b/src/sem.c index 3a8d8516..cd22f525 100644 --- a/src/sem.c +++ b/src/sem.c @@ -3916,6 +3916,15 @@ static bool sem_check_fcall(tree_t t) found_func++; break; } + else { + tree_t value = tree_value(decl); + if (tree_kind(value) == T_REF && tree_has_ref(value) + && tree_kind(tree_ref(value)) == T_TYPE_DECL) { + tree_change_kind(t, T_TYPE_CONV); + tree_set_ref(t, tree_ref(value)); + return sem_check_conversion(t); + } + } // Fall-through default: if (!class_has_type(class_of(decl))) diff --git a/test/sem/alias.vhd b/test/sem/alias.vhd index f5e7d1f0..c611c7c7 100644 --- a/test/sem/alias.vhd +++ b/test/sem/alias.vhd @@ -56,5 +56,13 @@ architecture test of e is begin maybe_use_last_value(ax); end procedure; + + type int_array is array (integer range <>) of integer; + alias int_vector is int_array; + type int_array_2 is array (integer range <>) of integer; + + constant c1 : int_array_2(1 to 3) := (1, 2, 3); + constant c2 : int_vector(1 to 3) := int_vector(c1); -- OK + begin end architecture; -- 2.39.2