+2004-01-16 Paul Brook <paul@codesourcery.com>
+
+ PR fortran/17675
+ * trans-common.c (translate_common): Remove duplicate function call.
+ (finish_equivalences): Preserve alignment when biasing offsets.
+
2005-01-15 Tobias Schl"uter <tobias.schlueter@physik.uni-muenchen.de
* primary.c (check_digit): Call 'ISXDIGIT' instead of assuming
common->name, &common->where);
offset = align_segment (&align);
- apply_segment_offset (current_segment, offset);
if (offset & (max_align - 1))
{
{
gfc_equiv *z, *y;
gfc_symbol *sym;
- HOST_WIDE_INT min_offset;
+ HOST_WIDE_INT offset;
+ unsigned HOST_WIDE_INT align;
for (z = ns->equiv; z; z = z->next)
for (y = z->eq; y; y = y->eq)
/* All objects directly or indirectly equivalenced with this symbol. */
add_equivalences ();
- /* Bias the offsets to to start at zero. */
- min_offset = -current_segment->offset;
+ /* Align the block. */
+ offset = align_segment (&align);
- /* Ensure the block is properly aligned. */
- min_offset += align_segment (NULL);
+ /* Ensure all offsets are positive. */
+ offset -= current_segment->offset & ~(align - 1);
- apply_segment_offset (current_segment, min_offset);
+ apply_segment_offset (current_segment, offset);
/* Create the decl. */
create_common (NULL, current_segment);
+2004-01-16 Paul Brook <paul@codesourcery.com>
+
+ * gfortran.dg/common_4.f90: New test.
+
2005-01-15 Hans-Peter Nilsson <hp@axis.com>
PR rtl-optimization/19462
--- /dev/null
+! { dg-do run }
+! Suppress warnings about misaligned common blocks.
+! { dg-options "-w" }
+! Check misaligned common blocks.
+program prog
+ common /block/ a, b, c
+ integer*1 a
+ integer*4 b, c
+ a = 1
+ b = HUGE(b)
+ c = 2
+ call foo
+end program
+subroutine foo
+ common /block/ a, b, c
+ integer*1 a
+ integer*4 b, c
+ if (a .ne. 1 .or. b .ne. HUGE(b) .or. c .ne. 2) call abort
+end subroutine