diff options
author | Tristan Gingold <tgingold@free.fr> | 2017-07-22 04:19:42 +0200 |
---|---|---|
committer | Tristan Gingold <tgingold@free.fr> | 2017-07-22 04:19:42 +0200 |
commit | ce98adcb8ba73c7c271a31ef54b1e2205a9c11a9 (patch) | |
tree | 9149ea5774e93a93e274bbd63746105cbaedd83e /src | |
parent | 28f2b1ac3db5681509913001683599111cc663cd (diff) | |
download | ghdl-ce98adcb8ba73c7c271a31ef54b1e2205a9c11a9.tar.gz ghdl-ce98adcb8ba73c7c271a31ef54b1e2205a9c11a9.tar.bz2 ghdl-ce98adcb8ba73c7c271a31ef54b1e2205a9c11a9.zip |
Improve error handling on type mark.
Fix #387
Diffstat (limited to 'src')
-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". |