From c0d93be828e23ae2a5345e8863f9bc34a9d93164 Mon Sep 17 00:00:00 2001
From: amylaar <amylaar@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Mon, 12 Sep 2005 13:49:56 +0000
Subject: [PATCH] 	PR middle-end/23290 	* stor-layout.c
 (compute_record_mode): For records with a single 	field, actually check
 the field's mode size against the type size.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@104171 138bc75d-0d04-0410-961f-82ee72b054a4
---
 gcc/ChangeLog     | 4 ++++
 gcc/stor-layout.c | 7 ++++---
 2 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 70eb98755004..7d2a74292df9 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,9 @@
 2005-09-12  J"orn Rennecke <joern.rennecke@st.com>
 
+	PR middle-end/23290
+	* stor-layout.c (compute_record_mode): For records with a single
+	field, actually check the field's mode size against the type size.
+
 	* sh.h (HARD_REGNO_MODE_OK): Allow V4SFmode in general purpose
 	registers for TARGET_SHMEDIA.
 	(enum reg_class, REG_CLASS_NAMES, REG_CLASS_CONTENTS): Rename
diff --git a/gcc/stor-layout.c b/gcc/stor-layout.c
index 0ec818d7fbd2..31d8becdac75 100644
--- a/gcc/stor-layout.c
+++ b/gcc/stor-layout.c
@@ -1367,14 +1367,15 @@ compute_record_mode (tree type)
 #endif /* MEMBER_TYPE_FORCES_BLK  */
     }
 
-  TYPE_MODE (type) = mode_for_size_tree (TYPE_SIZE (type), MODE_INT, 1);
-
   /* If we only have one real field; use its mode if that mode's size
      matches the type's size.  This only applies to RECORD_TYPE.  This
      does not apply to unions.  */
   if (TREE_CODE (type) == RECORD_TYPE && mode != VOIDmode
-      && GET_MODE_SIZE (mode) == GET_MODE_SIZE (TYPE_MODE (type)))
+      && host_integerp (TYPE_SIZE (type), 1)
+      && GET_MODE_BITSIZE (mode) == TREE_INT_CST_LOW (TYPE_SIZE (type)))
     TYPE_MODE (type) = mode;
+  else
+    TYPE_MODE (type) = mode_for_size_tree (TYPE_SIZE (type), MODE_INT, 1);
 
   /* If structure's known alignment is less than what the scalar
      mode would need, and it matters, then stick with BLKmode.  */
-- 
GitLab