diff options
-rw-r--r-- | src/vhdl/sem_names.adb | 3 | ||||
-rw-r--r-- | src/vhdl/sem_types.adb | 6 |
2 files changed, 8 insertions, 1 deletions
diff --git a/src/vhdl/sem_names.adb b/src/vhdl/sem_names.adb index f07ae3c28..a7f3c9690 100644 --- a/src/vhdl/sem_names.adb +++ b/src/vhdl/sem_names.adb @@ -4068,6 +4068,9 @@ package body Sem_Names is | Iir_Kind_Element_Attribute | Iir_Kind_Base_Attribute => return Get_Type (Name); + when Iir_Kinds_Expression_Attribute => + Error_Msg_Sem (+Name, "%n is not a valid type mark", +Name); + return Create_Error_Type (Name); when others => if not Is_Error (Name) then Error_Msg_Sem diff --git a/src/vhdl/sem_types.adb b/src/vhdl/sem_types.adb index 8da7415ef..70ac576f1 100644 --- a/src/vhdl/sem_types.adb +++ b/src/vhdl/sem_types.adb @@ -2257,9 +2257,13 @@ package body Sem_Types is Type_Mark_Name := Get_Subtype_Type_Mark (Def); Type_Mark_Name := Sem_Type_Mark (Type_Mark_Name); Set_Subtype_Type_Mark (Def, Type_Mark_Name); + if Is_Error (Type_Mark_Name) then + return Type_Mark_Name; + end if; + Type_Mark := Get_Type (Type_Mark_Name); -- FIXME: incomplete type ? - if Get_Kind (Type_Mark) = Iir_Kind_Error then + if Is_Error (Type_Mark) then -- FIXME: handle inversion such as "subtype BASETYPE RESOLV", which -- should emit "resolution function must precede type name". |