trans-common.c (build_common_decl): Fix the alignment for BIND(C) common blocks.
2007-11-23 Christopher D. Rickett <crickett@lanl.gov> * trans-common.c (build_common_decl): Fix the alignment for BIND(C) common blocks. From-SVN: r130393
This commit is contained in:
parent
b769ac9cb8
commit
af90c10fe1
@ -1,3 +1,8 @@
|
||||
2007-11-23 Christopher D. Rickett <crickett@lanl.gov>
|
||||
|
||||
* trans-common.c (build_common_decl): Fix the alignment for
|
||||
BIND(C) common blocks.
|
||||
|
||||
2007-11-23 Jerry DeLisle <jvdelisle@gcc.gnu.org>
|
||||
|
||||
PR fortran/34209
|
||||
|
@ -407,7 +407,20 @@ build_common_decl (gfc_common_head *com, tree union_type, bool is_init)
|
||||
SET_DECL_ASSEMBLER_NAME (decl, gfc_sym_mangled_common_id (com));
|
||||
TREE_PUBLIC (decl) = 1;
|
||||
TREE_STATIC (decl) = 1;
|
||||
DECL_ALIGN (decl) = BIGGEST_ALIGNMENT;
|
||||
if (!com->is_bind_c)
|
||||
DECL_ALIGN (decl) = BIGGEST_ALIGNMENT;
|
||||
else
|
||||
{
|
||||
/* Do not set the alignment for bind(c) common blocks to
|
||||
BIGGEST_ALIGNMENT because that won't match what C does. Also,
|
||||
for common blocks with one element, the alignment must be
|
||||
that of the field within the common block in order to match
|
||||
what C will do. */
|
||||
tree field = NULL_TREE;
|
||||
field = TYPE_FIELDS (TREE_TYPE (decl));
|
||||
if (TREE_CHAIN (field) == NULL_TREE)
|
||||
DECL_ALIGN (decl) = TYPE_ALIGN (TREE_TYPE (field));
|
||||
}
|
||||
DECL_USER_ALIGN (decl) = 0;
|
||||
GFC_DECL_COMMON_OR_EQUIV (decl) = 1;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user