diff options
author | Richard Kenner <kenner@gcc.gnu.org> | 1996-04-01 16:16:06 -0500 |
---|---|---|
committer | Richard Kenner <kenner@gcc.gnu.org> | 1996-04-01 16:16:06 -0500 |
commit | e8621b3c1cbd3d2db673450c8744ab5a3457de28 (patch) | |
tree | b246454feac1e4daf2fe4d9acba293cbb8bf1484 | |
parent | f5b65a56691fdc8f8b914011da7ed8ec4fa1176c (diff) | |
download | gcc-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.c | 7 |
1 files changed, 6 insertions, 1 deletions
@@ -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; } |