[Ada] Parametrize exception message length

Arnaud Charlet charlet@adacore.com
Thu Jun 16 09:18:00 GMT 2005


Tested on i686-linux, committed on mainline.

Exception_Msg_Max_Length is parameterized to allow it to be set to an
appropriate size depending on the target. For example, exceptions signaled
by VMS I/O condition handlers can result in verbose and detailed messages
that overflow the former non-parameterized length of 200 characters.

2005-06-14  Doug Rupp  <rupp@adacore.com>

	* s-parame-vms.ads, s-parame-hpux.ads, s-parame-vms-restrict.ads,
	s-parame-ae653.ads, s-parame.ads, s-parame-vxworks.ads:
	Default_Exception_Msg_Max_Length: new parameter.

	* a-except.ads: (Exception_Msg_Max_Length): Set to
	System.Parameters.Default_Exception_Msg_Max_Length
	Add pragma Preelaborate_05 for AI-362
	Add warnings off to allow categorization violations for AI-362

-------------- next part --------------
Index: s-parame-vms.ads
===================================================================
RCS file: /cvs/gcc/gcc/gcc/ada/s-parame-vms.ads,v
retrieving revision 1.1
diff -u -p -r1.1 s-parame-vms.ads
--- s-parame-vms.ads	14 May 2004 10:02:00 -0000	1.1
+++ s-parame-vms.ads	15 Jun 2005 15:45:19 -0000
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 S p e c                                  --
 --                                                                          --
---          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
+--          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
@@ -31,8 +31,7 @@
 --                                                                          --
 ------------------------------------------------------------------------------
 
---  This is the OpenVMS version.
---  Blank line intentional so that it lines up exactly with default.
+--  This is the OpenVMS version
 
 --  This package defines some system dependent parameters for GNAT. These
 --  are values that are referenced by the runtime library and are therefore
@@ -199,4 +198,14 @@ pragma Pure (Parameters);
    --  predefined output or not (True means that traces are output).
    --  See System.Traces for more details.
 
+   ------------------------------
+   -- Exception Message Length --
+   ------------------------------
+
+   Default_Exception_Msg_Max_Length : constant := 512;
+   --  This constant specifies the maximum number of characters to allow in an
+   --  exception message (see RM 11.4.1(18)). The value for VMS exceeds the
+   --  default minimum of 200 to allow for the length of chained VMS condition
+   --  handling messages.
+
 end System.Parameters;
Index: s-parame-hpux.ads
===================================================================
RCS file: /cvs/gcc/gcc/gcc/ada/s-parame-hpux.ads,v
retrieving revision 1.1
diff -u -p -r1.1 s-parame-hpux.ads
--- s-parame-hpux.ads	14 May 2004 10:02:00 -0000	1.1
+++ s-parame-hpux.ads	15 Jun 2005 15:45:19 -0000
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 S p e c                                  --
 --                                                                          --
---          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
+--          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
@@ -32,7 +32,6 @@
 ------------------------------------------------------------------------------
 
 --  This is the HP version of this package
---  Blank line intentional so that it lines up exactly with default.
 
 --  This package defines some system dependent parameters for GNAT. These
 --  are values that are referenced by the runtime library and are therefore
@@ -199,4 +198,12 @@ pragma Pure (Parameters);
    --  predefined output or not (True means that traces are output).
    --  See System.Traces for more details.
 
+   ------------------------------
+   -- Exception Message Length --
+   ------------------------------
+
+   Default_Exception_Msg_Max_Length : constant := 200;
+   --  This constant specifies the default number of characters to allow
+   --  in an exception message (200 is minimum required by RM 11.4.1(18)).
+
 end System.Parameters;
Index: s-parame-vms-restrict.ads
===================================================================
RCS file: /cvs/gcc/gcc/gcc/ada/s-parame-vms-restrict.ads,v
retrieving revision 1.1
diff -u -p -r1.1 s-parame-vms-restrict.ads
--- s-parame-vms-restrict.ads	14 May 2004 10:02:00 -0000	1.1
+++ s-parame-vms-restrict.ads	15 Jun 2005 15:45:19 -0000
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 S p e c                                  --
 --                                                                          --
