From: H.J. Lu Date: Thu, 3 Jun 2010 16:36:22 +0000 (+0000) Subject: Check MAX_FIXED_MODE_SIZE on bit-field in C++. X-Git-Tag: releases/gcc-4.6.0~6789 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=1c314335e78d3db824b5d3c3d8bf605221a39528;p=thirdparty%2Fgcc.git Check MAX_FIXED_MODE_SIZE on bit-field in C++. gcc/ada/ 2010-06-03 H.J. Lu PR c++/44294 * gcc-interface/decl.c (MAX_FIXED_MODE_SIZE): Removed. gcc/cp/ 2010-06-03 H.J. Lu PR c++/44294 * class.c (layout_class_type): Check MAX_FIXED_MODE_SIZE on bit-field. gcc/ 2010-06-03 H.J. Lu PR c++/44294 * defaults.h (MAX_FIXED_MODE_SIZE): New. * stor-layout.c (MAX_FIXED_MODE_SIZE): Removed. From-SVN: r160229 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 61cf4d76c32d..69188acce810 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2010-06-03 H.J. Lu + + PR c++/44294 + * defaults.h (MAX_FIXED_MODE_SIZE): New. + + * stor-layout.c (MAX_FIXED_MODE_SIZE): Removed. + 2010-06-03 Jakub Jelinek PR debug/44375 diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 3340a4e69970..dfcef1d2dbc8 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,8 @@ +2010-06-03 H.J. Lu + + PR c++/44294 + * gcc-interface/decl.c (MAX_FIXED_MODE_SIZE): Removed. + 2010-06-01 Arnaud Charlet * 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 0fd7753e1ae7..cf9f025ba2ca 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 d02bff462ff0..1138cd203c51 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2010-06-03 H.J. Lu + + PR c++/44294 + * class.c (layout_class_type): Check MAX_FIXED_MODE_SIZE on + bit-field. + 2010-06-02 Jonathan Wakely * parser.c (cp_parser_mem_initializer_list): Change error text. diff --git a/gcc/cp/class.c b/gcc/cp/class.c index c2831c1a4858..69064a6242c2 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 97fdcdd7ce42..dd461adbd3e5 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 3780a7f94dbb..ef9ec596d74e 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