2009-04-16  Jan Beulich  <jbeulich@novell.com>

	* expr.c: Include limits.h if available, and #define CHAR_BITS
	otherwise.
	(expr): Check range of shift count when evaluating a constant
	expression.
This commit is contained in:
Jan Beulich 2009-04-16 08:52:27 +00:00
parent 3f904b1697
commit d85733c8e2
2 changed files with 22 additions and 0 deletions

View File

@ -1,3 +1,10 @@
2009-04-16 Jan Beulich <jbeulich@novell.com>
* expr.c: Include limits.h if available, and #define CHAR_BITS
otherwise.
(expr): Check range of shift count when evaluating a constant
expression.
2009-04-15 Jan Beulich <jbeulich@novell.com>
* config/tc-i386.c (process_operands): Print operands in

View File

@ -31,6 +31,13 @@
#include "safe-ctype.h"
#include "obstack.h"
#ifdef HAVE_LIMITS_H
#include <limits.h>
#endif
#ifndef CHAR_BIT
#define CHAR_BIT 8
#endif
static void floating_constant (expressionS * expressionP);
static valueT generic_bignum_to_int32 (void);
#ifdef BFD64
@ -1779,6 +1786,14 @@ expr (int rankarg, /* Larger # is higher rank. */
as_warn (_("division by zero"));
v = 1;
}
if ((valueT) v >= sizeof(valueT) * CHAR_BIT
&& (op_left == O_left_shift || op_left == O_right_shift))
{
as_warn_value_out_of_range (_("shift count"), v, 0,
sizeof(valueT) * CHAR_BIT - 1,
NULL, 0);
resultP->X_add_number = v = 0;
}
switch (op_left)
{
default: abort ();