This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Prepare gcc for 64-bit obstacks


Two small changes to gcc code to support newer obstacks:

1) gcc currently calls _obstack_begin, which requires some ugly casts
on alloc and free functions, and the casts will change when/if 64-bit
obstacks are available.  It's cleaner to use the convenience functions
provided in obstack.h.

2) Current upstream obstack.h makes obstack_base() return a void*,
with the result that a few places in gcc need a (char *) cast.

Bootstrapped and regression tested x86_64-linux and powerpc-linux,
with both the new obstack.{h,c} and the old versions.  OK to apply?

gcc/
	* gengtype.h (obstack_chunk_alloc, obstack_chunk_free): Remove cast.
	* coretypes.h (obstack_chunk_alloc, obstack_chunk_free): Likewise.
	(gcc_obstack_init): Use obstack_specify_allocation in place of
	_obstack_begin.
	* genautomata.c (next_sep_el): Cast result of obstack_base to (char *).
	(regexp_representation): Likewise.
	* godump.c (go_output_type): Likewise.
gcc/java/
	* mangle.c (finish_mangling): Cast result of obstack_base to (char *).
	* typeck.c (build_java_argument_signature): Likewise.
	(build_java_signature): Likewise.
gcc/objc/
	* objc-encoding.c (encode_array): Cast result of obstack_base.
	(encode_type): Likewise.
libcpp/
	* symtab.c (ht_create): Use obstack_specify_allocation in place of
	_obstack_begin.
	* files.c (_cpp_init_files): Likewise.
	* init.c (cpp_create_reader): Likewise.
	* identifiers.c (_cpp_init_hashtable): Likewise.

Index: gcc/gengtype.h
===================================================================
--- gcc/gengtype.h	(revision 212477)
+++ gcc/gengtype.h	(working copy)
@@ -20,8 +20,8 @@
 #ifndef GCC_GENGTYPE_H
 #define GCC_GENGTYPE_H
 
