From 2bf41bf05df81d26e70bca9642c065cd90b49be7 Mon Sep 17 00:00:00 2001
From: Tom Tromey <tromey@redhat.com>
Date: Wed, 20 Feb 2008 02:16:43 +0000
Subject: [PATCH] traditional.c (lex_identifier): Use CPP_HASHNODE.

	* traditional.c (lex_identifier): Use CPP_HASHNODE.
	* lex.c (lex_identifier): Use CPP_HASHNODE.
	* include/line-map.h (LINEMAP_POSITION_FOR_COLUMN): Wrap in
	do-while.
	* identifiers.c (alloc_node): Change return type.
	(_cpp_init_hashtable): Don't cast 'alloc_node'.
	(proxy_assertion_broken): New declaration.
	(cpp_forall_identifiers): Move comment.
	* line-map.c (linemap_add): Comment fix.
	(linemap_line_start): Indentation fix.

From-SVN: r132467
---
 libcpp/ChangeLog          | 13 +++++++++++++
 libcpp/identifiers.c      | 17 ++++++++++-------
 libcpp/include/line-map.h |  4 ++--
 libcpp/lex.c              |  6 +++---
 libcpp/line-map.c         |  7 +++----
 libcpp/traditional.c      |  4 ++--
 6 files changed, 33 insertions(+), 18 deletions(-)

diff --git a/libcpp/ChangeLog b/libcpp/ChangeLog
index a14c38ef9a98..c2c026e27eaf 100644
--- a/libcpp/ChangeLog
+++ b/libcpp/ChangeLog
@@ -1,3 +1,16 @@
+2008-02-19  Tom Tromey  <tromey@redhat.com>
+
+	* traditional.c (lex_identifier): Use CPP_HASHNODE.
+	* lex.c (lex_identifier): Use CPP_HASHNODE.
+	* include/line-map.h (LINEMAP_POSITION_FOR_COLUMN): Wrap in
+	do-while.
+	* identifiers.c (alloc_node): Change return type.
+	(_cpp_init_hashtable): Don't cast 'alloc_node'.
+	(proxy_assertion_broken): New declaration.
+	(cpp_forall_identifiers): Move comment.
+	* line-map.c (linemap_add): Comment fix.
+	(linemap_line_start): Indentation fix.
+
 2008-01-25  Jakub Jelinek  <jakub@redhat.com>
 
 	PR preprocessor/34692
diff --git a/libcpp/identifiers.c b/libcpp/identifiers.c
index c22f4a714bb5..41f32a2bbaec 100644
--- a/libcpp/identifiers.c
+++ b/libcpp/identifiers.c
@@ -1,6 +1,6 @@
 /* Hash tables for the CPP library.
    Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1998,
-   1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+   1999, 2000, 2001, 2002, 2007 Free Software Foundation, Inc.
    Written by Per Bothner, 1994.
    Based on CCCP program by Paul Rubin, June 1986
    Adapted to ANSI C, Richard Stallman, Jan 1987
@@ -28,18 +28,18 @@ Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 #include "cpplib.h"
 #include "internal.h"
 
-static cpp_hashnode *alloc_node (hash_table *);
+static hashnode alloc_node (hash_table *);
 
 /* Return an identifier node for hashtable.c.  Used by cpplib except
    when integrated with the C front ends.  */
-static cpp_hashnode *
+static hashnode
 alloc_node (hash_table *table)
 {
   cpp_hashnode *node;
 
   node = XOBNEW (&table->pfile->hash_ob, cpp_hashnode);
   memset (node, 0, sizeof (cpp_hashnode));
-  return node;
+  return HT_NODE (node);
 }
 
 /* Set up the identifier hash table.  Use TABLE if non-null, otherwise
@@ -53,7 +53,7 @@ _cpp_init_hashtable (cpp_reader *pfile, hash_table *table)
     {
       pfile->our_hashtable = 1;
       table = ht_create (13);	/* 8K (=2^13) entries.  */
-      table->alloc_node = (hashnode (*) (hash_table *)) alloc_node;
+      table->alloc_node = alloc_node;
 
       _obstack_begin (&pfile->hash_ob, 0, 0,
 		      (void *(*) (long)) xmalloc,
@@ -107,12 +107,15 @@ cpp_defined (cpp_reader *pfile, const unsigned char *str, int len)
   return node && node->type == NT_MACRO;
 }
 
+/* We don't need a proxy since the hash table's identifier comes first
+   in cpp_hashnode.  However, in case this is ever changed, we have a
+   static assertion for it.  */
+extern char proxy_assertion_broken[offsetof (struct cpp_hashnode, ident) == 0 ? 1 : -1];
+
 /* For all nodes in the hashtable, callback CB with parameters PFILE,
    the node, and V.  */
 void
 cpp_forall_identifiers (cpp_reader *pfile, cpp_cb cb, void *v)
 {
-  /* We don't need a proxy since the hash table's identifier comes
-     first in cpp_hashnode.  */
   ht_forall (pfile->hash_table, (ht_cb) cb, v);
 }
