From 4153c7547146cbd775385569bfdaa6cb3fe19007 Mon Sep 17 00:00:00 2001 From: Arnaud Charlet Date: Fri, 12 Mar 2021 07:57:03 -0500 Subject: [PATCH] [Ada] GNAT.Compiler_Version and LTO gcc/ada/ * bindgen.adb (Gen_Output_File_Ada): Generate a new constant GNAT_Version_Address. * libgnat/g-comver.adb (GNAT_Version_Address): New; (GNAT_Version): Use GNAT_Version_Address to disable LTO warning. --- gcc/ada/bindgen.adb | 6 +++++- gcc/ada/libgnat/g-comver.adb | 11 ++++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/gcc/ada/bindgen.adb b/gcc/ada/bindgen.adb index 303bcde..0014f6a 100644 --- a/gcc/ada/bindgen.adb +++ b/gcc/ada/bindgen.adb @@ -2388,7 +2388,11 @@ package body Bindgen is Gnat_Version_String & """ & ASCII.NUL;"); WBI (" pragma Export (C, GNAT_Version, ""__gnat_version"");"); - + WBI (""); + WBI (" GNAT_Version_Address : constant System.Address := " & + "GNAT_Version'Address;"); + WBI (" pragma Export (C, GNAT_Version_Address, " & + """__gnat_version_address"");"); WBI (""); Set_String (" Ada_Main_Program_Name : constant String := """); Get_Name_String (Units.Table (First_Unit_Entry).Uname); diff --git a/gcc/ada/libgnat/g-comver.adb b/gcc/ada/libgnat/g-comver.adb index e2aef3e..575caac 100644 --- a/gcc/ada/libgnat/g-comver.adb +++ b/gcc/ada/libgnat/g-comver.adb @@ -33,6 +33,8 @@ -- GNAT compiler used to compile the program. It relies on the generated -- constant in the binder generated package that records this information. +with System; + package body GNAT.Compiler_Version is Ver_Len_Max : constant := 256; @@ -43,8 +45,15 @@ package body GNAT.Compiler_Version is -- This is logically a reference to Gnatvsn.Ver_Prefix but we cannot -- import this directly since run-time units cannot WITH compiler units. + GNAT_Version_Address : constant System.Address; + pragma Import (C, GNAT_Version_Address, "__gnat_version_address"); + GNAT_Version : constant String (1 .. Ver_Len_Max + Ver_Prefix'Length); - pragma Import (C, GNAT_Version, "__gnat_version"); + pragma Import (Ada, GNAT_Version); + for GNAT_Version'Address use GNAT_Version_Address; + -- Use a level of indirection via __gnat_version_address to avoid LTO + -- type mismtch warnings between two string objects of potentially + -- different size. ------------- -- Version -- -- 2.7.4