aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArnaud Charlet <charlet@adacore.com>2021-03-12 07:57:03 -0500
committerPierre-Marie de Rodat <derodat@adacore.com>2021-06-18 04:36:46 -0400
commit4153c7547146cbd775385569bfdaa6cb3fe19007 (patch)
tree6bf370fc5e17814d0f07aca497ff7fe81dc350e9
parent07537fe632cd6e2fcf83954fb85455d118d80c06 (diff)
downloadgcc-4153c7547146cbd775385569bfdaa6cb3fe19007.zip
gcc-4153c7547146cbd775385569bfdaa6cb3fe19007.tar.gz
gcc-4153c7547146cbd775385569bfdaa6cb3fe19007.tar.bz2
[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.
-rw-r--r--gcc/ada/bindgen.adb6
-rw-r--r--gcc/ada/libgnat/g-comver.adb11
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 --