aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorArnaud Charlet <charlet@gcc.gnu.org>2008-05-26 17:52:16 +0200
committerArnaud Charlet <charlet@gcc.gnu.org>2008-05-26 17:52:16 +0200
commitedde779b94d7b50231977cb38ec4e36339d83486 (patch)
tree446442664490b2ac4a275eaa87713b54d0ea4d1b /gcc
parent45c87b72c753378a06738e9e8ab9f7aeaf56e9e6 (diff)
downloadgcc-edde779b94d7b50231977cb38ec4e36339d83486.zip
gcc-edde779b94d7b50231977cb38ec4e36339d83486.tar.gz
gcc-edde779b94d7b50231977cb38ec4e36339d83486.tar.bz2
* sem_attr.adb: Add some ??? comments for previous change
From-SVN: r135949
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ada/sem_attr.adb20
1 files changed, 19 insertions, 1 deletions
diff --git a/gcc/ada/sem_attr.adb b/gcc/ada/sem_attr.adb
index 79a6f02..768cdf6 100644
--- a/gcc/ada/sem_attr.adb
+++ b/gcc/ada/sem_attr.adb
@@ -8089,8 +8089,26 @@ package body Sem_Attr is
-- Arr (X .. Y)'address is identical to Arr (X)'address,
-- even if the array is packed and the slice itself is not
-- addressable. Transform the prefix into an indexed component.
+
-- Note that the transformation is safe only if we know that
- -- the slice is non-null.
+ -- the slice is non-null. That is because a null slice can have
+ -- an out of bounds index value.
+
+ -- Right now, gigi blows up if given 'Address on a slice, and
+ -- this covers up that bug in one case, but the bug is likely
+ -- still there in the cases not transformed by this code ???
+
+ -- It's not clear what 'Address *should* return for a null
+ -- slice with out of bounds indexes, this might be worth an ARG
+ -- discussion ???
+
+ -- One approach would be to do a length check unconditionally,
+ -- and then do the transformation below unconditionally, but
+ -- analyze with checks off, avoiding the problem of the out of
+ -- bounds index. This approach would interpret the address of
+ -- an out of bounds null slice as being the address where the
+ -- array element would be if there was one, which is probably
+ -- as reasonable an interpretation as any ???
declare
Loc : constant Source_Ptr := Sloc (P);