aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTristan Gingold <tgingold@free.fr>2017-07-22 04:19:42 +0200
committerTristan Gingold <tgingold@free.fr>2017-07-22 04:19:42 +0200
commitce98adcb8ba73c7c271a31ef54b1e2205a9c11a9 (patch)
tree9149ea5774e93a93e274bbd63746105cbaedd83e /src
parent28f2b1ac3db5681509913001683599111cc663cd (diff)
downloadghdl-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.adb3
-rw-r--r--src/vhdl/sem_types.adb6
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".