summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gnat.dg
diff options
context:
space:
mode:
authorebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>2006-07-03 20:14:18 +0000
committerebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>2006-07-03 20:14:18 +0000
commit2100c228d42604b982361a4309871b6e1f2c56d7 (patch)
tree730ad49fb04e92cd040cc6234ab11f52bd71851f /gcc/testsuite/gnat.dg
parent9c65be62147b4e0c07b8cf52a382f01d95613e6e (diff)
downloadgcc-2100c228d42604b982361a4309871b6e1f2c56d7.tar.gz
* tree.c (range_in_array_bounds_p): New predicate.
* tree.h (range_in_array_bounds_p): Declare it. * tree-eh.c (tree_could_trap_p) <ARRAY_RANGE_REF>: Use it to return a less conservative answer. * tree-sra.c (struct sra_elt): Add new pointer field 'groups' and flag 'is_group'. (IS_ELEMENT_FOR_GROUP): New macro. (FOR_EACH_ACTUAL_CHILD): Likewise. (next_child_for_group): New helper function. (can_completely_scalarize_p): Take into account groups. (sra_hash_tree): Handle RANGE_EXPR. (sra_elt_eq): Likewise. (lookup_element): Be prepared for handling groups. (is_valid_const_index): Delete. (maybe_lookup_element_for_expr) <ARRAY_REF>: Use in_array_bounds_p instead of is_valid_const_index. <ARRAY_RANGE_REF>: New case. (sra_walk_expr) <ARRAY_REF>: Use in_array_bounds_p instead of is_valid_const_index. <ARRAY_RANGE_REF>: Do not unconditionally punt. (scan_dump): Dump info for groups too. (decide_instantiation_1): Likewise. (decide_block_copy): Assert that the element is not a group. Propagate decision to groups. (generate_one_element_ref): Handle RANGE_EXPR. (mark_no_warning): Iterate over actual childs. (generate_copy_inout): Likewise. (generate_element_copy): Likewise. (generate_element_zero): Likewise. (generate_element_init_1): Likewise. (dump_sra_elt_name): Handle RANGE_EXPR. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@115160 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/testsuite/gnat.dg')
-rw-r--r--gcc/testsuite/gnat.dg/string_slice.adb21
1 files changed, 21 insertions, 0 deletions
diff --git a/gcc/testsuite/gnat.dg/string_slice.adb b/gcc/testsuite/gnat.dg/string_slice.adb
new file mode 100644
index 00000000000..c14ae49b7b7
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/string_slice.adb
@@ -0,0 +1,21 @@
+-- { dg-do run }
+-- { dg-options "-O" }
+
+procedure string_slice is
+
+ subtype Key_T is String (1 .. 3);
+
+ function One_Xkey return Key_T is
+ Key : Key_T := "XXX";
+ begin
+ Key (1 .. 2) := "__";
+ return Key;
+ end;
+
+ Key : Key_T := One_Xkey;
+
+begin
+ if Key (3) /= 'X' then
+ raise Program_Error;
+ end if;
+end;