Commit dc8c7978 by Tobias Burnus Committed by Tobias Burnus

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

2011-08-30  Tobias Burnus  <burnus@net-b.de>

        PR fortran/45044
        * trans-common.c (build_common_decl): Warn if named common
        block's size is not everywhere the same.

2011-08-30  Tobias Burnus  <burnus@net-b.de>

        PR fortran/45044
        * gfortran.dg/common_14.f90: New.
        * gfortran.dg/common_resize_1.f: Add two dg-warning.

From-SVN: r178344
parent d9cdfea5
2011-08-30 Tobias Burnus <burnus@net-b.de>
PR fortran/45044
* trans-common.c (build_common_decl): Warn if named common
block's size is not everywhere the same.
2011-08-30 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/45170
......
......@@ -390,14 +390,20 @@ build_common_decl (gfc_common_head *com, tree union_type, bool is_init)
if (decl != NULL_TREE)
{
tree size = TYPE_SIZE_UNIT (union_type);
/* Named common blocks of the same name shall be of the same size
in all scoping units of a program in which they appear, but
blank common blocks may be of different sizes. */
if (!tree_int_cst_equal (DECL_SIZE_UNIT (decl), size)
&& strcmp (com->name, BLANK_COMMON_NAME))
gfc_warning ("Named COMMON block '%s' at %L shall be of the "
"same size as elsewhere (%lu vs %lu bytes)", com->name,
&com->where,
(unsigned long) TREE_INT_CST_LOW (size),
(unsigned long) TREE_INT_CST_LOW (DECL_SIZE_UNIT (decl)));
if (tree_int_cst_lt (DECL_SIZE_UNIT (decl), size))
{
/* Named common blocks of the same name shall be of the same size
in all scoping units of a program in which they appear, but
blank common blocks may be of different sizes. */
if (strcmp (com->name, BLANK_COMMON_NAME))
gfc_warning ("Named COMMON block '%s' at %L shall be of the "
"same size", com->name, &com->where);
{
DECL_SIZE (decl) = TYPE_SIZE (union_type);
DECL_SIZE_UNIT (decl) = size;
DECL_MODE (decl) = TYPE_MODE (union_type);
......
2011-08-30 Tobias Burnus <burnus@net-b.de>
PR fortran/45044
* gfortran.dg/common_14.f90: New.
* gfortran.dg/common_resize_1.f: Add two dg-warning.
2011-08-30 Jason Merrill <jason@redhat.com>
PR c++/50084
......
! { dg-do compile }
!
! PR fortran/45044
!
! Named common blocks need to be all of the same size
! check that the compiler warns for those.
module m
common /xx/ a
end module m
subroutine two()
integer :: a, b, c
real(8) :: y
common /xx/ a, b, c, y ! { dg-warning "Named COMMON block 'xx' at \\(1\\) shall be of the same size as elsewhere \\(24 vs 4 bytes" }
end
subroutine one()
integer :: a, b
common /xx/ a, b ! { dg-warning "Named COMMON block 'xx' at \\(1\\) shall be of the same size as elsewhere \\(8 vs 24 bytes" }
end
call two()
end
! { dg-final { cleanup-modules "m" } }
......@@ -13,13 +13,13 @@ c
c
c unpack connection data
c
common/aux32/kka(lnv),kkb(lnv),kkc(lnv),
common/aux32/kka(lnv),kkb(lnv),kkc(lnv), ! { dg-warning "shall be of the same size as elsewhere" }
1 kk1(lnv),kk2(lnv),kk3(lnv),dxy(lnv),
2 dyx(lnv),dyz(lnv),dzy(lnv),dzx(lnv),
3 dxz(lnv),vx17(lnv),vx28(lnv),vx35(lnv),
4 vx46(lnv),vy17(lnv),vy28(lnv),
5 vy35(lnv),vy46(lnv),vz17(lnv),vz28(lnv),vz35(lnv),vz46(lnv)
common/aux33/ix1(lnv),ix2(lnv),ix3(lnv),ix4(lnv),ix5(lnv),
common/aux33/ix1(lnv),ix2(lnv),ix3(lnv),ix4(lnv),ix5(lnv), ! { dg-warning "shall be of the same size as elsewhere" }
1 ix6(lnv),ix7(lnv),ix8(lnv),mxt(lnv)
dimension ixp(nwcon,*)
c
......
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