Commit 7de61dc6 by Tobias Burnus Committed by Tobias Burnus

re PR fortran/45044 (Different named COMMON block size: No warning)

2011-10-09  Tobias Burnus  <burnus@net-b.de>

        PR fortran/45044
        * trans-common.c (translate_common): Fix -Walign-commons
        check.

2011-10-09  Tobias Burnus  <burnus@net-b.de>

        PR fortran/45044
        * gfortran.dg/common_14.f90: Compile with -Wno-align-commons.
        * gfortran.dg/common_16.f90: New.

From-SVN: r179729
parent 0cc89035
2011-10-09 Tobias Burnus <burnus@net-b.de>
PR fortran/45044
* trans-common.c (translate_common): Fix -Walign-commons check.
2011-10-09 Mikael Morin <mikael.morin@sfr.fr>
* interface.c (check_dummy_characteristics): Count dimensions starting
......
......@@ -1067,14 +1067,12 @@ translate_common (gfc_common_head *common, gfc_symbol *var_list)
HOST_WIDE_INT offset;
HOST_WIDE_INT current_offset;
unsigned HOST_WIDE_INT align;
unsigned HOST_WIDE_INT max_align;
bool saw_equiv;
common_segment = NULL;
offset = 0;
current_offset = 0;
align = 1;
max_align = 1;
saw_equiv = false;
/* Add symbols to the segment. */
......@@ -1117,7 +1115,7 @@ translate_common (gfc_common_head *common, gfc_symbol *var_list)
if (gfc_option.flag_align_commons)
offset = align_segment (&align);
if (offset & (max_align - 1))
if (offset)
{
/* The required offset conflicts with previous alignment
requirements. Insert padding immediately before this
......@@ -1140,8 +1138,6 @@ translate_common (gfc_common_head *common, gfc_symbol *var_list)
/* Apply the offset to the new segments. */
apply_segment_offset (current_segment, offset);
current_offset += offset;
if (max_align < align)
max_align = align;
/* Add the new segments to the common block. */
common_segment = add_segments (common_segment, current_segment);
......@@ -1161,11 +1157,11 @@ translate_common (gfc_common_head *common, gfc_symbol *var_list)
if (common_segment->offset != 0 && gfc_option.warn_align_commons)
{
if (strcmp (common->name, BLANK_COMMON_NAME))
gfc_warning ("COMMON '%s' at %L requires %d bytes of padding at start; "
gfc_warning ("COMMON '%s' at %L requires %d bytes of padding; "
"reorder elements or use -fno-align-commons",
common->name, &common->where, (int)common_segment->offset);
else
gfc_warning ("COMMON at %L requires %d bytes of padding at start; "
gfc_warning ("COMMON at %L requires %d bytes of padding; "
"reorder elements or use -fno-align-commons",
&common->where, (int)common_segment->offset);
}
......
2011-10-09 Tobias Burnus <burnus@net-b.de>
PR fortran/45044
* gfortran.dg/common_14.f90: Compile with -Wno-align-commons.
* gfortran.dg/common_16.f90: New.
2011-10-09 Tobias Burnus <burnus@net-b.de>
* gfortran.dg/iso_c_binding_param_1.f90: New.
* gfortran.dg/iso_c_binding_param_2.f90: New.
* gfortran.dg/c_sizeof_2.f90: Update dg-error.
......
! { dg-do compile }
! { dg-options "-Wno-align-commons" }
!
! PR fortran/45044
!
......
! { dg-do compile }
! { dg-options "-pedantic -mdalign" { target sh*-*-* } }
!
! PR fortran/50273
!
subroutine test()
character :: a
integer :: b
character :: c
common /global_var/ a, b, c ! { dg-warning "Padding of 3 bytes required before 'b' in COMMON" }
print *, a, b, c
end subroutine test
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