From 6d28f29fa6cc082312efb7aa87f52d53fc36323c Mon Sep 17 00:00:00 2001 From: burnus Date: Sun, 9 Oct 2011 19:37:47 +0000 Subject: [PATCH] 2011-10-09 Tobias Burnus PR fortran/45044 * trans-common.c (translate_common): Fix -Walign-commons check. 2011-10-09 Tobias Burnus PR fortran/45044 * gfortran.dg/common_14.f90: Compile with -Wno-align-commons. * gfortran.dg/common_16.f90: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@179729 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/fortran/ChangeLog | 5 +++++ gcc/fortran/trans-common.c | 10 +++------- gcc/testsuite/ChangeLog | 6 ++++++ gcc/testsuite/gfortran.dg/common_14.f90 | 1 + gcc/testsuite/gfortran.dg/common_16.f90 | 12 ++++++++++++ 5 files changed, 27 insertions(+), 7 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/common_16.f90 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index a8b99929788..2156e716bdb 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,8 @@ +2011-10-09 Tobias Burnus + + PR fortran/45044 + * trans-common.c (translate_common): Fix -Walign-commons check. + 2011-10-09 Mikael Morin * interface.c (check_dummy_characteristics): Count dimensions starting diff --git a/gcc/fortran/trans-common.c b/gcc/fortran/trans-common.c index 21237c8d8ec..61ce44ba37a 100644 --- a/gcc/fortran/trans-common.c +++ b/gcc/fortran/trans-common.c @@ -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); } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index c5717feed4c..bef6c34335b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,11 @@ 2011-10-09 Tobias Burnus + PR fortran/45044 + * gfortran.dg/common_14.f90: Compile with -Wno-align-commons. + * gfortran.dg/common_16.f90: New. + +2011-10-09 Tobias Burnus + * 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. diff --git a/gcc/testsuite/gfortran.dg/common_14.f90 b/gcc/testsuite/gfortran.dg/common_14.f90 index aced168c655..892e4a5705f 100644 --- a/gcc/testsuite/gfortran.dg/common_14.f90 +++ b/gcc/testsuite/gfortran.dg/common_14.f90 @@ -1,4 +1,5 @@ ! { dg-do compile } +! { dg-options "-Wno-align-commons" } ! ! PR fortran/45044 ! diff --git a/gcc/testsuite/gfortran.dg/common_16.f90 b/gcc/testsuite/gfortran.dg/common_16.f90 new file mode 100644 index 00000000000..3314e80ef9d --- /dev/null +++ b/gcc/testsuite/gfortran.dg/common_16.f90 @@ -0,0 +1,12 @@ +! { 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 -- 2.11.0