From: Eric Botcazou Date: Fri, 26 Sep 2008 20:11:52 +0000 (+0000) Subject: decl.c (gnat_to_gnu_entity): Cap the alignment promotion to that of ptr_mode instead... X-Git-Tag: releases/gcc-4.4.0~2244 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=bb3da4f27b9d7241a626695e80edc285561f2506;p=thirdparty%2Fgcc.git decl.c (gnat_to_gnu_entity): Cap the alignment promotion to that of ptr_mode instead of word_mode. * decl.c (gnat_to_gnu_entity) : Cap the alignment promotion to that of ptr_mode instead of word_mode. From-SVN: r140711 --- diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 7ecdc2cd5dc0..3aa6f4d069a6 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,8 @@ +2008-09-26 Eric Botcazou + + * decl.c (gnat_to_gnu_entity) : Cap the alignment promotion + to that of ptr_mode instead of word_mode. + 2008-09-26 Eric Botcazou PR ada/5911 diff --git a/gcc/ada/gcc-interface/decl.c b/gcc/ada/gcc-interface/decl.c index d343b1449968..b0dfc7d33e4f 100644 --- a/gcc/ada/gcc-interface/decl.c +++ b/gcc/ada/gcc-interface/decl.c @@ -734,10 +734,12 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) && TREE_CODE (TYPE_SIZE (gnu_type)) == INTEGER_CST) { /* No point in jumping through all the hoops needed in order - to support BIGGEST_ALIGNMENT if we don't really have to. */ + to support BIGGEST_ALIGNMENT if we don't really have to. + So we cap to the smallest alignment that corresponds to + a known efficient memory access pattern of the target. */ unsigned int align_cap = Is_Atomic (gnat_entity) ? BIGGEST_ALIGNMENT - : get_mode_alignment (word_mode); + : get_mode_alignment (ptr_mode); if (!host_integerp (TYPE_SIZE (gnu_type), 1) || compare_tree_int (TYPE_SIZE (gnu_type), align_cap) >= 0) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 499e7c0ab7b7..8169b88a56f4 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2008-09-26 Eric Botcazou + + * gnat.dg/specs/static_initializer4.ads: New test. + * gnat.dg/specs/static_initializer3.ads: Add missing marker. + 2008-09-26 Kai Tietz * g++.dg/compat/struct-layout-1_x1.h: Add __SIZE_TYPE__ cast diff --git a/gcc/testsuite/gnat.dg/specs/static_initializer3.ads b/gcc/testsuite/gnat.dg/specs/static_initializer3.ads index 42994f2e1c57..2dc8be1e5beb 100644 --- a/gcc/testsuite/gnat.dg/specs/static_initializer3.ads +++ b/gcc/testsuite/gnat.dg/specs/static_initializer3.ads @@ -1,3 +1,5 @@ +-- { dg-do compile } + with Unchecked_Conversion; package Static_Initializer3 is diff --git a/gcc/testsuite/gnat.dg/specs/static_initializer4.ads b/gcc/testsuite/gnat.dg/specs/static_initializer4.ads new file mode 100644 index 000000000000..a1a5e846e330 --- /dev/null +++ b/gcc/testsuite/gnat.dg/specs/static_initializer4.ads @@ -0,0 +1,13 @@ +-- { dg-do compile } + +package Static_Initializer4 is + + type R is tagged record + b : Boolean; + end record; + + type NR is new R with null record; + + C : NR := (b => True); + +end Static_Initializer4;