aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorH.J. Lu <hongjiu.lu@intel.com>2010-06-03 16:36:22 +0000
committerH.J. Lu <hjl@gcc.gnu.org>2010-06-03 09:36:22 -0700
commit1c314335e78d3db824b5d3c3d8bf605221a39528 (patch)
tree33ce3fac8549a6e690ebbf71d88d113efaa17aaa /gcc
parentddf54e5aa0dac6956f9fa42a7e11c2915236cad0 (diff)
downloadgcc-1c314335e78d3db824b5d3c3d8bf605221a39528.zip
gcc-1c314335e78d3db824b5d3c3d8bf605221a39528.tar.gz
gcc-1c314335e78d3db824b5d3c3d8bf605221a39528.tar.bz2
Check MAX_FIXED_MODE_SIZE on bit-field in C++.
gcc/ada/ 2010-06-03 H.J. Lu <hongjiu.lu@intel.com> PR c++/44294 * gcc-interface/decl.c (MAX_FIXED_MODE_SIZE): Removed. gcc/cp/ 2010-06-03 H.J. Lu <hongjiu.lu@intel.com> PR c++/44294 * class.c (layout_class_type): Check MAX_FIXED_MODE_SIZE on bit-field. gcc/ 2010-06-03 H.J. Lu <hongjiu.lu@intel.com> PR c++/44294 * defaults.h (MAX_FIXED_MODE_SIZE): New. * stor-layout.c (MAX_FIXED_MODE_SIZE): Removed. From-SVN: r160229
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/ada/ChangeLog5
-rw-r--r--gcc/ada/gcc-interface/decl.c4
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/class.c6
-rw-r--r--gcc/defaults.h4
-rw-r--r--gcc/stor-layout.c4
7 files changed, 26 insertions, 10 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 61cf4d7..69188ac 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2010-06-03 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR c++/44294
+ * defaults.h (MAX_FIXED_MODE_SIZE): New.
+
+ * stor-layout.c (MAX_FIXED_MODE_SIZE): Removed.
+
2010-06-03 Jakub Jelinek <jakub@redhat.com>
PR debug/44375
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index 3340a4e..dfcef1d 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,3 +1,8 @@
+2010-06-03 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR c++/44294
+ * gcc-interface/decl.c (MAX_FIXED_MODE_SIZE): Removed.
+
2010-06-01 Arnaud Charlet <charlet@adacore.com>
* gnat_ugn.texi: Improve doc on -fdump-ada-spec, mention limitations.
diff --git a/gcc/ada/gcc-interface/decl.c b/gcc/ada/gcc-interface/decl.c
index 0fd7753..cf9f025 100644
--- a/gcc/ada/gcc-interface/decl.c
+++ b/gcc/ada/gcc-interface/decl.c
@@ -55,10 +55,6 @@
#include "ada-tree.h"
#include "gigi.h"
-#ifndef MAX_FIXED_MODE_SIZE
-#define MAX_FIXED_MODE_SIZE GET_MODE_BITSIZE (DImode)
-#endif
-
/* Convention_Stdcall should be processed in a specific way on Windows targets
only. The macro below is a helper to avoid having to check for a Windows
specific attribute throughout this unit. */
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index d02bff4..1138cd2 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2010-06-03 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR c++/44294
+ * class.c (layout_class_type): Check MAX_FIXED_MODE_SIZE on
+ bit-field.
+
2010-06-02 Jonathan Wakely <jwakely.gcc@gmail.com>
* parser.c (cp_parser_mem_initializer_list): Change error text.
diff --git a/gcc/cp/class.c b/gcc/cp/class.c
index c2831c1..69064a6 100644
--- a/gcc/cp/class.c
+++ b/gcc/cp/class.c
@@ -4976,8 +4976,10 @@ layout_class_type (tree t, tree *virtuals_p)
bits as additional padding. */
for (itk = itk_char; itk != itk_none; ++itk)
if (integer_types[itk] != NULL_TREE
- && INT_CST_LT (DECL_SIZE (field),
- TYPE_SIZE (integer_types[itk])))
+ && (INT_CST_LT (size_int (MAX_FIXED_MODE_SIZE),
+ TYPE_SIZE (integer_types[itk]))
+ || INT_CST_LT (DECL_SIZE (field),
+ TYPE_SIZE (integer_types[itk]))))
break;
/* ITK now indicates a type that is too large for the
diff --git a/gcc/defaults.h b/gcc/defaults.h
index 97fdcdd..dd461ad 100644
--- a/gcc/defaults.h
+++ b/gcc/defaults.h
@@ -1165,6 +1165,10 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
#define CONSTANT_ADDRESS_P(X) (CONSTANT_P (X) && GET_CODE (X) != CONST_DOUBLE)
#endif
+#ifndef MAX_FIXED_MODE_SIZE
+#define MAX_FIXED_MODE_SIZE GET_MODE_BITSIZE (DImode)
+#endif
+
#ifdef GCC_INSN_FLAGS_H
/* Dependent default target macro definitions
diff --git a/gcc/stor-layout.c b/gcc/stor-layout.c
index 3780a7f..ef9ec59 100644
--- a/gcc/stor-layout.c
+++ b/gcc/stor-layout.c
@@ -369,10 +369,6 @@ finalize_size_functions (void)
VEC_free (tree, gc, size_functions);
}
-#ifndef MAX_FIXED_MODE_SIZE
-#define MAX_FIXED_MODE_SIZE GET_MODE_BITSIZE (DImode)
-#endif
-
/* Return the machine mode to use for a nonscalar of SIZE bits. The
mode must be in class MCLASS, and have exactly that many value bits;
it may have padding as well. If LIMIT is nonzero, modes of wider