-#define obstack_chunk_alloc    ((void *(*) (long)) xmalloc)
-#define obstack_chunk_free     ((void (*) (void *)) free)
+#define obstack_chunk_alloc    xmalloc
+#define obstack_chunk_free     free
 #define OBSTACK_CHUNK_SIZE     0
 
 /* Sets of accepted source languages like C, C++, Ada... are
Index: gcc/coretypes.h
===================================================================
--- gcc/coretypes.h	(revision 212477)
+++ gcc/coretypes.h	(working copy)
@@ -158,13 +158,13 @@ struct basic_block_def;
 typedef struct basic_block_def *basic_block;
 typedef const struct basic_block_def *const_basic_block;
 
-#define obstack_chunk_alloc	((void *(*) (long)) xmalloc)
-#define obstack_chunk_free	((void (*) (void *)) free)
+#define obstack_chunk_alloc	xmalloc
+#define obstack_chunk_free	free
 #define OBSTACK_CHUNK_SIZE	0
-#define gcc_obstack_init(OBSTACK)			\
-  _obstack_begin ((OBSTACK), OBSTACK_CHUNK_SIZE, 0,	\
-		  obstack_chunk_alloc,			\
-		  obstack_chunk_free)
+#define gcc_obstack_init(OBSTACK)				\
+  obstack_specify_allocation ((OBSTACK), OBSTACK_CHUNK_SIZE, 0,	\
+			      obstack_chunk_alloc,		\
+			      obstack_chunk_free)
 
 /* enum reg_class is target specific, so it should not appear in
    target-independent code or interfaces, like the target hook declarations
Index: gcc/genautomata.c
===================================================================
--- gcc/genautomata.c	(revision 212477)
+++ gcc/genautomata.c	(working copy)
@@ -1178,7 +1178,7 @@ next_sep_el (const char **pstr, int sep, int par_f
 	}
     }
   obstack_1grow (&irp, '\0');
-  out_str = obstack_base (&irp);
+  out_str = (char *) obstack_base (&irp);
   obstack_finish (&irp);
 
   *pstr = p;
@@ -6873,7 +6873,7 @@ regexp_representation (regexp_t regexp)
 {
   form_regexp (regexp);
   obstack_1grow (&irp, '\0');
-  return obstack_base (&irp);
+  return (char *) obstack_base (&irp);
 }
 
 /* The function frees memory allocated for last formed string
@@ -9289,7 +9289,7 @@ initiate_automaton_gen (char **argv)
   obstack_grow (&irp, STANDARD_OUTPUT_DESCRIPTION_FILE_SUFFIX,
 		strlen (STANDARD_OUTPUT_DESCRIPTION_FILE_SUFFIX) + 1);
   obstack_1grow (&irp, '\0');
-  output_description_file_name = obstack_base (&irp);
+  output_description_file_name = (char *) obstack_base (&irp);
   obstack_finish (&irp);
 }
 
Index: gcc/godump.c
===================================================================
--- gcc/godump.c	(revision 212477)
+++ gcc/godump.c	(working copy)
@@ -921,7 +921,7 @@ go_output_type (struct godump_container *container
 
   ob = &container->type_obstack;
   obstack_1grow (ob, '\0');
-  fputs (obstack_base (ob), go_dump_file);
+  fputs ((char *) obstack_base (ob), go_dump_file);
   obstack_free (ob, obstack_base (ob));
 }
 
Index: gcc/java/mangle.c
===================================================================
--- gcc/java/mangle.c	(revision 212477)
+++ gcc/java/mangle.c	(working copy)
@@ -711,7 +711,7 @@ finish_mangling (void)
   compression_table = NULL_TREE;
   compression_next = 0;
   obstack_1grow (mangle_obstack, '\0');
-  result = get_identifier (obstack_base (mangle_obstack));
+  result = get_identifier ((char *) obstack_base (mangle_obstack));
   obstack_free (mangle_obstack, obstack_base (mangle_obstack));
 
   return result;
Index: gcc/java/typeck.c
===================================================================
--- gcc/java/typeck.c	(revision 212477)
+++ gcc/java/typeck.c	(working copy)
@@ -477,7 +477,7 @@ build_java_argument_signature (tree type)
 	}
       obstack_1grow (&temporary_obstack, '\0');
 
-      sig = get_identifier (obstack_base (&temporary_obstack));
+      sig = get_identifier ((char *) obstack_base (&temporary_obstack));
       TYPE_ARGUMENT_SIGNATURE (type) = sig;
       obstack_free (&temporary_obstack, obstack_base (&temporary_obstack));
     }
@@ -554,7 +554,7 @@ build_java_signature (tree type)
 	    obstack_grow0 (&temporary_obstack,
 			   IDENTIFIER_POINTER (t), IDENTIFIER_LENGTH (t));
 
-	    sig = get_identifier (obstack_base (&temporary_obstack));
+	    sig = get_identifier ((char *) obstack_base (&temporary_obstack));
 	    obstack_free (&temporary_obstack,
 			  obstack_base (&temporary_obstack));
 	  }
Index: gcc/objc/objc-encoding.c
===================================================================
--- gcc/objc/objc-encoding.c	(revision 212477)
+++ gcc/objc/objc-encoding.c	(working copy)
@@ -380,7 +380,7 @@ encode_array (tree type, int curtype, int format)
 	 identifier.
       */
       {
-	char *enc = obstack_base (&util_obstack) + curtype;
+	char *enc = (char *) obstack_base (&util_obstack) + curtype;
 	if (memchr (enc, '=',
 		    obstack_object_size (&util_obstack) - curtype) == NULL)
 	  {
@@ -729,7 +729,7 @@ encode_type (tree type, int curtype, int format)
 	 to be rearranged for compatibility with gcc-3.3.  */
       if (code == POINTER_TYPE && obstack_object_size (&util_obstack) >= 3)
 	{
-	  char *enc = obstack_base (&util_obstack) + curtype;
+	  char *enc = (char *) obstack_base (&util_obstack) + curtype;
 
 	  /* Rewrite "in const" from "nr" to "rn".  */
 	  if (curtype >= 1 && !strncmp (enc - 1, "nr", 2))
Index: libcpp/symtab.c
===================================================================
--- libcpp/symtab.c	(revision 212477)
+++ libcpp/symtab.c	(working copy)
@@ -61,9 +61,7 @@ ht_create (unsigned int order)
   table = XCNEW (cpp_hash_table);
 
   /* Strings need no alignment.  */
-  _obstack_begin (&table->stack, 0, 0,
-		  (void *(*) (long)) xmalloc,
-		  (void (*) (void *)) free);
+  obstack_specify_allocation (&table->stack, 0, 0, xmalloc, free);
 
   obstack_alignment_mask (&table->stack) = 0;
 
Index: libcpp/files.c
===================================================================
--- libcpp/files.c	(revision 212477)
+++ libcpp/files.c	(working copy)
@@ -1267,9 +1267,8 @@ _cpp_init_files (cpp_reader *pfile)
   pfile->nonexistent_file_hash = htab_create_alloc (127, htab_hash_string,
 						    nonexistent_file_hash_eq,
 						    NULL, xcalloc, free);
-  _obstack_begin (&pfile->nonexistent_file_ob, 0, 0,
-		  (void *(*) (long)) xmalloc,
-		  (void (*) (void *)) free);
+  obstack_specify_allocation (&pfile->nonexistent_file_ob, 0, 0,
+			      xmalloc, free);
 }
 
 /* Finalize everything in this source file.  */
Index: libcpp/init.c
===================================================================
--- libcpp/init.c	(revision 212477)
+++ libcpp/init.c	(working copy)
@@ -260,9 +260,7 @@ cpp_create_reader (enum c_lang lang, cpp_hash_tabl
   _cpp_expand_op_stack (pfile);
 
   /* Initialize the buffer obstack.  */
-  _obstack_begin (&pfile->buffer_ob, 0, 0,
-		  (void *(*) (long)) xmalloc,
-		  (void (*) (void *)) free);
+  obstack_specify_allocation (&pfile->buffer_ob, 0, 0, xmalloc, free);
 
   _cpp_init_files (pfile);
 
Index: libcpp/identifiers.c
===================================================================
--- libcpp/identifiers.c	(revision 212477)
+++ libcpp/identifiers.c	(working copy)
@@ -54,9 +54,7 @@ _cpp_init_hashtable (cpp_reader *pfile, cpp_hash_t
       table = ht_create (13);	/* 8K (=2^13) entries.  */
       table->alloc_node = alloc_node;
 
-      _obstack_begin (&pfile->hash_ob, 0, 0,
-		      (void *(*) (long)) xmalloc,
-		      (void (*) (void *)) free);
+      obstack_specify_allocation (&pfile->hash_ob, 0, 0, xmalloc, free);
     }
 
   table->pfile = pfile;

-- 
Alan Modra
Australia Development Lab, IBM


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]