diff options
author | Tristan Gingold <tgingold@free.fr> | 2016-07-29 03:39:10 +0200 |
---|---|---|
committer | Tristan Gingold <tgingold@free.fr> | 2016-07-30 07:03:39 +0200 |
commit | 46e91341fa5eeeb6d678c703d2d041a45d71de8f (patch) | |
tree | 33008d69593c7255caafc71911fd12c567d3465b | |
parent | f2e0f4caa262f2e04b9ae4d29d28646751039d38 (diff) | |
download | ghdl-46e91341fa5eeeb6d678c703d2d041a45d71de8f.tar.gz ghdl-46e91341fa5eeeb6d678c703d2d041a45d71de8f.tar.bz2 ghdl-46e91341fa5eeeb6d678c703d2d041a45d71de8f.zip |
Allow alias of literals in strings.
Fix issue #125
-rw-r--r-- | src/vhdl/sem_expr.adb | 6 | ||||
-rw-r--r-- | src/vhdl/sem_scopes.adb | 22 |
2 files changed, 22 insertions, 6 deletions
diff --git a/src/vhdl/sem_expr.adb b/src/vhdl/sem_expr.adb index a66e99c1d..c1d445a58 100644 --- a/src/vhdl/sem_expr.adb +++ b/src/vhdl/sem_expr.adb @@ -1782,9 +1782,7 @@ package body Sem_Expr is Decl := Get_Non_Alias_Declaration (Interpretation); -- It is compatible with operand types ? - if Get_Kind (Decl) /= Iir_Kind_Function_Declaration then - raise Internal_Error; - end if; + pragma Assert (Get_Kind (Decl) = Iir_Kind_Function_Declaration); -- LRM08 12.3 Visibility -- [...] or all visible declarations denote the same named entity. @@ -1955,7 +1953,7 @@ package body Sem_Expr is begin Inter := Get_Interpretation (Id); while Valid_Interpretation (Inter) loop - Decl := Get_Declaration (Inter); + Decl := Get_Non_Alias_Declaration (Inter); if Get_Kind (Decl) = Iir_Kind_Enumeration_Literal and then Get_Type (Decl) = Etype then diff --git a/src/vhdl/sem_scopes.adb b/src/vhdl/sem_scopes.adb index 6ee061de6..41b0c9ee6 100644 --- a/src/vhdl/sem_scopes.adb +++ b/src/vhdl/sem_scopes.adb @@ -559,8 +559,26 @@ package body Sem_Scopes is -- The hash must have been computed. pragma Assert (Decl_Hash /= 0); + -- LRM02 10.3 Visibility + -- Each of two declarations is said to be a /homograph/ of the + -- other if both declarations have the same identifier, operator + -- symbol, or character literal, and if overloading is allowed for + -- at mist one of the two. + -- + -- LRM08 12.3 Visibility + -- Each of two declarations is said to be a /homograph/ of the + -- other if and only if both declarations have the same + -- designator, and they denote different named entities, and + -- either overloading is allows for at most one of the two, or + -- overloading is allowed for both declarations and they have the + -- same parameter and result type profile. + + -- GHDL: here we are in the case when both declarations are + -- overloadable. Also, always follow the LRM08 rules as they fix + -- issues. + -- Find an homograph of this declaration (and also keep the - -- interpretation just before it in the chain), + -- interpretation just before it in the chain). Homograph := Current_Inter; Prev_Homograph := No_Name_Interpretation; while Homograph /= No_Name_Interpretation loop @@ -578,7 +596,7 @@ package body Sem_Scopes is return; end if; - -- There is an homograph. + -- There is an homograph (or the named entity is the same). if Potentially then -- Added DECL would be made potentially visible. |