aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ada/ChangeLog6
-rw-r--r--gcc/ada/trans.c5
-rw-r--r--gcc/ada/utils2.c5
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gnat.dg/specs/alignment1.ads11
5 files changed, 25 insertions, 6 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index 33293cf..f571ec9 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,3 +1,9 @@
+2008-01-21 Eric Botcazou <ebotcazou@adacore.com>
+
+ * trans.c (gnat_to_gnu) <N_Free_Statement>: Use POINTER_PLUS_EXPR
+ in pointer arithmetics.
+ * utils2.c (build_allocator): Likewise.
+
2008-01-17 Eric Botcazou <ebotcazou@adacore.com>
* utils.c (build_function_stub): Properly build the call expression.
diff --git a/gcc/ada/trans.c b/gcc/ada/trans.c
index 5b04972..c79ed4d 100644
--- a/gcc/ada/trans.c
+++ b/gcc/ada/trans.c
@@ -4672,10 +4672,9 @@ gnat_to_gnu (Node_Id gnat_node)
= (void *)GNU_PTR - (void *)sizeof (void *)) */
gnu_ptr
= build_binary_op
- (MINUS_EXPR, ptr_void_type_node,
+ (POINTER_PLUS_EXPR, ptr_void_type_node,
convert (ptr_void_type_node, gnu_ptr),
- convert (ptr_void_type_node,
- TYPE_SIZE_UNIT (ptr_void_type_node)));
+ size_int (-POINTER_SIZE/BITS_PER_UNIT));
/* GNU_PTR (void *) = *(void **)GNU_PTR */
gnu_ptr
diff --git a/gcc/ada/utils2.c b/gcc/ada/utils2.c
index b8f5947..a2a7be4 100644
--- a/gcc/ada/utils2.c
+++ b/gcc/ada/utils2.c
@@ -2066,10 +2066,9 @@ build_allocator (tree type, tree init, tree result_type, Entity_Id gnat_proc,
front. */
{
tree ptr_addr
- = build_binary_op (MINUS_EXPR, ptr_void_type_node,
+ = build_binary_op (POINTER_PLUS_EXPR, ptr_void_type_node,
convert (ptr_void_type_node, result),
- convert (ptr_void_type_node,
- TYPE_SIZE_UNIT (ptr_void_type_node)));
+ size_int (-POINTER_SIZE/BITS_PER_UNIT));
tree ptr_ref
= convert (build_pointer_type (ptr_void_type_node), ptr_addr);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 04ad10c..e15a98f 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2008-01-21 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gnat.dg/specs/alignment1.ads: New test.
+
2008-01-21 Richard Guenther <rguenther@suse.de>
PR c++/34850
diff --git a/gcc/testsuite/gnat.dg/specs/alignment1.ads b/gcc/testsuite/gnat.dg/specs/alignment1.ads
new file mode 100644
index 0000000..cffcba1
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/specs/alignment1.ads
@@ -0,0 +1,11 @@
+-- { dg-do compile }
+
+package Alignment1 is
+ S : Natural := 20;
+ pragma Volatile (S);
+
+ type Block is array (1 .. S) of Integer;
+ for Block'Alignment use 128;
+
+ B : Block;
+end;