diff --git a/libcpp/include/line-map.h b/libcpp/include/line-map.h
index cddc74d432e6..3378315238f4 100644
--- a/libcpp/include/line-map.h
+++ b/libcpp/include/line-map.h
@@ -172,7 +172,7 @@ extern void linemap_print_containing_files (struct line_maps *,
 /* Set LOC to a source position that is the same line as the most recent
    linemap_line_start, but with the specified TO_COLUMN column number.  */
 
-#define LINEMAP_POSITION_FOR_COLUMN(LOC, SET, TO_COLUMN) { \
+#define LINEMAP_POSITION_FOR_COLUMN(LOC, SET, TO_COLUMN) do { \
   unsigned int to_column = (TO_COLUMN); \
   struct line_maps *set = (SET); \
   if (__builtin_expect (to_column >= set->max_column_hint, 0)) \
@@ -183,7 +183,7 @@ extern void linemap_print_containing_files (struct line_maps *,
     if (r >= set->highest_location) \
       set->highest_location = r; \
     (LOC) = r;			 \
-  }}
+  }} while (0)
     
 
 extern source_location
diff --git a/libcpp/lex.c b/libcpp/lex.c
index ef59f900c64a..2eaf61059224 100644
--- a/libcpp/lex.c
+++ b/libcpp/lex.c
@@ -1,5 +1,5 @@
 /* CPP Library - lexical analysis.
-   Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+   Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2007 Free Software Foundation, Inc.
    Contributed by Per Bothner, 1994-95.
    Based on CCCP program by Paul Rubin, June 1986
    Adapted to ANSI C, Richard Stallman, Jan 1987
@@ -538,8 +538,8 @@ lex_identifier (cpp_reader *pfile, const uchar *base, bool starts_ucn,
       len = cur - base;
       hash = HT_HASHFINISH (hash, len);
 
-      result = (cpp_hashnode *)
-	ht_lookup_with_hash (pfile->hash_table, base, len, hash, HT_ALLOC);
+      result = CPP_HASHNODE (ht_lookup_with_hash (pfile->hash_table,
+						  base, len, hash, HT_ALLOC));
     }
 
   /* Rarely, identifiers require diagnostics when lexed.  */
diff --git a/libcpp/line-map.c b/libcpp/line-map.c
index c13a82dcafc9..2c6d2510e611 100644
--- a/libcpp/line-map.c
+++ b/libcpp/line-map.c
@@ -1,5 +1,5 @@
 /* Map logical line numbers to (source file, line number) pairs.
-   Copyright (C) 2001, 2003, 2004, 2007
+   Copyright (C) 2001, 2003, 2004, 2007, 2008
    Free Software Foundation, Inc.
 
 This program is free software; you can redistribute it and/or modify it
@@ -81,7 +81,6 @@ linemap_free (struct line_maps *set)
 
    FROM_LINE should be monotonic increasing across calls to this
    function.  A call to this function can relocate the previous set of
-   A call to this function can relocate the previous set of
    maps, so any stored line_map pointers should not be used.  */
 
 const struct line_map *
@@ -225,8 +224,8 @@ linemap_line_start (struct line_maps *set, unsigned int to_line,
       if (line_delta < 0
 	  || last_line != map->to_line
 	  || SOURCE_COLUMN (map, highest) >= (1U << column_bits))
-	map = (struct line_map*) linemap_add (set, LC_RENAME, map->sysp,
-				      map->to_file, to_line);
+	map = (struct line_map *) linemap_add (set, LC_RENAME, map->sysp,
+					       map->to_file, to_line);
       map->column_bits = column_bits;
       r = map->start_location + ((to_line - map->to_line) << column_bits);
     }
diff --git a/libcpp/traditional.c b/libcpp/traditional.c
index 6c4dda1a9f32..1a384253a906 100644
--- a/libcpp/traditional.c
+++ b/libcpp/traditional.c
@@ -253,8 +253,8 @@ lex_identifier (cpp_reader *pfile, const uchar *cur)
 
   CUR (pfile->context) = cur;
   len = out - pfile->out.cur;
-  result = (cpp_hashnode *) ht_lookup (pfile->hash_table, pfile->out.cur,
-				       len, HT_ALLOC);
+  result = CPP_HASHNODE (ht_lookup (pfile->hash_table, pfile->out.cur,
+				    len, HT_ALLOC));
   pfile->out.cur = out;
   return result;
 }
-- 
GitLab