---          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
+--          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
@@ -31,9 +31,7 @@
 --                                                                          --
 ------------------------------------------------------------------------------
 
---  This is the OpenVMS version for restricted tasking.
-
---  Blank line intentional so that it lines up exactly with default.
+--  This is the OpenVMS version for restricted tasking
 
 --  This package defines some system dependent parameters for GNAT. These
 --  are values that are referenced by the runtime library and are therefore
@@ -200,4 +198,14 @@ pragma Pure (Parameters);
    --  predefined output or not (True means that traces are output).
    --  See System.Traces for more details.
 
+   ------------------------------
+   -- Exception Message Length --
+   ------------------------------
+
+   Default_Exception_Msg_Max_Length : constant := 512;
+   --  This constant specifies the maximum number of characters to allow in an
+   --  exception message (see RM 11.4.1(18)). The value for VMS exceeds the
+   --  default minimum of 200 to allow for the length of chained VMS condition
+   --  handling messages.
+
 end System.Parameters;
Index: s-parame-ae653.ads
===================================================================
RCS file: /cvs/gcc/gcc/gcc/ada/s-parame-ae653.ads,v
retrieving revision 1.1
diff -u -p -r1.1 s-parame-ae653.ads
--- s-parame-ae653.ads	14 May 2004 10:02:00 -0000	1.1
+++ s-parame-ae653.ads	15 Jun 2005 15:45:19 -0000
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 S p e c                                  --
 --                                                                          --
---          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
+--          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
@@ -31,7 +31,7 @@
 --                                                                          --
 ------------------------------------------------------------------------------
 
