]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Check MAX_FIXED_MODE_SIZE on bit-field in C++.
authorH.J. Lu <hongjiu.lu@intel.com>
Thu, 3 Jun 2010 16:36:22 +0000 (16:36 +0000)
committerH.J. Lu <hjl@gcc.gnu.org>
Thu, 3 Jun 2010 16:36:22 +0000 (09:36 -0700)
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

gcc/ChangeLog
gcc/ada/ChangeLog
gcc/ada/gcc-interface/decl.c
gcc/cp/ChangeLog
gcc/cp/class.c
gcc/defaults.h
gcc/stor-layout.c

index 61cf4d76c32da15ed84eabd1d891bf88b5a608b1..69188acce8104e31b2146d246f444c32330b9d50 100644 (file)
@@ -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
index 3340a4e69970d831486bd268615ea070bb676281..dfcef1d2dbc8412813594d14c0e56ce5061e018c 100644 (file)
@@ -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.
index 0fd7753e1ae7d168f0a1c591d574f5b5c90f882c..cf9f025ba2cacc415009b00e2bebc5ec2a070e85 100644 (file)
 #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.  */
index d02bff462ff041dc2caa1c9e88eeb129091fe6da..1138cd203c5148ddc16ff91b6ee493d61585eb08 100644 (file)
@@ -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.
index c2831c1a4858f44ded9e770d5d0801abf8d50350..69064a6242c2e934e5d40239bfdb10108dad98e6 100644 (file)
@@ -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
index 97fdcdd7ce42232f096472456a9d7709a3d1c27c..dd461adbd3e5edefe62d65fdb4a1cc244f9d421c 100644 (file)
@@ -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
index 3780a7f94dbb704d08b2408379b09fc3a32e95aa..ef9ec596d74eaddf3f9cf8fd008df0e1629e518b 100644 (file)
@@ -369,10 +369,6 @@ finalize_size_functions (void)
   VEC_free (tree, gc, size_functions);
 }
 \f
-#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