OSDN Git Service

2007-09-26 Robert Dewar <dewar@adacore.com>
authorcharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 26 Sep 2007 10:42:59 +0000 (10:42 +0000)
committercharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 26 Sep 2007 10:42:59 +0000 (10:42 +0000)
* exp_ch5.adb: Activate memmove type processing if debug flag d.s is set

* debug.adb: Add d.s flag.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@128787 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ada/debug.adb
gcc/ada/exp_ch5.adb

index 8b3ff39..363cc07 100644 (file)
@@ -111,7 +111,7 @@ package body Debug is
    --  d.p
    --  d.q
    --  d.r
-   --  d.s
+   --  d.s  Disable expansion of slice move, use memmove
    --  d.t  Disable static allocation of library level dispatch tables
    --  d.u
    --  d.v
@@ -514,6 +514,11 @@ package body Debug is
    --       main source (this corresponds to a previous behavior of -gnatl and
    --       is used for running the ACATS tests).
 
+   --  d.s  Normally the compiler expands slice moves into loops if overlap
+   --       might be possible. This debug flag inhibits that expansion, and
+   --       the back end is expected to use an appropriate routine to handle
+   --       overlap, based on Forward_OK and Backwards_OK flags.
+
    --  d.t  The compiler has been modified (a fairly extensive modification)
    --       to generate static dispatch tables for library level tagged types.
    --       This debug switch disables this modification and reverts to the
index c68a12a..4de1074 100644 (file)
@@ -387,7 +387,7 @@ package body Exp_Ch5 is
          --       File.Storage := Contents;
          --    end Write_All;
 
-         --  We expand to a loop in either of these two cases.
+         --  We expand to a loop in either of these two cases
 
          --  Question for future thought. Another potentially more efficient
          --  approach would be to create the actual subtype, and then do an
@@ -636,11 +636,18 @@ package body Exp_Ch5 is
          --  gigi handle it.
 
          if not Loop_Required then
+
+            --  Assume gigi can handle it if Forwards_OK is set
+
             if Forwards_OK (N) then
                return;
-            else
-               null;
-               --  Here is where a memmove would be appropriate ???
+
+            --  If Forwards_OK is not set, the back end will need something
+            --  like memmove to handle the move. For now, this processing is
+            --  activated using the .s debug flag (-gnatd.s).
+
+            elsif Debug_Flag_Dot_S then
+               return;
             end if;
          end if;