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:
parent
3a2794abdb
commit
36c028f675
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
Loading…
Reference in New Issue