OSDN Git Service

* config/xtensa/xtensa.c (xtensa_multibss_section_type_flags): Add
[pf3gnuchains/gcc-fork.git] / gcc / cppexp.c
index 9ab7b5f..b4f1dcc 100644 (file)
@@ -20,8 +20,6 @@ Boston, MA 02111-1307, USA.  */
 
 #include "config.h"
 #include "system.h"
-#include "coretypes.h"
-#include "tm.h"
 #include "cpplib.h"
 #include "cpphash.h"
 
@@ -40,34 +38,31 @@ struct op
 /* Some simple utility routines on double integers.  */
 #define num_zerop(num) ((num.low | num.high) == 0)
 #define num_eq(num1, num2) (num1.low == num2.low && num1.high == num2.high)
-static bool num_positive PARAMS ((cpp_num, size_t));
-static bool num_greater_eq PARAMS ((cpp_num, cpp_num, size_t));
-static cpp_num num_trim PARAMS ((cpp_num, size_t));
-static cpp_num num_part_mul PARAMS ((cpp_num_part, cpp_num_part));
-
-static cpp_num num_unary_op PARAMS ((cpp_reader *, cpp_num, enum cpp_ttype));
-static cpp_num num_binary_op PARAMS ((cpp_reader *, cpp_num, cpp_num,
-                                     enum cpp_ttype));
-static cpp_num num_negate PARAMS ((cpp_num, size_t));
-static cpp_num num_bitwise_op PARAMS ((cpp_reader *, cpp_num, cpp_num,
-                                      enum cpp_ttype));
-static cpp_num num_inequality_op PARAMS ((cpp_reader *, cpp_num, cpp_num,
-                                         enum cpp_ttype));
-static cpp_num num_equality_op PARAMS ((cpp_reader *, cpp_num, cpp_num,
-                                       enum cpp_ttype));
-static cpp_num num_mul PARAMS ((cpp_reader *, cpp_num, cpp_num));
-static cpp_num num_div_op PARAMS ((cpp_reader *, cpp_num, cpp_num,
-                                  enum cpp_ttype));
-static cpp_num num_lshift PARAMS ((cpp_num, size_t, size_t));
-static cpp_num num_rshift PARAMS ((cpp_num, size_t, size_t));
-
-static cpp_num append_digit PARAMS ((cpp_num, int, int, size_t));
-static cpp_num parse_defined PARAMS ((cpp_reader *));
-static cpp_num eval_token PARAMS ((cpp_reader *, const cpp_token *));
-static struct op *reduce PARAMS ((cpp_reader *, struct op *, enum cpp_ttype));
-static unsigned int interpret_float_suffix PARAMS ((const uchar *, size_t));
-static unsigned int interpret_int_suffix PARAMS ((const uchar *, size_t));
-static void check_promotion PARAMS ((cpp_reader *, const struct op *));
+static bool num_positive (cpp_num, size_t);
+static bool num_greater_eq (cpp_num, cpp_num, size_t);
+static cpp_num num_trim (cpp_num, size_t);
+static cpp_num num_part_mul (cpp_num_part, cpp_num_part);
+
+static cpp_num num_unary_op (cpp_reader *, cpp_num, enum cpp_ttype);
+static cpp_num num_binary_op (cpp_reader *, cpp_num, cpp_num, enum cpp_ttype);
+static cpp_num num_negate (cpp_num, size_t);
+static cpp_num num_bitwise_op (cpp_reader *, cpp_num, cpp_num, enum cpp_ttype);
+static cpp_num num_inequality_op (cpp_reader *, cpp_num, cpp_num,
+                                 enum cpp_ttype);
+static cpp_num num_equality_op (cpp_reader *, cpp_num, cpp_num,
+                               enum cpp_ttype);
+static cpp_num num_mul (cpp_reader *, cpp_num, cpp_num);
+static cpp_num num_div_op (cpp_reader *, cpp_num, cpp_num, enum cpp_ttype);
+static cpp_num num_lshift (cpp_num, size_t, size_t);
+static cpp_num num_rshift (cpp_num, size_t, size_t);
+
+static cpp_num append_digit (cpp_num, int, int, size_t);
+static cpp_num parse_defined (cpp_reader *);
+static cpp_num eval_token (cpp_reader *, const cpp_token *);
+static struct op *reduce (cpp_reader *, struct op *, enum cpp_ttype);
+static unsigned int interpret_float_suffix (const uchar *, size_t);
+static unsigned int interpret_int_suffix (const uchar *, size_t);
+static void check_promotion (cpp_reader *, const struct op *);
 
 /* Token type abuse to create unary plus and minus operators.  */
 #define CPP_UPLUS (CPP_LAST_CPP_OP + 1)
