diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 0a08f8b19dc3ebb7145e1eed9f0e0a8caa073f77..3b5ad656bcc9debe3fe94ab4e63d31b41e0b2efb 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,13 @@
+2001-03-01  John David Anglin  <dave@hiauly1.hia.nrc.ca>
+
+	* cpplib.c (_cpp_init_stacks): Cast enum for comparison.
+	* cppexp.c (lex): Cast enums for comparison.
+	* cppinit.c (parse_option): Cast enum for comparison.
+	* cpplex.c (cpp_spell_token): Cast enums to int for minus.
+	(cpp_output_token): Likewise.
+	(cpp_can_paste): Cast enums for comparsion and plus/minus.
+	(cpp_avoid_paste): Cast enums for minus and comparison.
+
 2001-03-01  Zack Weinberg  <zackw@stanford.edu>
 
 	* gcc.c, objc/lang-specs.h: Add zero initializer for cpp_spec
diff --git a/gcc/cppexp.c b/gcc/cppexp.c
index 6aa6d4b4dc3bb7f27da82a0f2a77be91145c48d4..6ce693e48cccfc3ae0fd0042578eae427082870d 100644
--- a/gcc/cppexp.c
+++ b/gcc/cppexp.c
@@ -477,7 +477,8 @@ lex (pfile, skip_evaluation, token)
       /* Fall through.  */
 
     default:
-      if ((token->type > CPP_EQ && token->type < CPP_PLUS_EQ)
+      if (((int) token->type > (int) CPP_EQ
+	   && (int) token->type < (int) CPP_PLUS_EQ)
 	  || token->type == CPP_EOF)
 	{
 	  op.op = token->type;
diff --git a/gcc/cppinit.c b/gcc/cppinit.c
index e6ae245f823715222735e01a391dae90c7796ea5..2b2e1998420e6b6c05417b7725312b450fd4581d 100644
--- a/gcc/cppinit.c
+++ b/gcc/cppinit.c
@@ -1191,7 +1191,7 @@ parse_option (input)
 		 Otherwise, return the longest option-accepting match.
 		 This loops no more than twice with current options.  */
 	      mx = md;
-	      for (; mn < N_OPTS; mn++)
+	      for (; mn < (unsigned int) N_OPTS; mn++)
 		{
 		  opt_len = cl_options[mn].opt_len;
 		  if (memcmp (input, cl_options[mn].opt_text, opt_len))
diff --git a/gcc/cpplex.c b/gcc/cpplex.c
index 9025b0531a80ef8590775b5b87eae248efe3d12b..1d98b056a635838cc3243d7a5d347e66a38e68b0 100644
--- a/gcc/cpplex.c
+++ b/gcc/cpplex.c
@@ -1321,7 +1321,8 @@ cpp_spell_token (pfile, token, buffer)
 	unsigned char c;
 
 	if (token->flags & DIGRAPH)
-	  spelling = digraph_spellings[token->type - CPP_FIRST_DIGRAPH];
+	  spelling
+	    = digraph_spellings[(int) token->type - (int) CPP_FIRST_DIGRAPH];
 	else if (token->flags & NAMED_OP)
 	  goto spell_ident;
 	else
@@ -1413,7 +1414,8 @@ cpp_output_token (token, fp)
 	const unsigned char *spelling;
 
 	if (token->flags & DIGRAPH)
-	  spelling = digraph_spellings[token->type - CPP_FIRST_DIGRAPH];
+	  spelling
+	    = digraph_spellings[(int) token->type - (int) CPP_FIRST_DIGRAPH];
 	else if (token->flags & NAMED_OP)
 	  goto spell_ident;
 	else
@@ -1523,8 +1525,8 @@ cpp_can_paste (pfile, token1, token2, digraph)
   if (token2->flags & NAMED_OP)
     b = CPP_NAME;
 
-  if (a <= CPP_LAST_EQ && b == CPP_EQ)
-    return a + (CPP_EQ_EQ - CPP_EQ);
+  if ((int) a <= (int) CPP_LAST_EQ && b == CPP_EQ)
+    return (enum cpp_ttype) ((int) a + ((int) CPP_EQ_EQ - (int) CPP_EQ));
 
   switch (a)
     {
@@ -1637,12 +1639,12 @@ cpp_avoid_paste (pfile, token1, token2)
 
   c = EOF;
   if (token2->flags & DIGRAPH)
-    c = digraph_spellings[b - CPP_FIRST_DIGRAPH][0];
+    c = digraph_spellings[(int) b - (int) CPP_FIRST_DIGRAPH][0];
   else if (token_spellings[b].category == SPELL_OPERATOR)
     c = token_spellings[b].name[0];
 
   /* Quickly get everything that can paste with an '='.  */
-  if (a <= CPP_LAST_EQ && c == '=')
+  if ((int) a <= (int) CPP_LAST_EQ && c == '=')
     return 1;
 
   switch (a)
diff --git a/gcc/cpplib.c b/gcc/cpplib.c
index 0ebd093f6135bd615e2b4d2db04156d8365b2855..07f8fad728ba6e4658abf9494fa0538a23e69889 100644
--- a/gcc/cpplib.c
+++ b/gcc/cpplib.c
@@ -1879,7 +1879,7 @@ _cpp_init_stacks (pfile)
   obstack_init (pfile->buffer_ob);
 
   /* Register the directives.  */
-  for (i = 0; i < N_DIRECTIVES; i++)
+  for (i = 0; i < (unsigned int) N_DIRECTIVES; i++)
     {
       node = cpp_lookup (pfile, dtable[i].name, dtable[i].length);
       node->directive_index = i + 1;