Commit 36c028f6 by Paul Brook Committed by Paul Brook

re PR fortran/17675 ([Regression w.r.t. g77] Alignment constraints not honored in EQUIVALENCE)

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.
testsuite/
	* gfortran.dg/common_4.f90: New test.

From-SVN: r93724
parent 3a2794ab
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
......
......@@ -803,7 +803,6 @@ translate_common (gfc_common_head *common, gfc_symbol *var_list)
common->name, &common->where);
offset = align_segment (&align);
apply_segment_offset (current_segment, offset);
if (offset & (max_align - 1))
{
......@@ -851,7 +850,8 @@ finish_equivalences (gfc_namespace *ns)
{
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)
......@@ -864,13 +864,13 @@ finish_equivalences (gfc_namespace *ns)
/* 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
......
! { 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
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment