diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index fd66cf6a0b5d1e92e3bedf3e1dd8f3b66d95aee0..f3bff56d2faf7977b1187eae40e5078662c19893 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2004-01-28  Giovanni Bajo  <giovannibajo@gcc.gnu.org>
+
+	* c-lex.c (c_lex): Rename to...
+	(c_lex_with_flags): Add new parameter to get CPP flags.
+	(c_lex): Thunk to c_lex_with_flags while keeping the old interface.
+	* c-pragma.h (c_lex_with_flags): Declare.
+
 2004-01-28  Kazu Hirata  <kazu@cs.umass.edu>
 
 	* config/mcore/mcore.c (mcore_external_libcall): Add a
diff --git a/gcc/c-lex.c b/gcc/c-lex.c
index 5546fc9ddd1933c91ff073b6a861afb0cf2ae960..4ead0c6e46f452995061d972bb3712effe4bbdee 100644
--- a/gcc/c-lex.c
+++ b/gcc/c-lex.c
@@ -324,7 +324,7 @@ get_nonpadding_token (void)
 }  
 
 int
-c_lex (tree *value)
+c_lex_with_flags (tree *value, unsigned char *cpp_flags)
 {
   const cpp_token *tok;
   location_t atloc;
@@ -436,9 +436,17 @@ c_lex (tree *value)
       c_common_no_more_pch ();
     }
 
+  if (cpp_flags)
+    *cpp_flags = tok->flags;
   return tok->type;
 }
 
+int
+c_lex (tree *value)
+{
+  return c_lex_with_flags (value, NULL);
+}
+
 /* Returns the narrowest C-visible unsigned type, starting with the
    minimum specified by FLAGS, that can fit VALUE, or itk_none if
    there isn't one.  */
diff --git a/gcc/c-pragma.h b/gcc/c-pragma.h
index cea410b15808a4dab65ce6134cedbcaca5d2f444..7158722250d88034291a9f5a18a0b5a5c8ebf70f 100644
--- a/gcc/c-pragma.h
+++ b/gcc/c-pragma.h
@@ -55,5 +55,6 @@ extern tree maybe_apply_renaming_pragma (tree, tree);
 extern void add_to_renaming_pragma_list (tree, tree);
 
 extern int c_lex (tree *);
+extern int c_lex_with_flags (tree *, unsigned char *);
 
 #endif /* GCC_C_PRAGMA_H */