From: Samuel Tardieu Date: Mon, 18 Aug 2008 09:09:24 +0000 (+0000) Subject: [multiple changes] X-Git-Tag: releases/gcc-4.4.0~3099 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=79a141784a7f10d72c756aa309eb6aa9a7bd92c5;p=thirdparty%2Fgcc.git [multiple changes] 2008-08-18 Samuel Tardieu Robert Dewar gcc/ada/ PR ada/30827 * bindgen.adb (Gen_Output_File_Ada): Zero-terminate the version string. Move comment in the right place. * g-comver.adb (Version): Look for a zero-termination in addition to a closing parenthesis. 2008-08-18 Robert Dewar gcc/testsuite/ PR ada/30827 * gnat.dg/test_version.adb: New. From-SVN: r139192 --- diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 47bcb8e77589..21e3e269a40b 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,13 @@ +2008-08-18 Samuel Tardieu + Robert Dewar + + PR ada/30827 + * bindgen.adb (Gen_Output_File_Ada): Zero-terminate the + version string. + Move comment in the right place. + * g-comver.adb (Version): Look for a zero-termination in + addition to a closing parenthesis. + 2008-08-18 Samuel Tardieu * exp_ch13.adb, exp_disp.adb, sem_cat.adb, sem_ch10.adb, diff --git a/gcc/ada/bindgen.adb b/gcc/ada/bindgen.adb index 070651cbd6a1..ccdf3948cb28 100644 --- a/gcc/ada/bindgen.adb +++ b/gcc/ada/bindgen.adb @@ -2267,17 +2267,19 @@ package body Bindgen is WBI (" gnat_exit_status : Integer;"); WBI (" pragma Import (C, gnat_exit_status);"); end if; - - -- Generate the GNAT_Version and Ada_Main_Program_Name info only - -- for the main program. Otherwise, it can lead under some - -- circumstances to a symbol duplication during the link (for - -- instance when a C program uses 2 Ada libraries) end if; + -- Generate the GNAT_Version and Ada_Main_Program_Name info only for + -- the main program. Otherwise, it can lead under some circumstances + -- to a symbol duplication during the link (for instance when a C + -- program uses two Ada libraries). Also zero terminate the string + -- so that its end can be found reliably at run time. + WBI (""); WBI (" GNAT_Version : constant String :="); WBI (" ""GNAT Version: " & - Gnat_Version_String & """;"); + Gnat_Version_String & + """ & ASCII.NUL;"); WBI (" pragma Export (C, GNAT_Version, ""__gnat_version"");"); WBI (""); diff --git a/gcc/ada/g-comver.adb b/gcc/ada/g-comver.adb index 2a0d120d8324..ae3bf3bf66cb 100644 --- a/gcc/ada/g-comver.adb +++ b/gcc/ada/g-comver.adb @@ -53,15 +53,18 @@ package body GNAT.Compiler_Version is function Version return String is begin - -- Search for terminating right paren + -- Search for terminating right paren or NUL ending the string for J in Ver_Prefix'Length + 1 .. GNAT_Version'Last loop if GNAT_Version (J) = ')' then return GNAT_Version (Ver_Prefix'Length + 1 .. J); end if; + if GNAT_Version (J) = Character'Val (0) then + return GNAT_Version (Ver_Prefix'Length + 1 .. J - 1); + end if; end loop; - -- This should not happen (no right paren found) + -- This should not happen (no right paren or NUL found) return GNAT_Version; end Version; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 9eca6a00edbd..56cd326d7d06 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2008-08-18 Robert Dewar + + PR ada/30827 + * gnat.dg/test_version.adb: New. + 2008-08-18 Samuel Tardieu PR ada/15808 diff --git a/gcc/testsuite/gnat.dg/test_version.adb b/gcc/testsuite/gnat.dg/test_version.adb new file mode 100644 index 000000000000..d7fa2976c56b --- /dev/null +++ b/gcc/testsuite/gnat.dg/test_version.adb @@ -0,0 +1,13 @@ +-- { dg-do run } +with GNAT.Compiler_Version; +procedure Test_Version is + package Vsn is new GNAT.Compiler_Version; + use Vsn; + X : constant String := Version; +begin + if X'Length = 46 then + -- 46 = Ver_Len_Max + Ver_Prefix + -- actual version should be shorter than this + raise Program_Error; + end if; +end Test_Version;