summaryrefslogtreecommitdiff
path: root/gcc/ada
diff options
context:
space:
mode:
authorcharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>2007-09-26 10:42:59 +0000
committercharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>2007-09-26 10:42:59 +0000
commit46ed552ee3a3aaa6139e90e3aaefe50397cf108a (patch)
tree9f6affc91257fbbff74071b18fe45d81fa90834e /gcc/ada
parentfdd18a7c94f4cbb499dafb7a1a1467fe861d55d9 (diff)
downloadgcc-46ed552ee3a3aaa6139e90e3aaefe50397cf108a.tar.gz
2007-09-26 Robert Dewar <dewar@adacore.com>
* 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
Diffstat (limited to 'gcc/ada')
-rw-r--r--gcc/ada/debug.adb7
-rw-r--r--gcc/ada/exp_ch5.adb15
2 files changed, 17 insertions, 5 deletions
diff --git a/gcc/ada/debug.adb b/gcc/ada/debug.adb
index 8b3ff397301..363cc07907c 100644
--- a/gcc/ada/debug.adb
+++ b/gcc/ada/debug.adb
@@ -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
diff --git a/gcc/ada/exp_ch5.adb b/gcc/ada/exp_ch5.adb
index c68a12a7463..4de10742ca6 100644
--- a/gcc/ada/exp_ch5.adb
+++ b/gcc/ada/exp_ch5.adb
@@ -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;