diff options
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/stor-layout.c | 6 |
2 files changed, 9 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index bcd20e3..286b66a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2003-05-04 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> + + * stor-layout.c (compute_record_mode): Relax restriction + on fields crossing word boundaries forcing BLKmode. + 2003-05-04 Neil Booth <neil@daikokuya.co.uk> * cppinit.c (cpp_create_reader, post_options): Warn about diff --git a/gcc/stor-layout.c b/gcc/stor-layout.c index f275e00..14f0f86 100644 --- a/gcc/stor-layout.c +++ b/gcc/stor-layout.c @@ -1387,8 +1387,10 @@ compute_record_mode (type) if (bitpos / BITS_PER_WORD != ((tree_low_cst (DECL_SIZE (field), 1) + bitpos - 1) / BITS_PER_WORD) - /* But there is no problem if the field is entire words. */ - && tree_low_cst (DECL_SIZE (field), 1) % BITS_PER_WORD != 0) + /* But there is no problem if the field is entire words + or bigger than a word. */ + && ! (tree_low_cst (DECL_SIZE (field), 1) % BITS_PER_WORD == 0 + || compare_tree_int (DECL_SIZE (field), BITS_PER_WORD) > 0)) return; /* If this field is the whole struct, remember its mode so |