aboutsummaryrefslogtreecommitdiffstats
path: root/src/vhdl/translate/trans_be.adb
diff options
context:
space:
mode:
Diffstat (limited to 'src/vhdl/translate/trans_be.adb')
-rw-r--r--src/vhdl/translate/trans_be.adb21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/vhdl/translate/trans_be.adb b/src/vhdl/translate/trans_be.adb
index d4002cbcf..4092243ac 100644
--- a/src/vhdl/translate/trans_be.adb
+++ b/src/vhdl/translate/trans_be.adb
@@ -17,6 +17,7 @@
-- 02111-1307, USA.
with Simple_IO;
+with Std_Names;
with Vhdl.Errors; use Vhdl.Errors;
with Vhdl.Back_End;
@@ -38,6 +39,26 @@ package body Trans_Be is
-- Let it generate error messages.
Fi := Translate_Foreign_Id (Decl);
+ if Fi.Kind = Foreign_Intrinsic then
+ pragma Assert (Get_Implicit_Definition (Decl) = Iir_Predefined_None);
+ declare
+ use Std_Names;
+ Predefined : Iir_Predefined_Functions;
+ begin
+ case Get_Identifier (Decl) is
+ when Name_Untruncated_Text_Read =>
+ Predefined := Iir_Predefined_Foreign_Untruncated_Text_Read;
+ when Name_Textio_Read_Real =>
+ Predefined := Iir_Predefined_Foreign_Textio_Read_Real;
+ when Name_Textio_Write_Real =>
+ Predefined := Iir_Predefined_Foreign_Textio_Write_Real;
+ when others =>
+ Predefined := Iir_Predefined_None;
+ end case;
+ Set_Implicit_Definition (Decl, Predefined);
+ end;
+ end if;
+
if Sem_Foreign_Hook /= null then
Sem_Foreign_Hook.all (Decl, Fi);
end if;