aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1996-04-01 16:16:06 -0500
committerRichard Kenner <kenner@gcc.gnu.org>1996-04-01 16:16:06 -0500
commite8621b3c1cbd3d2db673450c8744ab5a3457de28 (patch)
treeb246454feac1e4daf2fe4d9acba293cbb8bf1484
parentf5b65a56691fdc8f8b914011da7ed8ec4fa1176c (diff)
downloadgcc-e8621b3c1cbd3d2db673450c8744ab5a3457de28.zip
gcc-e8621b3c1cbd3d2db673450c8744ab5a3457de28.tar.gz
gcc-e8621b3c1cbd3d2db673450c8744ab5a3457de28.tar.bz2
(get_inner_reference): When finding mode to access bitfield that ends up properly aligned...
(get_inner_reference): When finding mode to access bitfield that ends up properly aligned, use mode class of its type unless type's mode was BLKmode. From-SVN: r11651
-rw-r--r--gcc/expr.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/gcc/expr.c b/gcc/expr.c
index c3328a1..98f83e2 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -4150,7 +4150,12 @@ get_inner_reference (exp, pbitsize, pbitpos, poffset, pmode,
access in case EXP is in memory. */
if (mode == VOIDmode && *pbitsize != 0 && *pbitpos % *pbitsize == 0)
{
- mode = mode_for_size (*pbitsize, MODE_INT, 0);
+ mode = mode_for_size (*pbitsize,
+ (TYPE_MODE (TREE_TYPE (orig_exp)) == BLKmode
+ ? MODE_INT
+ : GET_MODE_CLASS (TYPE_MODE
+ (TREE_TYPE (orig_exp)))),
+ 0);
if (mode == BLKmode)
mode = VOIDmode;
}