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:
Christopher D. Rickett 2007-11-24 05:42:07 +00:00 committed by Jerry DeLisle
parent b769ac9cb8
commit af90c10fe1
2 changed files with 19 additions and 1 deletions

View File

@ -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

View File

@ -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;