This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
cpplib: bool correctness
- From: Neil Booth <neil at daikokuya dot co dot uk>
- To: gcc-patches at gcc dot gnu dot org
- Cc: Jason R Thorpe <thorpej at wasabisystems dot com>,Zack Weinberg <zack at codesourcery dot com>,Steve Ellcey <sje at cup dot hp dot com>
- Date: Wed, 17 Jul 2002 18:30:16 +0100
- Subject: cpplib: bool correctness
This patch does bool correctly in cpplib, as discussed yesterday.
There were a couple of bugs, the rest of the patch is for
clarification purposes.
Steve, I'd appreciate it if you let me know if this fixes your
CPP problems.
I mentioned yesterday there was a -Wtraditional bug too; I was
hallucinating. This has bootstrapped without regressions, so
I've committed it.
Neil.
* cppexp.c (cpp_interpret_integer, append_digit, parse_defined,
eval_token): Clarify and correct use of "bool" variables.
* cpplib.h (struct cpp_options): Similarly.
* cppmacro.c (parse_params, _cpp_save_parameter): Ditto.
* cpptrad.c (recursive_macro): Similarly.
Index: cppexp.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/cppexp.c,v
retrieving revision 1.125
diff -u -p -r1.125 cppexp.c
--- cppexp.c 9 Jul 2002 22:21:37 -0000 1.125
+++ cppexp.c 17 Jul 2002 06:11:35 -0000
@@ -318,8 +318,8 @@ cpp_interpret_integer (pfile, token, typ
result.low = 0;
result.high = 0;
- result.unsignedp = type & CPP_N_UNSIGNED;
- result.overflow = 0;
+ result.unsignedp = !!(type & CPP_N_UNSIGNED);
+ result.overflow = false;
p = token->val.str.text;
end = p + token->val.str.len;
@@ -387,7 +387,7 @@ cpp_interpret_integer (pfile, token, typ
if (base == 10)
cpp_error (pfile, DL_WARNING,
"integer constant is so large that it is unsigned");
- result.unsignedp = 1;
+ result.unsignedp = true;
}
}
@@ -409,7 +409,7 @@ append_digit (num, digit, base, precisio
/* Multiply by 8 or 16. Catching this overflow here means we don't
need to worry about add_high overflowing. */
- overflow = num.high >> (PART_PRECISION - shift);
+ overflow = !!(num.high >> (PART_PRECISION - shift));
result.high = num.high << shift;
result.low = num.low << shift;
result.high |= num.low >> (PART_PRECISION - shift);
@@ -507,9 +507,9 @@ parse_defined (pfile)
pfile->state.prevent_expansion--;
- result.unsignedp = 0;
+ result.unsignedp = false;
result.high = 0;
- result.overflow = 0;
+ result.overflow = false;
result.low = node && node->type == NT_MACRO;
return result;
}
@@ -604,8 +604,8 @@ eval_token (pfile, token)
result.low = temp;
}
- result.unsignedp = unsignedp;
- result.overflow = 0;
+ result.unsignedp = !!unsignedp;
+ result.overflow = false;
return result;
}
Index: cpplib.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/cpplib.h,v
retrieving revision 1.224
diff -u -p -r1.224 cpplib.h
--- cpplib.h 11 Jun 2002 05:36:16 -0000 1.224
+++ cpplib.h 17 Jul 2002 06:11:38 -0000
@@ -402,8 +402,8 @@ struct cpp_options
ints and target wide characters, respectively. */
size_t precision, char_precision, int_precision, wchar_precision;
- /* Nonzero means chars (wide chars) are unsigned. */
- unsigned char unsigned_char, unsigned_wchar;
+ /* True means chars (wide chars) are unsigned. */
+ bool unsigned_char, unsigned_wchar;
/* Nonzero means __STDC__ should have the value 0 in system headers. */
unsigned char stdc_0_in_system_headers;
Index: cppmacro.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/cppmacro.c,v
retrieving revision 1.116
diff -u -p -r1.116 cppmacro.c
--- cppmacro.c 1 Jul 2002 12:47:52 -0000 1.116
+++ cppmacro.c 17 Jul 2002 06:11:38 -0000
@@ -69,7 +69,7 @@ static cpp_token *alloc_expansion_token
static cpp_token *lex_expansion_token PARAMS ((cpp_reader *, cpp_macro *));
static bool warn_of_redefinition PARAMS ((cpp_reader *, const cpp_hashnode *,
const cpp_macro *));
-static int parse_params PARAMS ((cpp_reader *, cpp_macro *));
+static bool parse_params PARAMS ((cpp_reader *, cpp_macro *));
static void check_trad_stringification PARAMS ((cpp_reader *,
const cpp_macro *,
const cpp_string *));
@@ -1245,7 +1245,7 @@ _cpp_save_parameter (pfile, macro, node)
{
cpp_error (pfile, DL_ERROR, "duplicate macro parameter \"%s\"",
NODE_NAME (node));
- return 1;
+ return true;
}
if (BUFF_ROOM (pfile->a_buff)
@@ -1254,11 +1254,12 @@ _cpp_save_parameter (pfile, macro, node)
((cpp_hashnode **) BUFF_FRONT (pfile->a_buff))[macro->paramc++] = node;
node->arg_index = macro->paramc;
- return 0;
+ return false;
}
-/* Check the syntax of the parameters in a MACRO definition. */
-static int
+/* Check the syntax of the parameters in a MACRO definition. Returns
+ false if an error occurs. */
+static bool
parse_params (pfile, macro)
cpp_reader *pfile;
cpp_macro *macro;
@@ -1281,31 +1282,31 @@ parse_params (pfile, macro)
cpp_error (pfile, DL_ERROR,
"\"%s\" may not appear in macro parameter list",
cpp_token_as_text (pfile, token));
- return 0;
+ return false;
case CPP_NAME:
if (prev_ident)
{
cpp_error (pfile, DL_ERROR,
"macro parameters must be comma-separated");
- return 0;
+ return false;
}
prev_ident = 1;
if (_cpp_save_parameter (pfile, macro, token->val.node))
- return 0;
+ return false;
continue;
case CPP_CLOSE_PAREN:
if (prev_ident || macro->paramc == 0)
- return 1;
+ return true;
/* Fall through to pick up the error. */
case CPP_COMMA:
if (!prev_ident)
{
cpp_error (pfile, DL_ERROR, "parameter name missing");
- return 0;
+ return false;
}
prev_ident = 0;
continue;
@@ -1328,12 +1329,12 @@ parse_params (pfile, macro)
/* We're at the end, and just expect a closing parenthesis. */
token = _cpp_lex_token (pfile);
if (token->type == CPP_CLOSE_PAREN)
- return 1;
+ return true;
/* Fall through. */
case CPP_EOF:
cpp_error (pfile, DL_ERROR, "missing ')' in macro parameter list");
- return 0;
+ return false;
}
}
}
Index: cpptrad.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/cpptrad.c,v
retrieving revision 1.25
diff -u -p -r1.25 cpptrad.c
--- cpptrad.c 9 Jul 2002 22:21:36 -0000 1.25
+++ cpptrad.c 17 Jul 2002 06:11:39 -0000
@@ -802,7 +802,7 @@ recursive_macro (pfile, node)
cpp_reader *pfile;
cpp_hashnode *node;
{
- bool recursing = node->flags & NODE_DISABLED;
+ bool recursing = !!(node->flags & NODE_DISABLED);
/* Object-like macros that are already expanding are necessarily
recursive.