[multiple changes]
authorArnaud Charlet <charlet@gcc.gnu.org>
Thu, 29 Apr 2004 15:24:56 +0000 (17:24 +0200)
committerArnaud Charlet <charlet@gcc.gnu.org>
Thu, 29 Apr 2004 15:24:56 +0000 (17:24 +0200)
2004-04-29  Ed Schonberg  <schonberg@gnat.com>

* checks.adb (Enable_Range_Check): If the prefix of an index component
is an access to an unconstrained array, perform check unconditionally.

2004-04-29  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

* decl.c (gnat_to_gnu_field): Also call make_packable_type if
Component_Clause.

2004-04-29  Olivier Hainque  <hainque@act-europe.fr>

* init.c (__gnat_install_handler, __gnat_error_handler): Remove
alternate stack setting. There was no support for the tasking cases
and the changes eventually caused a number of side-effect failures in
the non-tasking case too.

2004-04-29  Eric Botcazou  <ebotcazou@act-europe.fr>

lang-specs.h: Redirect output to /dev/null if -gnatc or -gnatz or
-gnats is passed.

2004-04-29  Vincent Celier  <celier@gnat.com>

* make.adb (Gnatmake): Increase max size of argument array for
gnatbind for the potential addition of -F.
If there are Stand-Alone Library projects, invoke gnatbind with -F to
be sure that elaboration flags will be checked.

* switch-c.adb: Correct call to Scan_Pos for -gnateI

2004-04-29  Thomas Quinot  <quinot@act-europe.fr>

* sem_warn.adb (Check_References): Move '<access-variable> may be
null' warning out of under Warn_On_No_Value_Assigned.

2004-04-29  Ed Falis  <falis@gnat.com>

* gnat_ugn.texi: Fixed texi error

2004-04-29  Robert Dewar  <dewar@gnat.com>

* sem_ch4.adb (Remove_Abstract_Operations): Unconditionally remove
abstract operations if they come from predefined files.

* gnat_rm.texi: Fix bad doc for pragma Elaboration_Checks (should be
Dynamic, not RM).

* s-addope.adb: Correct obvious error in mod function

From-SVN: r81289

12 files changed:
gcc/ada/ChangeLog
gcc/ada/checks.adb
gcc/ada/decl.c
gcc/ada/gnat_rm.texi
gcc/ada/gnat_ugn.texi
gcc/ada/init.c
gcc/ada/lang-specs.h
gcc/ada/make.adb
gcc/ada/s-addope.adb
gcc/ada/sem_ch4.adb
gcc/ada/sem_warn.adb
gcc/ada/switch-c.adb

index dd6d33f9d06328fc1027f3e933b33c338d1b1244..5daf8d435c005438ee43b2059981692650ce72ba 100644 (file)
@@ -1,3 +1,61 @@
+2004-04-29  Ed Schonberg  <schonberg@gnat.com>
+
+       * checks.adb (Enable_Range_Check): If the prefix of an index component
+       is an access to an unconstrained array, perform check unconditionally.
+
+2004-04-29  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * decl.c (gnat_to_gnu_field): Also call make_packable_type if
+       Component_Clause.
+
+2004-04-29  Olivier Hainque  <hainque@act-europe.fr>
+
+       * init.c (__gnat_install_handler, __gnat_error_handler): Remove
+       alternate stack setting. There was no support for the tasking cases
+       and the changes eventually caused a number of side-effect failures in
+       the non-tasking case too.
+
+2004-04-29  Eric Botcazou  <ebotcazou@act-europe.fr>
+
+       lang-specs.h: Redirect output to /dev/null if -gnatc or -gnatz or
+       -gnats is passed.
+
+2004-04-29  Vincent Celier  <celier@gnat.com>
+
+       * make.adb (Gnatmake): Increase max size of argument array for
+       gnatbind for the potential addition of -F.
+       If there are Stand-Alone Library projects, invoke gnatbind with -F to
+       be sure that elaboration flags will be checked.
+
+       * switch-c.adb: Correct call to Scan_Pos for -gnateI
+
+2004-04-29  Thomas Quinot  <quinot@act-europe.fr>
+
+       * sem_warn.adb (Check_References): Move '<access-variable> may be
+       null' warning out of under Warn_On_No_Value_Assigned.
+
+2004-04-29  Ed Falis  <falis@gnat.com>
+
+       * gnat_ugn.texi: Fixed texi error
+
+2004-04-29  Robert Dewar  <dewar@gnat.com>
+
+       * sem_ch4.adb (Remove_Abstract_Operations): Unconditionally remove
+       abstract operations if they come from predefined files.
+
+       * gnat_rm.texi: Fix bad doc for pragma Elaboration_Checks (should be
+       Dynamic, not RM).
+
+       * s-addope.adb: Correct obvious error in mod function
+
+2004-04-28  Andrew W. Reynolds  <awreynolds@mac.com>
+
+       * Makefile.in: Add target pairs for powerpc darwin*
+       tasking support.
+
+       * a-intnam-darwin.ads, s-osinte-darwin.adb,
+       s-osinte-darwin.ads, system-darwin-ppc.ads: New files.
+
 2004-04-28  Ulrich Weigand  <uweigand@de.ibm.com>
 
        * Makefile.in: Add target macro definitions for s390*-linux*.
