Commit 62f9f3ce by Eric Botcazou Committed by Eric Botcazou

utils.c (MAX_FIXED_MODE_SIZE): Delete.

	* gcc-interface/utils.c (MAX_FIXED_MODE_SIZE): Delete.
	(create_field_decl): Update description.  In a packed record, round
	the size up to a byte boundary only if the field's type has BLKmode.
	* gcc-interface/gigi.h (create_field_decl): Update description.

From-SVN: r153755
parent e15f1ff6
2009-10-30 Eric Botcazou <ebotcazou@adacore.com>
* gcc-interface/utils.c (MAX_FIXED_MODE_SIZE): Delete.
(create_field_decl): Update description. In a packed record, round
the size up to a byte boundary only if the field's type has BLKmode.
* gcc-interface/gigi.h (create_field_decl): Update description.
2009-10-30 Emmanuel Briot <briot@adacore.com> 2009-10-30 Emmanuel Briot <briot@adacore.com>
* make.adb (Start_Compile_If_Possible): Compute location of resulting * make.adb (Start_Compile_If_Possible): Compute location of resulting
......
...@@ -643,12 +643,13 @@ extern void record_global_renaming_pointer (tree decl); ...@@ -643,12 +643,13 @@ extern void record_global_renaming_pointer (tree decl);
/* Invalidate the global renaming pointers. */ /* Invalidate the global renaming pointers. */
extern void invalidate_global_renaming_pointers (void); extern void invalidate_global_renaming_pointers (void);
/* Returns a FIELD_DECL node. FIELD_NAME the field name, FIELD_TYPE is its /* Return a FIELD_DECL node. FIELD_NAME is the field's name, FIELD_TYPE is
type, and RECORD_TYPE is the type of the parent. PACKED is nonzero if its type and RECORD_TYPE is the type of the enclosing record. PACKED is
this field is in a record type with a "pragma pack". If SIZE is nonzero 1 if the enclosing record is packed, -1 if it has Component_Alignment of
it is the specified size for this field. If POS is nonzero, it is the bit Storage_Unit. If SIZE is nonzero, it is the specified size of the field.
position. If ADDRESSABLE is nonzero, it means we are allowed to take If POS is nonzero, it is the bit position. If ADDRESSABLE is nonzero, it
the address of this field for aliasing purposes. */ means we are allowed to take the address of the field; if it is negative,
we should not make a bitfield, which is used by make_aligning_type. */
extern tree create_field_decl (tree field_name, tree field_type, extern tree create_field_decl (tree field_name, tree field_type,
tree record_type, int packed, tree size, tree record_type, int packed, tree size,
tree pos, int addressable); tree pos, int addressable);
......
...@@ -59,10 +59,6 @@ ...@@ -59,10 +59,6 @@
#include "ada-tree.h" #include "ada-tree.h"
#include "gigi.h" #include "gigi.h"
#ifndef MAX_FIXED_MODE_SIZE
#define MAX_FIXED_MODE_SIZE GET_MODE_BITSIZE (DImode)
#endif
#ifndef MAX_BITS_PER_WORD #ifndef MAX_BITS_PER_WORD
#define MAX_BITS_PER_WORD BITS_PER_WORD #define MAX_BITS_PER_WORD BITS_PER_WORD
#endif #endif
...@@ -1457,13 +1453,13 @@ aggregate_type_contains_array_p (tree type) ...@@ -1457,13 +1453,13 @@ aggregate_type_contains_array_p (tree type)
} }
} }
/* Return a FIELD_DECL node. FIELD_NAME the field name, FIELD_TYPE is its /* Return a FIELD_DECL node. FIELD_NAME is the field's name, FIELD_TYPE is
type, and RECORD_TYPE is the type of the parent. PACKED is nonzero if its type and RECORD_TYPE is the type of the enclosing record. PACKED is
this field is in a record type with a "pragma pack". If SIZE is nonzero 1 if the enclosing record is packed, -1 if it has Component_Alignment of
it is the specified size for this field. If POS is nonzero, it is the bit Storage_Unit. If SIZE is nonzero, it is the specified size of the field.
position. If ADDRESSABLE is nonzero, it means we are allowed to take If POS is nonzero, it is the bit position. If ADDRESSABLE is nonzero, it
the address of this field for aliasing purposes. If it is negative, we means we are allowed to take the address of the field; if it is negative,
should not make a bitfield, which is used by make_aligning_type. */ we should not make a bitfield, which is used by make_aligning_type. */
tree tree
create_field_decl (tree field_name, tree field_type, tree record_type, create_field_decl (tree field_name, tree field_type, tree record_type,
...@@ -1497,12 +1493,8 @@ create_field_decl (tree field_name, tree field_type, tree record_type, ...@@ -1497,12 +1493,8 @@ create_field_decl (tree field_name, tree field_type, tree record_type,
else if (packed == 1) else if (packed == 1)
{ {
size = rm_size (field_type); size = rm_size (field_type);
if (TYPE_MODE (field_type) == BLKmode)
/* For a constant size larger than MAX_FIXED_MODE_SIZE, round up to size = round_up (size, BITS_PER_UNIT);
byte. */
if (TREE_CODE (size) == INTEGER_CST
&& compare_tree_int (size, MAX_FIXED_MODE_SIZE) > 0)
size = round_up (size, BITS_PER_UNIT);
} }
/* If we may, according to ADDRESSABLE, make a bitfield if a size is /* If we may, according to ADDRESSABLE, make a bitfield if a size is
......
2009-10-30 Eric Botcazou <ebotcazou@adacore.com>
* gnat.dg/specs/pack5.ads: New test.
2009-10-30 Andrew Jenner <andrew@codesourcery.com> 2009-10-30 Andrew Jenner <andrew@codesourcery.com>
* lib/target-supports.exp: Handle powerpc-*-elf. * lib/target-supports.exp: Handle powerpc-*-elf.
......
package Pack5 is
type Small is range -32 .. 31;
type Arr is array (Integer range <>) of Small;
pragma Pack (Arr);
type Rec is record
Y: Arr (1 .. 10);
end record;
pragma Pack (Rec);
end Pack5;
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