@@ -84,9 +79,7 @@ static void check_promotion PARAMS ((cpp_reader *, const struct op *));
    length LEN, possibly zero.  Returns 0 for an invalid suffix, or a
    flag vector describing the suffix.  */
 static unsigned int
-interpret_float_suffix (s, len)
-     const uchar *s;
-     size_t len;
+interpret_float_suffix (const uchar *s, size_t len)
 {
   size_t f = 0, l = 0, i = 0;
 
@@ -113,9 +106,7 @@ interpret_float_suffix (s, len)
    of length LEN, possibly zero. Returns 0 for an invalid suffix, or a
    flag vector describing the suffix.  */
 static unsigned int
-interpret_int_suffix (s, len)
-     const uchar *s;
-     size_t len;
+interpret_int_suffix (const uchar *s, size_t len)
 {
   size_t u, l, i;
 
@@ -149,9 +140,7 @@ interpret_int_suffix (s, len)
    floating point, or invalid), radix (decimal, octal, hexadecimal),
    and type suffixes.  */
 unsigned int
-cpp_classify_number (pfile, token)
-     cpp_reader *pfile;
-     const cpp_token *token;
+cpp_classify_number (cpp_reader *pfile, const cpp_token *token)
 {
   const uchar *str = token->val.str.text;
   const uchar *limit;
@@ -314,13 +303,11 @@ cpp_classify_number (pfile, token)
    of precision options->precision.
 
    We do not provide any interface for decimal->float conversion,
-   because the preprocessor doesn't need it and the floating point
-   handling in GCC proper is too ugly to speak of.  */
+   because the preprocessor doesn't need it and we don't want to
+   drag in GCC's floating point emulator.  */
 cpp_num
-cpp_interpret_integer (pfile, token, type)
-     cpp_reader *pfile;
-     const cpp_token *token;
-     unsigned int type;
+cpp_interpret_integer (cpp_reader *pfile, const cpp_token *token,
+                      unsigned int type)
 {
   const uchar *p, *end;
   cpp_num result;
@@ -403,13 +390,9 @@ cpp_interpret_integer (pfile, token, type)
   return result;
 }
 
-/* Append DIGIT to NUM, a number of PRECISION bits being read in base
-   BASE.  */
+/* Append DIGIT to NUM, a number of PRECISION bits being read in base BASE.  */
 static cpp_num
-append_digit (num, digit, base, precision)
-     cpp_num num;
-     int digit, base;
-     size_t precision;
+append_digit (cpp_num num, int digit, int base, size_t precision)
 {
   cpp_num result;
   unsigned int shift = 3 + (base == 16);
@@ -458,8 +441,7 @@ append_digit (num, digit, base, precision)
 
 /* Handle meeting "defined" in a preprocessor expression.  */
 static cpp_num
-parse_defined (pfile)
-     cpp_reader *pfile;
+parse_defined (cpp_reader *pfile)
 {
   cpp_num result;
   int paren = 0;
@@ -505,7 +487,7 @@ parse_defined (pfile)
 
   if (node)
     {
-      if (pfile->context != initial_context)
+      if (pfile->context != initial_context && CPP_PEDANTIC (pfile))
        cpp_error (pfile, DL_WARNING,
                   "this use of \"defined\" may not be portable");
 
@@ -529,9 +511,7 @@ parse_defined (pfile)
    number or character constant, or the result of the "defined" or "#"
    operators).  */
 static cpp_num
-eval_token (pfile, token)
-     cpp_reader *pfile;
-     const cpp_token *token;
+eval_token (cpp_reader *pfile, const cpp_token *token)
 {
   cpp_num result;
   unsigned int temp;
@@ -695,8 +675,7 @@ static const struct operator
    stored in the 'value' field of the stack element of the operator
    that precedes it.  */
 bool
-_cpp_parse_expr (pfile)
-     cpp_reader *pfile;
+_cpp_parse_expr (cpp_reader *pfile)
 {
   struct op *top = pfile->op_stack;
   unsigned int lex_count;
@@ -746,12 +725,6 @@ _cpp_parse_expr (pfile)
          if (want_value)
            op.op = CPP_UMINUS;
          break;
-       case CPP_OTHER:
-         if (ISGRAPH (op.token->val.c))
-           SYNTAX_ERROR2 ("invalid character '%c' in #if", op.token->val.c);
-         else
-           SYNTAX_ERROR2 ("invalid character '\\%03o' in #if",
-                          op.token->val.c);
 
        default:
          if ((int) op.op <= (int) CPP_EQ || (int) op.op >= (int) CPP_PLUS_EQ)
@@ -844,10 +817,7 @@ _cpp_parse_expr (pfile)
    pushing operator OP.  Returns NULL on error, otherwise the top of
    the stack.  */
 static struct op *
-reduce (pfile, top, op)
-     cpp_reader *pfile;
-     struct op *top;
-     enum cpp_ttype op;
+reduce (cpp_reader *pfile, struct op *top, enum cpp_ttype op)
 {
   unsigned int prio;
 
@@ -991,14 +961,12 @@ reduce (pfile, top, op)
 
 /* Returns the position of the old top of stack after expansion.  */
 struct op *
-_cpp_expand_op_stack (pfile)
-     cpp_reader *pfile;
+_cpp_expand_op_stack (cpp_reader *pfile)
 {
   size_t old_size = (size_t) (pfile->op_limit - pfile->op_stack);
   size_t new_size = old_size * 2 + 20;
 
-  pfile->op_stack = (struct op *) xrealloc (pfile->op_stack,
-                                           new_size * sizeof (struct op));
+  pfile->op_stack = xrealloc (pfile->op_stack, new_size * sizeof (struct op));
   pfile->op_limit = pfile->op_stack + new_size;
 
   return pfile->op_stack + old_size;
@@ -1007,9 +975,7 @@ _cpp_expand_op_stack (pfile)
 /* Emits a warning if the effective sign of either operand of OP
    changes because of integer promotions.  */
 static void
-check_promotion (pfile, op)
-     cpp_reader *pfile;
-     const struct op *op;
+check_promotion (cpp_reader *pfile, const struct op *op)
 {
   if (op->value.unsignedp == op[-1].value.unsignedp)
     return;
@@ -1029,9 +995,7 @@ check_promotion (pfile, op)
 
 /* Clears the unused high order bits of the number pointed to by PNUM.  */
 static cpp_num
-num_trim (num, precision)
-     cpp_num num;
-     size_t precision;
+num_trim (cpp_num num, size_t precision)
 {
   if (precision > PART_PRECISION)
     {
@@ -1051,9 +1015,7 @@ num_trim (num, precision)
 
 /* True iff A (presumed signed) >= 0.  */
 static bool
-num_positive (num, precision)
-     cpp_num num;
-     size_t precision;
+num_positive (cpp_num num, size_t precision)
 {
   if (precision > PART_PRECISION)
     {
@@ -1067,9 +1029,7 @@ num_positive (num, precision)
 /* Sign extend a number, with PRECISION significant bits and all
    others assumed clear, to fill out a cpp_num structure.  */
 cpp_num
-cpp_num_sign_extend (num, precision)
-     cpp_num num;
-     size_t precision;
+cpp_num_sign_extend (cpp_num num, size_t precision)
 {
   if (!num.unsignedp)
     {
@@ -1093,9 +1053,7 @@ cpp_num_sign_extend (num, precision)
 
 /* Returns the negative of NUM.  */
 static cpp_num
-num_negate (num, precision)
-     cpp_num num;
-     size_t precision;
+num_negate (cpp_num num, size_t precision)
 {
   cpp_num copy;
 
@@ -1112,9 +1070,7 @@ num_negate (num, precision)
 
 /* Returns true if A >= B.  */
 static bool
-num_greater_eq (pa, pb, precision)
-     cpp_num pa, pb;
-     size_t precision;
+num_greater_eq (cpp_num pa, cpp_num pb, size_t precision)
 {
   bool unsignedp;
 
@@ -1137,10 +1093,8 @@ num_greater_eq (pa, pb, precision)
 
 /* Returns LHS OP RHS, where OP is a bit-wise operation.  */
 static cpp_num
-num_bitwise_op (pfile, lhs, rhs, op)
-     cpp_reader *pfile ATTRIBUTE_UNUSED;
-     cpp_num lhs, rhs;
-     enum cpp_ttype op;
+num_bitwise_op (cpp_reader *pfile ATTRIBUTE_UNUSED,
+               cpp_num lhs, cpp_num rhs, enum cpp_ttype op)
 {
   lhs.overflow = false;
   lhs.unsignedp = lhs.unsignedp || rhs.unsignedp;
@@ -1168,10 +1122,8 @@ num_bitwise_op (pfile, lhs, rhs, op)
 
 /* Returns LHS OP RHS, where OP is an inequality.  */
 static cpp_num
-num_inequality_op (pfile, lhs, rhs, op)
-     cpp_reader *pfile;
-     cpp_num lhs, rhs;
-     enum cpp_ttype op;
+num_inequality_op (cpp_reader *pfile, cpp_num lhs, cpp_num rhs,
+                  enum cpp_ttype op)
 {
   bool gte = num_greater_eq (lhs, rhs, CPP_OPTION (pfile, precision));
 
@@ -1192,10 +1144,8 @@ num_inequality_op (pfile, lhs, rhs, op)
 
 /* Returns LHS OP RHS, where OP is == or !=.  */
 static cpp_num
-num_equality_op (pfile, lhs, rhs, op)
-     cpp_reader *pfile ATTRIBUTE_UNUSED;
-     cpp_num lhs, rhs;
-     enum cpp_ttype op;
+num_equality_op (cpp_reader *pfile ATTRIBUTE_UNUSED,
+                cpp_num lhs, cpp_num rhs, enum cpp_ttype op)
 {
   /* Work around a 3.0.4 bug; see PR 6950.  */
   bool eq = num_eq (lhs, rhs);
@@ -1210,9 +1160,7 @@ num_equality_op (pfile, lhs, rhs, op)
 
 /* Shift NUM, of width PRECISION, right by N bits.  */
 static cpp_num
-num_rshift (num, precision, n)
-     cpp_num num;
-     size_t precision, n;
+num_rshift (cpp_num num, size_t precision, size_t n)
 {
   cpp_num_part sign_mask;
 
@@ -1252,9 +1200,7 @@ num_rshift (num, precision, n)
 
 /* Shift NUM, of width PRECISION, left by N bits.  */
 static cpp_num
-num_lshift (num, precision, n)
-     cpp_num num;
-     size_t precision, n;
+num_lshift (cpp_num num, size_t precision, size_t n)
 {
   if (n >= precision)
     {
@@ -1294,10 +1240,7 @@ num_lshift (num, precision, n)
 
 /* The four unary operators: +, -, ! and ~.  */
 static cpp_num
-num_unary_op (pfile, num, op)
-     cpp_reader *pfile;
-     cpp_num num;
-     enum cpp_ttype op;
+num_unary_op (cpp_reader *pfile, cpp_num num, enum cpp_ttype op)
 {
   switch (op)
     {
@@ -1332,10 +1275,7 @@ num_unary_op (pfile, num, op)
 
 /* The various binary operators.  */
 static cpp_num
-num_binary_op (pfile, lhs, rhs, op)
-     cpp_reader *pfile;
-     cpp_num lhs, rhs;
-     enum cpp_ttype op;
+num_binary_op (cpp_reader *pfile, cpp_num lhs, cpp_num rhs, enum cpp_ttype op)
 {
   cpp_num result;
   size_t precision = CPP_OPTION (pfile, precision);
@@ -1417,8 +1357,7 @@ num_binary_op (pfile, lhs, rhs, op)
 /* Multiplies two unsigned cpp_num_parts to give a cpp_num.  This
    cannot overflow.  */
 static cpp_num
-num_part_mul (lhs, rhs)
-     cpp_num_part lhs, rhs;
+num_part_mul (cpp_num_part lhs, cpp_num_part rhs)
 {
   cpp_num result;
   cpp_num_part middle[2], temp;
@@ -1448,9 +1387,7 @@ num_part_mul (lhs, rhs)
 
 /* Multiply two preprocessing numbers.  */
 static cpp_num
-num_mul (pfile, lhs, rhs)
-     cpp_reader *pfile;
-     cpp_num lhs, rhs;
+num_mul (cpp_reader *pfile, cpp_num lhs, cpp_num rhs)
 {
   cpp_num result, temp;
   bool unsignedp = lhs.unsignedp || rhs.unsignedp;
@@ -1500,10 +1437,7 @@ num_mul (pfile, lhs, rhs)
 /* Divide two preprocessing numbers, returning the answer or the
    remainder depending upon OP.  */
 static cpp_num
-num_div_op (pfile, lhs, rhs, op)
-     cpp_reader *pfile;
-     cpp_num lhs, rhs;
-     enum cpp_ttype op;
+num_div_op (cpp_reader *pfile, cpp_num lhs, cpp_num rhs, enum cpp_ttype op)
 {
   cpp_num result, sub;
   cpp_num_part mask;