index aaad1a488c37f0a98d9997827182b4fe098f158a..059730067e06257207a2e7187c211e32eef7f217 100644 (file)
@@ -3379,6 +3379,16 @@ package body Checks is
 
             if Is_Access_Type (Atyp) then
                Atyp := Designated_Type (Atyp);
+
+               --  If the prefix is an access to an unconstrained array,
+               --  perform check unconditionally: it depends on the bounds
+               --  of an object and we cannot currently recognize whether
+               --  the test may be redundant.
+
+               if not Is_Constrained (Atyp) then
+                  Set_Do_Range_Check (N, True);
+                  return;
+               end if;
             end if;
 
             Indx := First_Index (Atyp);
index 73c35c511dc3fdbd91c87f9c83f068dbd6be6290..92e1342feb93ed69e78cd439eee1dc150cd024ce 100644 (file)
@@ -4998,11 +4998,11 @@ gnat_to_gnu_field (Entity_Id gnat_field,
       && TYPE_LEFT_JUSTIFIED_MODULAR_P (gnu_field_type))
     gnu_field_type = TREE_TYPE (TYPE_FIELDS (gnu_field_type));
 
-  /* If we are packing this record or we have a specified size that's
-     smaller than that of the field type and the field type is also a record
-     that's BLKmode and with a small constant size, see if we can get a
-     better form of the type that allows more packing.  If we can, show
-     a size was specified for it if there wasn't one so we know to
+  /* If we are packing this record, have a specified size that's smaller than
+     that of the field type, or a position is specified, and the field type
+     is also a record that's BLKmode and with a small constant size, see if
+     we can get a better form of the type that allows more packing.  If we
+     can, show a size was specified for it if there wasn't one so we know to
      make this a bitfield and avoid making things wider.  */
   if (TREE_CODE (gnu_field_type) == RECORD_TYPE
       && TYPE_MODE (gnu_field_type) == BLKmode
@@ -5010,7 +5010,8 @@ gnat_to_gnu_field (Entity_Id gnat_field,
       && compare_tree_int (TYPE_SIZE (gnu_field_type), BIGGEST_ALIGNMENT) <= 0
       && (packed
          || (gnu_size != 0 && tree_int_cst_lt (gnu_size,
-                                               TYPE_SIZE (gnu_field_type)))))
+                                               TYPE_SIZE (gnu_field_type)))
+         || Present (Component_Clause (gnat_field))))
     {
       gnu_field_type = make_packable_type (gnu_field_type);
 
index 8dbc0d36c1a9b14149d13ec9e919fe9d1f01cb48..fad86e184bc0ea694a584e3734a63e8db2982578 100644 (file)
@@ -1308,16 +1308,17 @@ debug procedures in the middle of declarations.
 Syntax:
 
 @smallexample @c ada
-pragma Elaboration_Checks (RM | Static);
+pragma Elaboration_Checks (Dynamic | Static);
 @end smallexample
 
 @noindent
 This is a configuration pragma that provides control over the
 elaboration model used by the compilation affected by the
-pragma.  If the parameter is RM, then the dynamic elaboration
+pragma.  If the parameter is @code{Dynamic},
+then the dynamic elaboration
 model described in the Ada Reference Manual is used, as though
 the @code{-gnatE} switch had been specified on the command
-line.  If the parameter is Static, then the default GNAT static
+line.  If the parameter is @code{Static}, then the default GNAT static
 model is used.  This configuration pragma overrides the setting
 of the command line.  For full details on the elaboration models
 used by the GNAT compiler, see section ``Elaboration Order
index 06dd07a16ef1e3db300705f3f00653bd0dfe7fd1..2b908fb2e8b55789eea4b4f19e87df2dc292c6d3 100644 (file)
@@ -6935,7 +6935,7 @@ See also the packages @code{GNAT.Traceback} and
 @ifclear vms
 Note that on x86 ports, you must not use @option{-fomit-frame-pointer}
 @code{gcc} option.
-@end ifclear vms
+@end ifclear
 
 @item ^-F^/FORCE_ELABS_FLAGS^
 @cindex @option{^-F^/FORCE_ELABS_FLAGS^} (@command{gnatbind})
index efc1a25fc2a47c0f706466b8e8a671a09c9d34c7..fd25d0d7b0d09971c3a48a7676db4e003b42d257 100644 (file)
@@ -386,7 +386,6 @@ __gnat_initialize (void)
    exclude this case in the above test.  */
 
 #include <signal.h>
-#include <setjmp.h>
 #include <sys/siginfo.h>
 
 static void __gnat_error_handler (int, siginfo_t *, struct sigcontext *);
@@ -404,7 +403,6 @@ __gnat_error_handler (int sig, siginfo_t *sip, struct sigcontext *context)
   static int recurse = 0;
   struct sigcontext *mstate;
   const char *msg;
-  jmp_buf handler_jmpbuf;
 
   /* If this was an explicit signal from a "kill", just resignal it.  */
   if (SI_FROMUSER (sip))
@@ -414,43 +412,6 @@ __gnat_error_handler (int sig, siginfo_t *sip, struct sigcontext *context)
     }
 
   /* Otherwise, treat it as something we handle.  */
