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
This commit is contained in:
Paul Brook 2005-01-16 12:05:53 +00:00 committed by Paul Brook
parent 3a2794abdb
commit 36c028f675
4 changed files with 36 additions and 7 deletions

View File

@ -1,3 +1,9 @@
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

View File

@ -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);

View File

@ -1,3 +1,7 @@
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

View File

@ -0,0 +1,19 @@
! { 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