---  This is the default VxWorks AE 653 version of the package.`
+--  This is the default VxWorks AE 653 version of the package
 
 --  This package defines some system dependent parameters for GNAT. These
 --  are values that are referenced by the runtime library and are therefore
@@ -200,4 +200,12 @@ pragma Pure (Parameters);
    --  predefined output or not (True means that traces are output).
    --  See System.Traces for more details.
 
+   ------------------------------
+   -- Exception Message Length --
+   ------------------------------
+
+   Default_Exception_Msg_Max_Length : constant := 200;
+   --  This constant specifies the default number of characters to allow
+   --  in an exception message (200 is minimum required by RM 11.4.1(18)).
+
 end System.Parameters;
Index: s-parame.ads
===================================================================
RCS file: /cvs/gcc/gcc/gcc/ada/s-parame.ads,v
retrieving revision 1.6
diff -u -p -r1.6 s-parame.ads
--- s-parame.ads	21 Oct 2003 13:42:14 -0000	1.6
+++ s-parame.ads	15 Jun 2005 15:45:19 -0000
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 S p e c                                  --
 --                                                                          --
---          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
+--          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
@@ -31,8 +31,7 @@
 --                                                                          --
 ------------------------------------------------------------------------------
 
---  This is the default version used for all systems for which no special
---  target-specific version of this package is provided.
+--  Default version used when no target-specific version is provided
 
 --  This package defines some system dependent parameters for GNAT. These
 --  are values that are referenced by the runtime library and are therefore
@@ -199,4 +198,12 @@ pragma Pure (Parameters);
    --  predefined output or not (True means that traces are output).
    --  See System.Traces for more details.
 
+   ------------------------------
+   -- Exception Message Length --
+   ------------------------------
+
+   Default_Exception_Msg_Max_Length : constant := 200;
+   --  This constant specifies the default number of characters to allow
+   --  in an exception message (200 is minimum required by RM 11.4.1(18)).
+
 end System.Parameters;
Index: s-parame-vxworks.ads
===================================================================
RCS file: /cvs/gcc/gcc/gcc/ada/s-parame-vxworks.ads,v
retrieving revision 1.1
diff -u -p -r1.1 s-parame-vxworks.ads
--- s-parame-vxworks.ads	14 May 2004 10:02:00 -0000	1.1
+++ s-parame-vxworks.ads	15 Jun 2005 15:45:19 -0000
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 S p e c                                  --
 --                                                                          --
---          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
+--          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
@@ -31,7 +31,7 @@
 --                                                                          --
 ------------------------------------------------------------------------------
 
---  This is the default VxWorks version of the package.`
+--  This is the default VxWorks version of the package`
 
 --  This package defines some system dependent parameters for GNAT. These
 --  are values that are referenced by the runtime library and are therefore
@@ -200,4 +200,12 @@ pragma Pure (Parameters);
    --  predefined output or not (True means that traces are output).
    --  See System.Traces for more details.
 
+   ------------------------------
+   -- Exception Message Length --
+   ------------------------------
+
+   Default_Exception_Msg_Max_Length : constant := 200;
+   --  This constant specifies the default number of characters to allow
+   --  in an exception message (200 is minimum required by RM 11.4.1(18)).
+
 end System.Parameters;
Index: a-except.ads
===================================================================
RCS file: /cvs/gcc/gcc/gcc/ada/a-except.ads,v
retrieving revision 1.6
diff -u -p -r1.6 a-except.ads
--- a-except.ads	21 Oct 2003 13:41:53 -0000	1.6
+++ a-except.ads	15 Jun 2005 15:45:19 -0000
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 S p e c                                  --
 --                                                                          --
---          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
+--          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
 --                                                                          --
 -- This specification is derived from the Ada Reference Manual for use with --
 -- GNAT. The copyright notice above, and the license provisions that follow --
@@ -39,11 +39,24 @@ pragma Polling (Off);
 --  We must turn polling off for this unit, because otherwise we get
 --  elaboration circularities with ourself.
 
+pragma Warnings (Off);
+--  Allow withing of non-Preelaborated units in Ada 2005 mode where this
+--  package will be categorized as Preelaborate. See AI-362 for details.
+--  It is safe in the context of the run-time to violate the rules!
+
 with System;
+with System.Parameters;
 with System.Standard_Library;
 with System.Traceback_Entries;
+pragma Warnings (On);
 
 package Ada.Exceptions is
+pragma Warnings (Off);
+pragma Preelaborate_05 (Exceptions);
+pragma Warnings (On);
+--  In accordance with Ada 2005 AI-362. The warnings pragmas are so that we can
+--  compile this using older compiler versions, which will ignore the pragma,
+--  which is fine for the bootstrap.
 
    type Exception_Id is private;
    Null_Id : constant Exception_Id;
@@ -103,10 +116,11 @@ package Ada.Exceptions is
 
 private
    package SSL renames System.Standard_Library;
+   package SP renames System.Parameters;
 
    subtype EOA is Exception_Occurrence_Access;
 
-   Exception_Msg_Max_Length : constant := 200;
+   Exception_Msg_Max_Length : constant := SP.Default_Exception_Msg_Max_Length;
 
    ------------------
    -- Exception_Id --
@@ -288,6 +302,11 @@ private
    pragma Stream_Convert (Exception_Occurrence, String_To_EO, EO_To_String);
    --  Functions for implementing Exception_Occurrence stream attributes
 
+   pragma Warnings (Off);
+   --  Allow non-static constants in Ada 2005 mode where this package will be
+   --  implicitly categorized as Preelaborate. See AI-362 for details. It is
+   --  safe in the context of the run-time to violate the rules!
+
    Null_Occurrence : constant Exception_Occurrence := (
      Id               => Null_Id,
      Msg_Length       => 0,
@@ -299,4 +318,6 @@ private
      Tracebacks       => (others => TBE.Null_TB_Entry),
      Private_Data     => System.Null_Address);
 
+   pragma Warnings (On);
+
 end Ada.Exceptions;


More information about the Gcc-patches mailing list