-
-  /* We are now going to raise the exception corresponding to the signal we
-     caught, which may eventually end up resuming the application code if the
-     exception is handled.
-
-     When the exception is handled, merely arranging for the *exception*
-     handler's context (stack pointer, program counter, other registers, ...)
-     to be installed is *not* enough to let the kernel think we've left the
-     *signal* handler.  This has annoying implications if an alternate stack
-     has been setup for this *signal* handler, because the kernel thinks we
-     are still running on that alternate stack even after the jump, which
-     causes trouble at least as soon as another signal is raised.
-
-     We deal with this by forcing a "local" longjmp within the signal handler
-     below, forcing the "on alternate stack" indication to be reset (kernel
-     wise) on the way.  If no alternate stack has been setup, this should be a
-     neutral operation. Otherwise, we will be in a delicate situation for a
-     short while because we are going to run the exception propagation code
-     within the alternate stack area (that is, with the stack pointer inside
-     the alternate stack bounds), but with the corresponding flag off from the
-     kernel's standpoint.  We expect this to be ok as long as the propagation
-     code does not trigger a signal itself, which is expected.
-
-     ??? A better approach would be to at least delay this operation until the
-     last second, that is, until just before we jump to the exception handler,
-     if any.  */
-
-  if (setjmp (handler_jmpbuf) == 0)
-    {
-#define JB_ONSIGSTK 0
-
-      /* Arrange for the "on alternate stack" flag to be reset.  See the
-        comments around "jmp_buf offsets" in /usr/include/setjmp.h.  */
-      handler_jmpbuf [JB_ONSIGSTK] = 0;
-      longjmp (handler_jmpbuf, 1);
-    }
-
   switch (sig)
     {
     case SIGSEGV:
@@ -510,36 +471,12 @@ __gnat_install_handler (void)
 {
   struct sigaction act;
 
-  /* stack-checking on this platform is performed by the back-end and conforms
-     to what the ABI *mandates* (DEC OSF/1 Calling standard for AXP systems,
-     chapter 6: Stack Limits in Multihtreaded Execution Environments).  This
-     does not include a "stack reserve" region, so nothing guarantees that
-     enough room remains on the current stack to propagate an exception when
-     a stack-overflow is signaled.  We deal with this by requesting the use of
-     an alternate stack region for signal handlers.
-
-     ??? The actual use of this alternate region depends on the act.sa_flags
-     including SA_ONSTACK below.  Care should be taken to update s-intman if
-     we want this to happen for tasks also.  */
-
-  static char sig_stack [8*1024];
-  /* 8K is a mininum to be able to propagate an exception using the GCC/ZCX
-     scheme.  */
-
-  struct sigaltstack ss;
-
-  ss.ss_sp = (void *) sig_stack;
-  ss.ss_size = sizeof (sig_stack);
-  ss.ss_flags = 0;
-
-  sigaltstack (&ss, 0);
-
   /* Setup signal handler to map synchronous signals to appropriate
      exceptions. Make sure that the handler isn't interrupted by another
      signal that might cause a scheduling event! */
 
   act.sa_handler = (void (*) (int)) __gnat_error_handler;
-  act.sa_flags = SA_ONSTACK | SA_RESTART | SA_NODEFER | SA_SIGINFO;
+  act.sa_flags = SA_RESTART | SA_NODEFER | SA_SIGINFO;
   sigemptyset (&act.sa_mask);
 
   /* Do not install handlers if interrupt state is "System" */
index c1ad1ae36f8f6b7db4c23250eea273d407f59d11..46a862a7d59d6198a82137810860204f8efb9e72 100644 (file)
@@ -6,7 +6,7 @@
  *                                                                          *
  *                              C Header File                               *
  *                                                                          *
- *           Copyright (C) 1992-2003 Free Software Foundation, Inc.         *
+ *           Copyright (C) 1992-2004 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- *
@@ -40,4 +40,5 @@
     %{g*} %{O*} %{W*} %{w} %{p} %{pg:-p} %{m*} %{a} %{f*} %{d*}\
     %{!S:%{o*:%w%*-gnatO}} \
     %i %{S:%W{o*}%{!o*:-o %b.s}} \
+    %{!S:%{gnatc*|gnatz*|gnats*: -o %j}} \
     %{!gnatc*:%{!gnatz*:%{!gnats*:%(invoke_as)}}}", 0, 0, 0},
index 264527ed250f6490be1f39a75cfb7e3279f11ee8..149c1fc41127a822cca4fe39dc2ec0eaf8371cb9 100644 (file)
@@ -344,6 +344,7 @@ package body Make is
    --  These flags are reset to True for each invokation of procedure Gnatmake.
 
    Shared_String : aliased String := "-shared";
+   Force_Elab_Flags_String : aliased String := "-F";
 
    No_Shared_Switch  : aliased Argument_List := (1 .. 0 => null);
    Shared_Switch     : aliased Argument_List := (1 => Shared_String'Access);
@@ -3323,6 +3324,8 @@ package body Make is
       --  The current working directory, used to modify some relative path
       --  switches on the command line when a project file is used.
 
+      There_Are_Stand_Alone_Libraries : Boolean := False;
+
    begin
       Gnatmake_Called := True;
 
@@ -4428,6 +4431,10 @@ package body Make is
 
                      for Proj1 in Projects.First .. Projects.Last loop
 
+                        if Projects.Table (Proj1).Standalone_Library then
+                           There_Are_Stand_Alone_Libraries := True;
+                        end if;
+
                         if Projects.Table (Proj1).Library
                           and then not Projects.Table (Proj1).Flag1
                         then
@@ -4643,7 +4650,7 @@ package body Make is
          if Do_Bind_Step then
             Bind_Step : declare
                Args : Argument_List
-                        (Binder_Switches.First .. Binder_Switches.Last + 1);
+                        (Binder_Switches.First .. Binder_Switches.Last + 2);
                --  The arguments for the invocation of gnatbind
 
                Last_Arg : Natural := Binder_Switches.Last;
@@ -4704,6 +4711,11 @@ package body Make is
                   Args (J) := Binder_Switches.Table (J);
                end loop;
 
+               if There_Are_Stand_Alone_Libraries then
+                  Last_Arg := Last_Arg + 1;
+                  Args (Last_Arg) := Force_Elab_Flags_String'Access;
+               end if;
+
                if Main_Project /= No_Project then
 
                   --  Put all the source directories in ADA_INCLUDE_PATH,
index 5a3881315985e88104f12f6a4b1c032e3691613b..2b360f1c96fad578ede362713de5295989c6f628 100644 (file)
@@ -81,7 +81,7 @@ package body System.Address_Operations is
 
    function ModA (Left, Right : Address) return Address is
    begin
-      return A (I (Left) and I (Right));
+      return A (I (Left) mod I (Right));
    end ModA;
 
    ---------
index cce3e09c7c859f5c51469af03228058445d67dba..42ebaef27861bbf00410d823442d3e551d9b7917 100644 (file)
@@ -30,7 +30,9 @@ with Debug;    use Debug;
 with Einfo;    use Einfo;
 with Errout;   use Errout;
 with Exp_Util; use Exp_Util;
+with Fname;    use Fname;
 with Itypes;   use Itypes;
+with Lib;      use Lib;
 with Lib.Xref; use Lib.Xref;
 with Namet;    use Namet;
 with Nlists;   use Nlists;
@@ -4344,22 +4346,32 @@ package body Sem_Ch4 is
    --------------------------------
 
    procedure Remove_Abstract_Operations (N : Node_Id) is
-      I               : Interp_Index;
-      It              : Interp;
-      Abstract_Op     : Entity_Id := Empty;
+      I           : Interp_Index;
+      It          : Interp;
+      Abstract_Op : Entity_Id := Empty;
 
       --  AI-310: If overloaded, remove abstract non-dispatching
-      --  operations.
+      --  operations. We activate this if either extensions are
+      --  enabled, or if the abstract operation in question comes
+      --  from a predefined file. This latter test allows us to
+      --  use abstract to make operations invisible to users. In
+      --  particular, if type Address is non-private and abstract
+      --  subprograms are used to hide its operators, they will be
+      --  truly hidden.
 
    begin
-      if Extensions_Allowed
-        and then Is_Overloaded (N)
-      then
+      if Is_Overloaded (N) then
          Get_First_Interp (N, I, It);
+
          while Present (It.Nam) loop
             if not Is_Type (It.Nam)
               and then Is_Abstract (It.Nam)
               and then not Is_Dispatching_Operation (It.Nam)
+              and then
+                (Extensions_Allowed
+                   or else Is_Predefined_File_Name
+                             (Unit_File_Name (Get_Source_Unit (It.Nam))))
+
             then
                Abstract_Op := It.Nam;
                Remove_Interp (I);
index 187fc9bf3895ea9587d9104fc49a77bff4f64bb8..970213e7905783d98d3b0e71c9f197ef3ce4f684 100644 (file)
@@ -384,8 +384,7 @@ package body Sem_Warn is
                then
                   null;
 
-               elsif Warn_On_No_Value_Assigned
-                 and then Present (UR)
+               elsif Present (UR)
                  and then Is_Access_Type (Etype (E1))
                then
 
index df91201a7ae6462ac576bfe47c097a893d596654..a378f209d9bd6a255dde6b02bbf0cdde37e06c5e 100644 (file)
@@ -386,7 +386,7 @@ package body Switch.C is
 
                   when 'I' =>
                      Ptr := Ptr + 1;
-                     Scan_Pos (Switch_Chars, 999, Ptr, Multiple_Unit_Index);
+                     Scan_Pos (Switch_Chars, Max, Ptr, Multiple_Unit_Index);
 
                   --  -gnatem (mapping file)