public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH]: Add -Wcast-qual to the bootstrap warning flags
@ 2007-09-24  7:20 Kaveh R. GHAZI
  2007-09-24  7:29 ` Steve Kargl
  2007-09-24  8:31 ` Andrew Pinski
  0 siblings, 2 replies; 8+ messages in thread
From: Kaveh R. GHAZI @ 2007-09-24  7:20 UTC (permalink / raw)
  To: gcc-patches; +Cc: fortran

This patch eliminates the remaining warnings necessary to allow adding
-Wcast-qual to the bootstrap flags.  Since using "const_" shadow functions
is verboten, some of these can only be fixed using CONST_CAST for now.
Migrating GCC to C++ sources would allow deleting most of these
CONST_CASTs in the future. :-)

(I'm copying the fortran list because there is one gnit fixed there.)

I've seen several -Wcast-qual regressions appear in the last month,
including some new ones in tree-parloops.c and tree-ssa-phiopt.c fixed
below.  So getting this in would be a help keeping the trunk free of these
warnings.

Bootstrapped on sparc-sun-solaris2.10, no regressions.

I also ran this patch through my cross-compile farm building cc1
configured for the following targets:

alpha-dec-osf5.0 arc-unknown-elf arm-unknown-pe avr-unknown-elf
bfin-unknown-elf c4x-unknown-rtems cris-unknown-linux-gnu crx-unknown-elf
fr30-unknown-elf frv-unknown-elf h8300-unknown-rtems hppa1.1-hp-hpux11
i686-pc-linux-gnu ia64-unknown-linux-gnu iq2000-unknown-elf
m32c-unknown-elf m32r-unknown-elf m68hc11-unknown-elf
m68k-unknown-linux-gnu mcore-unknown-elf mips-sgi-irix6.5
mmix-knuth-mmixware mn10300-unknown-elf mt-unknown-elf pdp11-unknown-bsd
powerpc-apple-darwin rs6000-ibm-aix4.3.3.0 s390-unknown-linux-gnu
score-unknown-elf sh-unknown-rtems sparc-sun-solaris2.6 spu-unknown-elf
v850-unknown-elf vax-unknown-ultrix x86_64-unknown-linux-gnu
xstormy16-unknown-elf xtensa-unknown-elf

I found no remaining -Wcast-qual warnings building cc1 to the above
targets.

Okay for mainline?

		Thanks,
		--Kaveh


2007-09-23  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* configure.ac (ACX_PROG_CC_WARNING_OPTS): Add -Wcast-qual.
	* configure: Regenerate.

gcc:
	* builtins.c (builtin_memcpy_read_str, builtin_memset_gen_str,
	builtin_strncpy_read_str, builtin_memset_read_str,
	builtin_memset_gen_str): Constify.
	(expand_builtin_memcpy, expand_builtin_mempcpy_args,
	expand_builtin_strncpy): Don't cast away const-ness.
	* config/m68k/m68k.c (m68k_handle_option): Avoid -Wcast-qual
	warning.
	* cselib.c (entry_and_rtx_equal_p, rtx_equal_for_cselib_p):
	Constify.
	* cselib.h (rtx_equal_for_cselib_p): Likewise.
	* expr.c (struct store_by_pieces, clear_by_pieces_1,
	can_store_by_pieces, store_by_pieces): Constify.
	(store_expr): Don't cast away const-ness.
	* expr.h (builtin_strncpy_read_str, can_store_by_pieces,
	store_by_pieces): Constify.
	* gengtype.c (read_input_list, adjust_field_type,
	process_gc_options): Avoid -Wcast-qual warning.
	* ggc-common.c (ggc_mark_roots): Likewise.
	* stringpool.c (gt_pch_n_S): Likewise.
	* system.h: Remove #pragma GCC diagnostic warning "-Wcast-qual"
	* tree-parloops.c (name_to_copy_elt_eq, name_to_copy_elt_hash):
	Constify.
	* tree-ssa-phiopt.c (name_to_bb_hash, name_to_bb_eq): Likewise.
	* tree.h (builtin_memset_read_str): Likewise.

gcc/fortran:
	* module.c (mio_expr): Avoid -Wcast-qual warning.

diff -rup orig/egcc-SVN20070919/gcc/builtins.c egcc-SVN20070919/gcc/builtins.c
--- orig/egcc-SVN20070919/gcc/builtins.c	2007-09-17 23:02:35.000000000 -0400
+++ egcc-SVN20070919/gcc/builtins.c	2007-09-20 17:25:54.622179807 -0400
@@ -109,7 +109,7 @@ static rtx expand_builtin_memchr (tree,
 static rtx expand_builtin_memcmp (tree, rtx, enum machine_mode);
 static rtx expand_builtin_strcmp (tree, rtx, enum machine_mode);
 static rtx expand_builtin_strncmp (tree, rtx, enum machine_mode);
-static rtx builtin_memcpy_read_str (void *, HOST_WIDE_INT, enum machine_mode);
+static rtx builtin_memcpy_read_str (const void *, HOST_WIDE_INT, enum machine_mode);
 static rtx expand_builtin_strcat (tree, tree, rtx, enum machine_mode);
 static rtx expand_builtin_strncat (tree, rtx, enum machine_mode);
 static rtx expand_builtin_strspn (tree, rtx, enum machine_mode);
@@ -126,7 +126,7 @@ static rtx expand_builtin_strcpy (tree,
 static rtx expand_builtin_strcpy_args (tree, tree, tree, rtx, enum machine_mode);
 static rtx expand_builtin_stpcpy (tree, rtx, enum machine_mode);
 static rtx expand_builtin_strncpy (tree, rtx, enum machine_mode);
-static rtx builtin_memset_gen_str (void *, HOST_WIDE_INT, enum machine_mode);
+static rtx builtin_memset_gen_str (const void *, HOST_WIDE_INT, enum machine_mode);
 static rtx expand_builtin_memset (tree, rtx, enum machine_mode);
 static rtx expand_builtin_memset_args (tree, tree, tree, rtx, enum machine_mode, tree);
 static rtx expand_builtin_bzero (tree);
@@ -3255,7 +3255,7 @@ expand_builtin_strpbrk (tree exp, rtx ta
    constant.  */

 static rtx
-builtin_memcpy_read_str (void *data, HOST_WIDE_INT offset,
+builtin_memcpy_read_str (const void *data, HOST_WIDE_INT offset,
 			 enum machine_mode mode)
 {
   const char *str = (const char *) data;
@@ -3331,11 +3331,11 @@ expand_builtin_memcpy (tree exp, rtx tar
 	  && GET_CODE (len_rtx) == CONST_INT
 	  && (unsigned HOST_WIDE_INT) INTVAL (len_rtx) <= strlen (src_str) + 1
 	  && can_store_by_pieces (INTVAL (len_rtx), builtin_memcpy_read_str,
-				  (void *) src_str, dest_align, false))
+				  src_str, dest_align, false))
 	{
 	  dest_mem = store_by_pieces (dest_mem, INTVAL (len_rtx),
 				      builtin_memcpy_read_str,
-				      (void *) src_str, dest_align, false, 0);
+				      src_str, dest_align, false, 0);
 	  dest_mem = force_operand (XEXP (dest_mem, 0), NULL_RTX);
 	  dest_mem = convert_memory_address (ptr_mode, dest_mem);
 	  return dest_mem;
@@ -3444,13 +3444,13 @@ expand_builtin_mempcpy_args (tree dest,
 	  && GET_CODE (len_rtx) == CONST_INT
 	  && (unsigned HOST_WIDE_INT) INTVAL (len_rtx) <= strlen (src_str) + 1
 	  && can_store_by_pieces (INTVAL (len_rtx), builtin_memcpy_read_str,
-				  (void *) src_str, dest_align, false))
+				  src_str, dest_align, false))
 	{
 	  dest_mem = get_memory_rtx (dest, len);
 	  set_mem_align (dest_mem, dest_align);
 	  dest_mem = store_by_pieces (dest_mem, INTVAL (len_rtx),
 				      builtin_memcpy_read_str,
-				      (void *) src_str, dest_align,
+				      src_str, dest_align,
 				      false, endp);
 	  dest_mem = force_operand (XEXP (dest_mem, 0), NULL_RTX);
 	  dest_mem = convert_memory_address (ptr_mode, dest_mem);
@@ -3735,7 +3735,7 @@ expand_builtin_stpcpy (tree exp, rtx tar
    constant.  */

 rtx
-builtin_strncpy_read_str (void *data, HOST_WIDE_INT offset,
+builtin_strncpy_read_str (const void *data, HOST_WIDE_INT offset,
 			  enum machine_mode mode)
 {
   const char *str = (const char *) data;
@@ -3793,13 +3793,13 @@ expand_builtin_strncpy (tree exp, rtx ta
 	  if (!p || dest_align == 0 || !host_integerp (len, 1)
 	      || !can_store_by_pieces (tree_low_cst (len, 1),
 				       builtin_strncpy_read_str,
-				       (void *) p, dest_align, false))
+				       p, dest_align, false))
 	    return NULL_RTX;

 	  dest_mem = get_memory_rtx (dest, len);
 	  store_by_pieces (dest_mem, tree_low_cst (len, 1),
 			   builtin_strncpy_read_str,
-			   (void *) p, dest_align, false, 0);
+			   p, dest_align, false, 0);
 	  dest_mem = force_operand (XEXP (dest_mem, 0), NULL_RTX);
 	  dest_mem = convert_memory_address (ptr_mode, dest_mem);
 	  return dest_mem;
@@ -3813,7 +3813,7 @@ expand_builtin_strncpy (tree exp, rtx ta
    constant.  */

 rtx
-builtin_memset_read_str (void *data, HOST_WIDE_INT offset ATTRIBUTE_UNUSED,
+builtin_memset_read_str (const void *data, HOST_WIDE_INT offset ATTRIBUTE_UNUSED,
 			 enum machine_mode mode)
 {
   const char *c = (const char *) data;
@@ -3830,22 +3830,23 @@ builtin_memset_read_str (void *data, HOS
    4 bytes wide, return the RTL for 0x01010101*data.  */

 static rtx
-builtin_memset_gen_str (void *data, HOST_WIDE_INT offset ATTRIBUTE_UNUSED,
+builtin_memset_gen_str (const void *data, HOST_WIDE_INT offset ATTRIBUTE_UNUSED,
 			enum machine_mode mode)
 {
+  rtx x = CONST_CAST_RTX ((const_rtx)data);
   rtx target, coeff;
   size_t size;
   char *p;

   size = GET_MODE_SIZE (mode);
   if (size == 1)
-    return (rtx) data;
+    return x;

   p = alloca (size);
   memset (p, 1, size);
   coeff = c_readstr (p, mode);

-  target = convert_to_mode (mode, (rtx) data, 1);
+  target = convert_to_mode (mode, x, 1);
   target = expand_mult (mode, target, coeff, NULL_RTX, 1);
   return force_reg (mode, target);
 }
diff -rup orig/egcc-SVN20070919/gcc/config/m68k/m68k.c egcc-SVN20070919/gcc/config/m68k/m68k.c
--- orig/egcc-SVN20070919/gcc/config/m68k/m68k.c	2007-09-19 23:02:42.000000000 -0400
+++ egcc-SVN20070919/gcc/config/m68k/m68k.c	2007-09-20 23:10:51.111128161 -0400
@@ -456,7 +456,8 @@ m68k_handle_option (size_t code, const c
 	error ("-mshared-library-id=%s is not between 0 and %d",
 	       arg, MAX_LIBRARY_ID);
       else
-	asprintf ((char **) &m68k_library_id_string, "%d", (value * -4) - 4);
+	asprintf (CONST_CAST(char **, &m68k_library_id_string),
+		  "%d", (value * -4) - 4);
       return true;

     default:
diff -rup orig/egcc-SVN20070919/gcc/configure.ac egcc-SVN20070919/gcc/configure.ac
--- orig/egcc-SVN20070919/gcc/configure.ac	2007-09-14 23:03:21.000000000 -0400
+++ egcc-SVN20070919/gcc/configure.ac	2007-09-20 17:25:54.649925079 -0400
@@ -320,7 +320,7 @@ AC_CHECK_TYPES([__int64], [AC_CHECK_SIZE
 # So, we only use -pedantic if we can disable those warnings.

 ACX_PROG_CC_WARNING_OPTS([-W -Wall -Wwrite-strings -Wstrict-prototypes \
-			  -Wmissing-prototypes], [loose_warn])
+			  -Wmissing-prototypes -Wcast-qual], [loose_warn])
 ACX_PROG_CC_WARNING_OPTS([-Wc++-compat], [cxx_compat_warn])
 ACX_PROG_CC_WARNING_OPTS([-Wold-style-definition \
                           -Wmissing-format-attribute], [strict_warn])
diff -rup orig/egcc-SVN20070919/gcc/cselib.c egcc-SVN20070919/gcc/cselib.c
--- orig/egcc-SVN20070919/gcc/cselib.c	2007-08-23 12:12:27.000000000 -0400
+++ egcc-SVN20070919/gcc/cselib.c	2007-09-20 17:25:54.652431354 -0400
@@ -234,8 +234,8 @@ entry_and_rtx_equal_p (const void *entry
 {
   struct elt_loc_list *l;
   const cselib_val *const v = (const cselib_val *) entry;
-  rtx x = (rtx) x_arg;
-  enum machine_mode mode = GET_MODE (x);
+  const_rtx x = (const_rtx) x_arg;
+  const enum machine_mode mode = GET_MODE (x);

   gcc_assert (GET_CODE (x) != CONST_INT && GET_CODE (x) != CONST_FIXED
 	      && (mode != VOIDmode || GET_CODE (x) != CONST_DOUBLE));
@@ -401,7 +401,7 @@ cselib_reg_set_mode (const_rtx x)
    our gathered information into account.  */

 int
-rtx_equal_for_cselib_p (rtx x, rtx y)
+rtx_equal_for_cselib_p (const_rtx x, const_rtx y)
 {
   enum rtx_code code;
   const char *fmt;
@@ -409,7 +409,7 @@ rtx_equal_for_cselib_p (rtx x, rtx y)

   if (REG_P (x) || MEM_P (x))
     {
-      cselib_val *e = cselib_lookup (x, GET_MODE (x), 0);
+      cselib_val *e = cselib_lookup (CONST_CAST_RTX(x), GET_MODE (x), 0);

       if (e)
 	x = e->val_rtx;
@@ -417,7 +417,7 @@ rtx_equal_for_cselib_p (rtx x, rtx y)

   if (REG_P (y) || MEM_P (y))
     {
-      cselib_val *e = cselib_lookup (y, GET_MODE (y), 0);
+      cselib_val *e = cselib_lookup (CONST_CAST_RTX(y), GET_MODE (y), 0);

       if (e)
 	y = e->val_rtx;
diff -rup orig/egcc-SVN20070919/gcc/cselib.h egcc-SVN20070919/gcc/cselib.h
--- orig/egcc-SVN20070919/gcc/cselib.h	2007-07-30 12:38:02.000000000 -0400
+++ egcc-SVN20070919/gcc/cselib.h	2007-09-20 17:25:54.653233391 -0400
@@ -66,7 +66,7 @@ extern void cselib_clear_table (void);
 extern void cselib_finish (void);
 extern void cselib_process_insn (rtx);
 extern enum machine_mode cselib_reg_set_mode (const_rtx);
-extern int rtx_equal_for_cselib_p (rtx, rtx);
+extern int rtx_equal_for_cselib_p (const_rtx, const_rtx);
 extern int references_value_p (const_rtx, int);
 extern rtx cselib_expand_value_rtx (rtx, bitmap, int);
 extern rtx cselib_subst_to_values (rtx);
diff -rup orig/egcc-SVN20070919/gcc/expr.c egcc-SVN20070919/gcc/expr.c
--- orig/egcc-SVN20070919/gcc/expr.c	2007-09-16 23:02:55.000000000 -0400
+++ egcc-SVN20070919/gcc/expr.c	2007-09-20 17:25:54.664009565 -0400
@@ -115,8 +115,8 @@ struct store_by_pieces
   int explicit_inc_to;
   unsigned HOST_WIDE_INT len;
   HOST_WIDE_INT offset;
-  rtx (*constfun) (void *, HOST_WIDE_INT, enum machine_mode);
-  void *constfundata;
+  rtx (*constfun) (const void *, HOST_WIDE_INT, enum machine_mode);
+  const void *constfundata;
   int reverse;
 };

@@ -129,7 +129,7 @@ static bool block_move_libcall_safe_for_
 static bool emit_block_move_via_movmem (rtx, rtx, rtx, unsigned, unsigned, HOST_WIDE_INT);
 static tree emit_block_move_libcall_fn (int);
 static void emit_block_move_via_loop (rtx, rtx, rtx, unsigned);
-static rtx clear_by_pieces_1 (void *, HOST_WIDE_INT, enum machine_mode);
+static rtx clear_by_pieces_1 (const void *, HOST_WIDE_INT, enum machine_mode);
 static void clear_by_pieces (rtx, unsigned HOST_WIDE_INT, unsigned int);
 static void store_by_pieces_1 (struct store_by_pieces *, unsigned int);
 static void store_by_pieces_2 (rtx (*) (rtx, ...), enum machine_mode,
@@ -2222,8 +2222,8 @@ use_group_regs (rtx *call_fusage, rtx re

 int
 can_store_by_pieces (unsigned HOST_WIDE_INT len,
-		     rtx (*constfun) (void *, HOST_WIDE_INT, enum machine_mode),
-		     void *constfundata, unsigned int align, bool memsetp)
+		     rtx (*constfun) (const void *, HOST_WIDE_INT, enum machine_mode),
+		     const void *constfundata, unsigned int align, bool memsetp)
 {
   unsigned HOST_WIDE_INT l;
   unsigned int max_size;
@@ -2321,8 +2321,8 @@ can_store_by_pieces (unsigned HOST_WIDE_

 rtx
 store_by_pieces (rtx to, unsigned HOST_WIDE_INT len,
-		 rtx (*constfun) (void *, HOST_WIDE_INT, enum machine_mode),
-		 void *constfundata, unsigned int align, bool memsetp, int endp)
+		 rtx (*constfun) (const void *, HOST_WIDE_INT, enum machine_mode),
+		 const void *constfundata, unsigned int align, bool memsetp, int endp)
 {
   struct store_by_pieces data;

@@ -2392,7 +2392,7 @@ clear_by_pieces (rtx to, unsigned HOST_W
    Return const0_rtx unconditionally.  */

 static rtx
-clear_by_pieces_1 (void *data ATTRIBUTE_UNUSED,
+clear_by_pieces_1 (const void *data ATTRIBUTE_UNUSED,
 		   HOST_WIDE_INT offset ATTRIBUTE_UNUSED,
 		   enum machine_mode mode ATTRIBUTE_UNUSED)
 {
@@ -4529,7 +4529,7 @@ store_expr (tree exp, rtx target, int ca
 	}
       str_copy_len = MIN (str_copy_len, exp_len);
       if (!can_store_by_pieces (str_copy_len, builtin_strncpy_read_str,
-				(void *) TREE_STRING_POINTER (exp),
+				TREE_STRING_POINTER (exp),
 				MEM_ALIGN (target), false))
 	goto normal_expr;

@@ -4537,7 +4537,7 @@ store_expr (tree exp, rtx target, int ca

       dest_mem = store_by_pieces (dest_mem,
 				  str_copy_len, builtin_strncpy_read_str,
-				  (void *) TREE_STRING_POINTER (exp),
+				  TREE_STRING_POINTER (exp),
 				  MEM_ALIGN (target), false,
 				  exp_len > str_copy_len ? 1 : 0);
       if (exp_len > str_copy_len)
diff -rup orig/egcc-SVN20070919/gcc/expr.h egcc-SVN20070919/gcc/expr.h
--- orig/egcc-SVN20070919/gcc/expr.h	2007-08-27 23:03:15.000000000 -0400
+++ egcc-SVN20070919/gcc/expr.h	2007-09-20 17:25:54.666100781 -0400
@@ -348,7 +348,7 @@ extern void expand_builtin_setjmp_setup
 extern void expand_builtin_setjmp_receiver (rtx);
 extern rtx expand_builtin_saveregs (void);
 extern void expand_builtin_trap (void);
-extern rtx builtin_strncpy_read_str (void *, HOST_WIDE_INT, enum machine_mode);
+extern rtx builtin_strncpy_read_str (const void *, HOST_WIDE_INT, enum machine_mode);

 /* Functions from expr.c:  */

@@ -455,9 +455,9 @@ extern int can_move_by_pieces (unsigned
    MEMSETP is true if this is a real memset/bzero, not a copy
    of a const string.  */
 extern int can_store_by_pieces (unsigned HOST_WIDE_INT,
-				rtx (*) (void *, HOST_WIDE_INT,
+				rtx (*) (const void *, HOST_WIDE_INT,
 					 enum machine_mode),
-				void *, unsigned int, bool);
+				const void *, unsigned int, bool);

 /* Generate several move instructions to store LEN bytes generated by
    CONSTFUN to block TO.  (A MEM rtx with BLKmode).  CONSTFUNDATA is a
@@ -466,8 +466,8 @@ extern int can_store_by_pieces (unsigned
    MEMSETP is true if this is a real memset/bzero, not a copy.
    Returns TO + LEN.  */
 extern rtx store_by_pieces (rtx, unsigned HOST_WIDE_INT,
-			    rtx (*) (void *, HOST_WIDE_INT, enum machine_mode),
-			    void *, unsigned int, bool, int);
+			    rtx (*) (const void *, HOST_WIDE_INT, enum machine_mode),
+			    const void *, unsigned int, bool, int);

 /* Emit insns to set X from Y.  */
 extern rtx emit_move_insn (rtx, rtx);
diff -rup orig/egcc-SVN20070919/gcc/fortran/module.c egcc-SVN20070919/gcc/fortran/module.c
--- orig/egcc-SVN20070919/gcc/fortran/module.c	2007-08-26 23:02:43.000000000 -0400
+++ egcc-SVN20070919/gcc/fortran/module.c	2007-09-23 10:28:33.513877809 -0400
@@ -2813,7 +2813,7 @@ mio_expr (gfc_expr **ep)

     case EXPR_SUBSTRING:
       e->value.character.string
-	= (char *) mio_allocated_string (e->value.character.string);
+	= CONST_CAST (char *, mio_allocated_string (e->value.character.string));
       mio_ref_list (&e->ref);
       break;

@@ -2848,7 +2848,7 @@ mio_expr (gfc_expr **ep)
 	case BT_CHARACTER:
 	  mio_integer (&e->value.character.length);
 	  e->value.character.string
-	    = (char *) mio_allocated_string (e->value.character.string);
+	    = CONST_CAST (char *, mio_allocated_string (e->value.character.string));
 	  break;

 	default:
diff -rup orig/egcc-SVN20070919/gcc/gengtype.c egcc-SVN20070919/gcc/gengtype.c
--- orig/egcc-SVN20070919/gcc/gengtype.c	2007-08-06 20:02:28.000000000 -0400
+++ egcc-SVN20070919/gcc/gengtype.c	2007-09-20 17:25:54.669989759 -0400
@@ -433,7 +433,7 @@ read_input_list (const char *listname)
 				     : lang_dir_names[langno - 1]);

 		    bmap |= curlangs;
-		    set_lang_bitmap ((char *)gt_files[i], bmap);
+		    set_lang_bitmap (CONST_CAST (char *, gt_files[i]), bmap);
 		    here = committed;
 		    goto next_line;
 		  }
@@ -1271,9 +1271,9 @@ adjust_field_type (type_p t, options_p o
 	if (params[num] != NULL)
 	  error_at_line (&lexer_line, "duplicate `%s' option", opt->name);
 	if (! ISDIGIT (opt->name[5]))
-	  params[num] = create_pointer ((type_p) opt->info);
+	  params[num] = create_pointer ((type_p)CONST_CAST (char *, opt->info));
 	else
-	  params[num] = (type_p) opt->info;
+	  params[num] = (type_p)CONST_CAST (char *, opt->info);
       }
     else if (strcmp (opt->name, "special") == 0)
       {
@@ -1322,7 +1322,8 @@ process_gc_options (options_p opt, enum
   options_p o;
   for (o = opt; o; o = o->next)
     if (strcmp (o->name, "ptr_alias") == 0 && level == GC_POINTED_TO)
-      set_gc_used_type ((type_p) o->info, GC_POINTED_TO, NULL);
+      set_gc_used_type ((type_p)CONST_CAST (char *, o->info),
+			GC_POINTED_TO, NULL);
     else if (strcmp (o->name, "maybe_undef") == 0)
       *maybe_undef = 1;
     else if (strcmp (o->name, "use_params") == 0)
diff -rup orig/egcc-SVN20070919/gcc/ggc-common.c egcc-SVN20070919/gcc/ggc-common.c
--- orig/egcc-SVN20070919/gcc/ggc-common.c	2007-08-25 11:25:45.000000000 -0400
+++ egcc-SVN20070919/gcc/ggc-common.c	2007-09-20 17:25:54.672241222 -0400
@@ -125,7 +125,8 @@ ggc_mark_roots (void)
       if (*cti->base)
 	{
 	  ggc_set_mark (*cti->base);
-	  htab_traverse_noresize (*cti->base, ggc_htab_delete, (void *) cti);
+	  htab_traverse_noresize (*cti->base, ggc_htab_delete,
+				  CONST_CAST (struct ggc_cache_tab *, cti));
 	  ggc_set_mark ((*cti->base)->entries);
 	}
 }
diff -rup orig/egcc-SVN20070919/gcc/stringpool.c egcc-SVN20070919/gcc/stringpool.c
--- orig/egcc-SVN20070919/gcc/stringpool.c	2007-07-26 23:03:59.000000000 -0400
+++ egcc-SVN20070919/gcc/stringpool.c	2007-09-20 17:25:54.673047819 -0400
@@ -197,8 +197,8 @@ gt_pch_p_S (void *obj ATTRIBUTE_UNUSED,
 void
 gt_pch_n_S (const void *x)
 {
-  gt_pch_note_object ((void *)x, (void *)x, &gt_pch_p_S,
-		      gt_types_enum_last);
+  gt_pch_note_object (CONST_CAST(void *, x), CONST_CAST(void *, x),
+		      &gt_pch_p_S, gt_types_enum_last);
 }

 /* Handle saving and restoring the string pool for PCH.  */
diff -rup orig/egcc-SVN20070919/gcc/system.h egcc-SVN20070919/gcc/system.h
--- orig/egcc-SVN20070919/gcc/system.h	2007-09-03 13:22:09.000000000 -0400
+++ egcc-SVN20070919/gcc/system.h	2007-09-20 17:25:54.674382041 -0400
@@ -793,9 +793,4 @@ extern void fancy_abort (const char *, i
 #define CONST_CAST_RTX(X) CONST_CAST(struct rtx_def *, (X))
 #define CONST_CAST_BB(X) CONST_CAST(struct basic_block_def *, (X))

-/* Activate -Wcast-qual as a warning (not an error/-Werror).  */
-#if GCC_VERSION >= 4003
-#pragma GCC diagnostic warning "-Wcast-qual"
-#endif
-
 #endif /* ! GCC_SYSTEM_H */
diff -rup orig/egcc-SVN20070919/gcc/tree-parloops.c egcc-SVN20070919/gcc/tree-parloops.c
--- orig/egcc-SVN20070919/gcc/tree-parloops.c	2007-09-15 23:02:52.000000000 -0400
+++ egcc-SVN20070919/gcc/tree-parloops.c	2007-09-20 17:25:54.676054598 -0400
@@ -80,8 +80,10 @@ struct name_to_copy_elt
 static int
 name_to_copy_elt_eq (const void *aa, const void *bb)
 {
-  struct name_to_copy_elt *a = (struct name_to_copy_elt *) aa;
-  struct name_to_copy_elt *b = (struct name_to_copy_elt *) bb;
+  const struct name_to_copy_elt *const a
+    = (const struct name_to_copy_elt *) aa;
+  const struct name_to_copy_elt *const b
+    = (const struct name_to_copy_elt *) bb;

   return a->version == b->version;
 }
@@ -89,7 +91,8 @@ name_to_copy_elt_eq (const void *aa, con
 static hashval_t
 name_to_copy_elt_hash (const void *aa)
 {
-  struct name_to_copy_elt *a = (struct name_to_copy_elt *) aa;
+  const struct name_to_copy_elt *const a
+    = (const struct name_to_copy_elt *) aa;

   return (hashval_t) a->version;
 }
diff -rup orig/egcc-SVN20070919/gcc/tree-ssa-phiopt.c egcc-SVN20070919/gcc/tree-ssa-phiopt.c
--- orig/egcc-SVN20070919/gcc/tree-ssa-phiopt.c	2007-09-10 23:06:02.000000000 -0400
+++ egcc-SVN20070919/gcc/tree-ssa-phiopt.c	2007-09-20 17:25:54.677829879 -0400
@@ -1101,7 +1101,7 @@ static struct pointer_set_t *nontrap_set
 static hashval_t
 name_to_bb_hash (const void *p)
 {
-  tree n = ((struct name_to_bb *)p)->ssa_name;
+  const_tree const n = ((const struct name_to_bb *)p)->ssa_name;
   return htab_hash_pointer (n);
 }

@@ -1110,8 +1110,8 @@ name_to_bb_hash (const void *p)
 static int
 name_to_bb_eq (const void *p1, const void *p2)
 {
-  tree n1 = ((struct name_to_bb *)p1)->ssa_name;
-  tree n2 = ((struct name_to_bb *)p2)->ssa_name;
+  const_tree const n1 = ((const struct name_to_bb *)p1)->ssa_name;
+  const_tree const n2 = ((const struct name_to_bb *)p2)->ssa_name;

   return n1 == n2;
 }
diff -rup orig/egcc-SVN20070919/gcc/tree.h egcc-SVN20070919/gcc/tree.h
--- orig/egcc-SVN20070919/gcc/tree.h	2007-09-12 23:05:00.000000000 -0400
+++ egcc-SVN20070919/gcc/tree.h	2007-09-20 17:25:54.683922318 -0400
@@ -4847,7 +4847,7 @@ extern tree std_gimplify_va_arg_expr (tr
 extern tree build_va_arg_indirect_ref (tree);
 extern tree build_string_literal (int, const char *);
 extern bool validate_arglist (const_tree, ...);
-extern rtx builtin_memset_read_str (void *, HOST_WIDE_INT, enum machine_mode);
+extern rtx builtin_memset_read_str (const void *, HOST_WIDE_INT, enum machine_mode);
 extern int get_pointer_alignment (tree, unsigned int);

 /* In convert.c */

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH]: Add -Wcast-qual to the bootstrap warning flags
  2007-09-24  7:20 [PATCH]: Add -Wcast-qual to the bootstrap warning flags Kaveh R. GHAZI
@ 2007-09-24  7:29 ` Steve Kargl
  2007-09-24  8:31 ` Andrew Pinski
  1 sibling, 0 replies; 8+ messages in thread
From: Steve Kargl @ 2007-09-24  7:29 UTC (permalink / raw)
  To: Kaveh R. GHAZI; +Cc: gcc-patches, fortran

On Sun, Sep 23, 2007 at 11:38:32PM -0400, Kaveh R. GHAZI wrote:
>
> gcc/fortran:
> 	* module.c (mio_expr): Avoid -Wcast-qual warning.
> 

This part is OK.

-- 
Steve

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH]: Add -Wcast-qual to the bootstrap warning flags
  2007-09-24  7:20 [PATCH]: Add -Wcast-qual to the bootstrap warning flags Kaveh R. GHAZI
  2007-09-24  7:29 ` Steve Kargl
@ 2007-09-24  8:31 ` Andrew Pinski
  2007-09-24 15:10   ` Kaveh R. GHAZI
  1 sibling, 1 reply; 8+ messages in thread
From: Andrew Pinski @ 2007-09-24  8:31 UTC (permalink / raw)
  To: Kaveh R. GHAZI; +Cc: gcc-patches, fortran

On 9/23/07, Kaveh R. GHAZI <ghazi@caip.rutgers.edu> wrote:

> +       asprintf (CONST_CAST(char **, &m68k_library_id_string),
                                              ^
Missing space.  Also this looks wrong anyways.

> +      cselib_val *e = cselib_lookup (CONST_CAST_RTX(x), GET_MODE (x), 0);

Likewise.

> +      cselib_val *e = cselib_lookup (CONST_CAST_RTX(y), GET_MODE (y), 0);

And again.


Can you double check all of the added CONST_CAST* to make sure they
have the needed space between the macro name and the parentheses?

Also why can't cselib_lookup take const_rtx?  I think you need to take
more time to think about all of these const_* changes before just
adding CONST_CAST*.

Thanks,
Andrew Pinski

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH]: Add -Wcast-qual to the bootstrap warning flags
  2007-09-24  8:31 ` Andrew Pinski
@ 2007-09-24 15:10   ` Kaveh R. GHAZI
  2007-09-24 15:56     ` Jakub Jelinek
  0 siblings, 1 reply; 8+ messages in thread
From: Kaveh R. GHAZI @ 2007-09-24 15:10 UTC (permalink / raw)
  To: Andrew Pinski; +Cc: gcc-patches, fortran

On Sun, 23 Sep 2007, Andrew Pinski wrote:

> On 9/23/07, Kaveh R. GHAZI <ghazi@caip.rutgers.edu> wrote:
>
> > +       asprintf (CONST_CAST(char **, &m68k_library_id_string),
>                                               ^
> Missing space.  Also this looks wrong anyways.

What do you think is wrong with this exactly?  The m68k_library_id_string
variable is a const object that's being initialized here in asprintf.
Initializing const objects is one of the legitimate cases I've enumerated
for using CONST_CAST.  And as I mentioned I did "make cc1" cross-targetted
to m68k-unknown-linux-gnu (among many others) to ensure I didn't introduce
a typo.


>
> > +      cselib_val *e = cselib_lookup (CONST_CAST_RTX(x), GET_MODE (x), 0);
>
> Likewise.
>
> > +      cselib_val *e = cselib_lookup (CONST_CAST_RTX(y), GET_MODE (y), 0);
>
> And again.
>
>
> Can you double check all of the added CONST_CAST* to make sure they
> have the needed space between the macro name and the parentheses?

I'll double check these.  Thanks for catching it.


> Also why can't cselib_lookup take const_rtx?  I think you need to take
> more time to think about all of these const_* changes before just
> adding CONST_CAST*.
> Andrew Pinski

The reason cselib_lookup can't take a const_rtx is that it directly or
indirectly calls other functions which cannot be constified.  E.g. it
calls cselib_subst_to_values which returns it's parameter, one of the
cases I cannot fix without using a const_ shadow function.  It calls
wrap_constant, which again returns its param.  There are other problematic
functions called by cselib_lookup which I won't both to enumerate.

I could obviously force cselib_lookup to take a const_rtx, but then I'd
have to insert multiple CONST_CASTs downstream in the places it calls the
non-const functions.  Some people don't like over-using that macro, so I
tried to strike a balance between getting -Wcast-qual working and using
the fewest number of override casts.


Thanks for your feedback, assuming I fix the whitespace issues, ok for
mainline?

		Thanks,
		--Kaveh
--
Kaveh R. Ghazi			ghazi@caip.rutgers.edu

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH]: Add -Wcast-qual to the bootstrap warning flags
  2007-09-24 15:10   ` Kaveh R. GHAZI
@ 2007-09-24 15:56     ` Jakub Jelinek
  2007-09-24 19:51       ` Kaveh R. GHAZI
  0 siblings, 1 reply; 8+ messages in thread
From: Jakub Jelinek @ 2007-09-24 15:56 UTC (permalink / raw)
  To: Kaveh R. GHAZI; +Cc: Andrew Pinski, gcc-patches, fortran

On Mon, Sep 24, 2007 at 10:35:45AM -0400, Kaveh R. GHAZI wrote:
> On Sun, 23 Sep 2007, Andrew Pinski wrote:
> 
> > On 9/23/07, Kaveh R. GHAZI <ghazi@caip.rutgers.edu> wrote:
> >
> > > +       asprintf (CONST_CAST(char **, &m68k_library_id_string),
> >                                               ^
> > Missing space.  Also this looks wrong anyways.
> 
> What do you think is wrong with this exactly?  The m68k_library_id_string
> variable is a const object that's being initialized here in asprintf.
> Initializing const objects is one of the legitimate cases I've enumerated
> for using CONST_CAST.  And as I mentioned I did "make cc1" cross-targetted
> to m68k-unknown-linux-gnu (among many others) to ensure I didn't introduce
> a typo.

I don't think this is legitimate.  You should simply:
char *temp;
asprintf (&temp, ....);
m68k_library_id_string = temp;

i.e. completely prepare the object as non-const and only when it is
fully prepared store address of the temp object into the const char *
var.
The asprintf call does no error checking btw, it can fail e.g. if malloc
fails (probably that's the only reason when format string is %d).
So it should be checked as well.

	Jakub

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH]: Add -Wcast-qual to the bootstrap warning flags
  2007-09-24 15:56     ` Jakub Jelinek
@ 2007-09-24 19:51       ` Kaveh R. GHAZI
  2007-09-29  9:38         ` [PATCH]: Add -Wcast-qual to the bootstrap warning flags [take 2] Kaveh R. GHAZI
  0 siblings, 1 reply; 8+ messages in thread
From: Kaveh R. GHAZI @ 2007-09-24 19:51 UTC (permalink / raw)
  To: Jakub Jelinek; +Cc: Andrew Pinski, gcc-patches, fortran

On Mon, 24 Sep 2007, Jakub Jelinek wrote:

> On Mon, Sep 24, 2007 at 10:35:45AM -0400, Kaveh R. GHAZI wrote:
> > On Sun, 23 Sep 2007, Andrew Pinski wrote:
> >
> > > On 9/23/07, Kaveh R. GHAZI <ghazi@caip.rutgers.edu> wrote:
> > >
> > > > +       asprintf (CONST_CAST(char **, &m68k_library_id_string),
> > >                                               ^
> > > Missing space.  Also this looks wrong anyways.
> >
> > What do you think is wrong with this exactly?  The m68k_library_id_string
> > variable is a const object that's being initialized here in asprintf.
> > Initializing const objects is one of the legitimate cases I've enumerated
> > for using CONST_CAST.  And as I mentioned I did "make cc1" cross-targetted
> > to m68k-unknown-linux-gnu (among many others) to ensure I didn't introduce
> > a typo.
>
> I don't think this is legitimate.  You should simply:
> char *temp;
> asprintf (&temp, ....);
> m68k_library_id_string = temp;
>
> i.e. completely prepare the object as non-const and only when it is
> fully prepared store address of the temp object into the const char *
> var.

<Shrug>, okay.


> The asprintf call does no error checking btw, it can fail e.g. if malloc
> fails (probably that's the only reason when format string is %d).
> So it should be checked as well.
> 	Jakub

Well that was a preexisting fault unrelated to my patch.  But I can fix
that as well if you like.  Would aborting on an error, like xmalloc does,
be acceptable in this situation?

		--Kaveh
--
Kaveh R. Ghazi			ghazi@caip.rutgers.edu

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH]: Add -Wcast-qual to the bootstrap warning flags [take 2]
  2007-09-24 19:51       ` Kaveh R. GHAZI
@ 2007-09-29  9:38         ` Kaveh R. GHAZI
  2007-10-12 13:09           ` [PING]: " Kaveh R. GHAZI
  0 siblings, 1 reply; 8+ messages in thread
From: Kaveh R. GHAZI @ 2007-09-29  9:38 UTC (permalink / raw)
  To: gcc-patches; +Cc: Andrew Pinski, Jakub Jelinek

This is my second attempt to activate -Wcast-qual during bootstrap.
This version incorporates feedback from the previous thread here:
http://gcc.gnu.org/ml/gcc-patches/2007-09/msg01799.html

Differences from before are:

1.  Fix whitespace problems pointed out by Andrew.
2.  Change asprintf usage in m68k.c as requested by Jakub.
3.  The fortran bits were approved and installed so they are not
included in this version.

Tested on sparc-sun-solaris2.10, no regressions.  I also built cc1
cross-targetted to m68k-unknown-linux-gnu to ensure there were no
typos in the m68k.c change.

Okay for mainline?

		Thanks,
		--Kaveh


2007-09-23  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* configure.ac (ACX_PROG_CC_WARNING_OPTS): Add -Wcast-qual.
	* configure: Regenerate.

gcc:
	* builtins.c (builtin_memcpy_read_str, builtin_memset_gen_str,
	builtin_strncpy_read_str, builtin_memset_read_str,
	builtin_memset_gen_str): Constify.
	(expand_builtin_memcpy, expand_builtin_mempcpy_args,
	expand_builtin_strncpy): Don't cast away const-ness.
	* config/m68k/m68k.c (m68k_handle_option): Avoid -Wcast-qual
	warning.  Check for error from asprintf.
	* cselib.c (entry_and_rtx_equal_p, rtx_equal_for_cselib_p):
	Constify.
	* cselib.h (rtx_equal_for_cselib_p): Likewise.
	* expr.c (struct store_by_pieces, clear_by_pieces_1,
	can_store_by_pieces, store_by_pieces): Constify.
	(store_expr): Don't cast away const-ness.
	* expr.h (builtin_strncpy_read_str, can_store_by_pieces,
	store_by_pieces): Constify.
	* gengtype.c (read_input_list, adjust_field_type,
	process_gc_options): Avoid -Wcast-qual warning.
	* ggc-common.c (ggc_mark_roots): Likewise.
	* stringpool.c (gt_pch_n_S): Likewise.
	* system.h: Remove #pragma GCC diagnostic warning "-Wcast-qual"
	* tree-parloops.c (name_to_copy_elt_eq, name_to_copy_elt_hash):
	Constify.
	* tree-ssa-phiopt.c (name_to_bb_hash, name_to_bb_eq): Likewise.
	* tree.h (builtin_memset_read_str): Likewise.

diff -rup orig/egcc-SVN20070927/gcc/builtins.c egcc-SVN20070927/gcc/builtins.c
--- orig/egcc-SVN20070927/gcc/builtins.c	2007-09-27 20:51:38.000000000 -0400
+++ egcc-SVN20070927/gcc/builtins.c	2007-09-27 21:23:54.275439393 -0400
@@ -109,7 +109,7 @@ static rtx expand_builtin_memchr (tree,
 static rtx expand_builtin_memcmp (tree, rtx, enum machine_mode);
 static rtx expand_builtin_strcmp (tree, rtx, enum machine_mode);
 static rtx expand_builtin_strncmp (tree, rtx, enum machine_mode);
-static rtx builtin_memcpy_read_str (void *, HOST_WIDE_INT, enum machine_mode);
+static rtx builtin_memcpy_read_str (const void *, HOST_WIDE_INT, enum machine_mode);
 static rtx expand_builtin_strcat (tree, tree, rtx, enum machine_mode);
 static rtx expand_builtin_strncat (tree, rtx, enum machine_mode);
 static rtx expand_builtin_strspn (tree, rtx, enum machine_mode);
@@ -126,7 +126,7 @@ static rtx expand_builtin_strcpy (tree,
 static rtx expand_builtin_strcpy_args (tree, tree, tree, rtx, enum machine_mode);
 static rtx expand_builtin_stpcpy (tree, rtx, enum machine_mode);
 static rtx expand_builtin_strncpy (tree, rtx, enum machine_mode);
-static rtx builtin_memset_gen_str (void *, HOST_WIDE_INT, enum machine_mode);
+static rtx builtin_memset_gen_str (const void *, HOST_WIDE_INT, enum machine_mode);
 static rtx expand_builtin_memset (tree, rtx, enum machine_mode);
 static rtx expand_builtin_memset_args (tree, tree, tree, rtx, enum machine_mode, tree);
 static rtx expand_builtin_bzero (tree);
@@ -3255,7 +3255,7 @@ expand_builtin_strpbrk (tree exp, rtx ta
    constant.  */

 static rtx
-builtin_memcpy_read_str (void *data, HOST_WIDE_INT offset,
+builtin_memcpy_read_str (const void *data, HOST_WIDE_INT offset,
 			 enum machine_mode mode)
 {
   const char *str = (const char *) data;
@@ -3331,11 +3331,11 @@ expand_builtin_memcpy (tree exp, rtx tar
 	  && GET_CODE (len_rtx) == CONST_INT
 	  && (unsigned HOST_WIDE_INT) INTVAL (len_rtx) <= strlen (src_str) + 1
 	  && can_store_by_pieces (INTVAL (len_rtx), builtin_memcpy_read_str,
-				  (void *) src_str, dest_align, false))
+				  src_str, dest_align, false))
 	{
 	  dest_mem = store_by_pieces (dest_mem, INTVAL (len_rtx),
 				      builtin_memcpy_read_str,
-				      (void *) src_str, dest_align, false, 0);
+				      src_str, dest_align, false, 0);
 	  dest_mem = force_operand (XEXP (dest_mem, 0), NULL_RTX);
 	  dest_mem = convert_memory_address (ptr_mode, dest_mem);
 	  return dest_mem;
@@ -3444,13 +3444,13 @@ expand_builtin_mempcpy_args (tree dest,
 	  && GET_CODE (len_rtx) == CONST_INT
 	  && (unsigned HOST_WIDE_INT) INTVAL (len_rtx) <= strlen (src_str) + 1
 	  && can_store_by_pieces (INTVAL (len_rtx), builtin_memcpy_read_str,
-				  (void *) src_str, dest_align, false))
+				  src_str, dest_align, false))
 	{
 	  dest_mem = get_memory_rtx (dest, len);
 	  set_mem_align (dest_mem, dest_align);
 	  dest_mem = store_by_pieces (dest_mem, INTVAL (len_rtx),
 				      builtin_memcpy_read_str,
-				      (void *) src_str, dest_align,
+				      src_str, dest_align,
 				      false, endp);
 	  dest_mem = force_operand (XEXP (dest_mem, 0), NULL_RTX);
 	  dest_mem = convert_memory_address (ptr_mode, dest_mem);
@@ -3735,7 +3735,7 @@ expand_builtin_stpcpy (tree exp, rtx tar
    constant.  */

 rtx
-builtin_strncpy_read_str (void *data, HOST_WIDE_INT offset,
+builtin_strncpy_read_str (const void *data, HOST_WIDE_INT offset,
 			  enum machine_mode mode)
 {
   const char *str = (const char *) data;
@@ -3793,13 +3793,13 @@ expand_builtin_strncpy (tree exp, rtx ta
 	  if (!p || dest_align == 0 || !host_integerp (len, 1)
 	      || !can_store_by_pieces (tree_low_cst (len, 1),
 				       builtin_strncpy_read_str,
-				       (void *) p, dest_align, false))
+				       p, dest_align, false))
 	    return NULL_RTX;

 	  dest_mem = get_memory_rtx (dest, len);
 	  store_by_pieces (dest_mem, tree_low_cst (len, 1),
 			   builtin_strncpy_read_str,
-			   (void *) p, dest_align, false, 0);
+			   p, dest_align, false, 0);
 	  dest_mem = force_operand (XEXP (dest_mem, 0), NULL_RTX);
 	  dest_mem = convert_memory_address (ptr_mode, dest_mem);
 	  return dest_mem;
@@ -3813,7 +3813,7 @@ expand_builtin_strncpy (tree exp, rtx ta
    constant.  */

 rtx
-builtin_memset_read_str (void *data, HOST_WIDE_INT offset ATTRIBUTE_UNUSED,
+builtin_memset_read_str (const void *data, HOST_WIDE_INT offset ATTRIBUTE_UNUSED,
 			 enum machine_mode mode)
 {
   const char *c = (const char *) data;
@@ -3830,22 +3830,23 @@ builtin_memset_read_str (void *data, HOS
    4 bytes wide, return the RTL for 0x01010101*data.  */

 static rtx
-builtin_memset_gen_str (void *data, HOST_WIDE_INT offset ATTRIBUTE_UNUSED,
+builtin_memset_gen_str (const void *data, HOST_WIDE_INT offset ATTRIBUTE_UNUSED,
 			enum machine_mode mode)
 {
+  rtx x = CONST_CAST_RTX ((const_rtx)data);
   rtx target, coeff;
   size_t size;
   char *p;

   size = GET_MODE_SIZE (mode);
   if (size == 1)
-    return (rtx) data;
+    return x;

   p = alloca (size);
   memset (p, 1, size);
   coeff = c_readstr (p, mode);

-  target = convert_to_mode (mode, (rtx) data, 1);
+  target = convert_to_mode (mode, x, 1);
   target = expand_mult (mode, target, coeff, NULL_RTX, 1);
   return force_reg (mode, target);
 }
diff -rup orig/egcc-SVN20070927/gcc/config/m68k/m68k.c egcc-SVN20070927/gcc/config/m68k/m68k.c
--- orig/egcc-SVN20070927/gcc/config/m68k/m68k.c	2007-09-24 23:02:46.000000000 -0400
+++ egcc-SVN20070927/gcc/config/m68k/m68k.c	2007-09-27 22:12:18.086877938 -0400
@@ -456,7 +456,14 @@ m68k_handle_option (size_t code, const c
 	error ("-mshared-library-id=%s is not between 0 and %d",
 	       arg, MAX_LIBRARY_ID);
       else
-	asprintf ((char **) &m68k_library_id_string, "%d", (value * -4) - 4);
+        {
+	  char *tmp;
+	  const int n = asprintf (&tmp, "%d", (value * -4) - 4);
+
+	  if (!tmp || n < 0)
+	    fatal_error ("out of memory");
+	  m68k_library_id_string = tmp;
+	}
       return true;

     default:
diff -rup orig/egcc-SVN20070927/gcc/configure egcc-SVN20070927/gcc/configure
--- orig/egcc-SVN20070927/gcc/configure	2007-09-23 23:06:54.000000000 -0400
+++ egcc-SVN20070927/gcc/configure	2007-09-27 21:24:00.788795724 -0400
@@ -6119,7 +6119,7 @@ fi
 loose_warn=
 save_CFLAGS="$CFLAGS"
 for option in -W -Wall -Wwrite-strings -Wstrict-prototypes \
-			  -Wmissing-prototypes; do
+			  -Wmissing-prototypes -Wcast-qual; do
   as_acx_Woption=`echo "acx_cv_prog_cc_warning_$option" | $as_tr_sh`

   echo "$as_me:$LINENO: checking whether $CC supports $option" >&5
diff -rup orig/egcc-SVN20070927/gcc/configure.ac egcc-SVN20070927/gcc/configure.ac
--- orig/egcc-SVN20070927/gcc/configure.ac	2007-09-23 23:03:15.000000000 -0400
+++ egcc-SVN20070927/gcc/configure.ac	2007-09-27 21:23:54.309992657 -0400
@@ -320,7 +320,7 @@ AC_CHECK_TYPES([__int64], [AC_CHECK_SIZE
 # So, we only use -pedantic if we can disable those warnings.

 ACX_PROG_CC_WARNING_OPTS([-W -Wall -Wwrite-strings -Wstrict-prototypes \
-			  -Wmissing-prototypes], [loose_warn])
+			  -Wmissing-prototypes -Wcast-qual], [loose_warn])
 ACX_PROG_CC_WARNING_OPTS([-Wc++-compat], [cxx_compat_warn])
 ACX_PROG_CC_WARNING_OPTS([-Wold-style-definition \
                           -Wmissing-format-attribute], [strict_warn])
diff -rup orig/egcc-SVN20070927/gcc/cselib.c egcc-SVN20070927/gcc/cselib.c
--- orig/egcc-SVN20070927/gcc/cselib.c	2007-08-23 12:12:27.000000000 -0400
+++ egcc-SVN20070927/gcc/cselib.c	2007-09-27 21:23:54.312526773 -0400
@@ -234,8 +234,8 @@ entry_and_rtx_equal_p (const void *entry
 {
   struct elt_loc_list *l;
   const cselib_val *const v = (const cselib_val *) entry;
-  rtx x = (rtx) x_arg;
-  enum machine_mode mode = GET_MODE (x);
+  const_rtx x = (const_rtx) x_arg;
+  const enum machine_mode mode = GET_MODE (x);

   gcc_assert (GET_CODE (x) != CONST_INT && GET_CODE (x) != CONST_FIXED
 	      && (mode != VOIDmode || GET_CODE (x) != CONST_DOUBLE));
@@ -401,7 +401,7 @@ cselib_reg_set_mode (const_rtx x)
    our gathered information into account.  */

 int
-rtx_equal_for_cselib_p (rtx x, rtx y)
+rtx_equal_for_cselib_p (const_rtx x, const_rtx y)
 {
   enum rtx_code code;
   const char *fmt;
@@ -409,7 +409,7 @@ rtx_equal_for_cselib_p (rtx x, rtx y)

   if (REG_P (x) || MEM_P (x))
     {
-      cselib_val *e = cselib_lookup (x, GET_MODE (x), 0);
+      cselib_val *e = cselib_lookup (CONST_CAST_RTX (x), GET_MODE (x), 0);

       if (e)
 	x = e->val_rtx;
@@ -417,7 +417,7 @@ rtx_equal_for_cselib_p (rtx x, rtx y)

   if (REG_P (y) || MEM_P (y))
     {
-      cselib_val *e = cselib_lookup (y, GET_MODE (y), 0);
+      cselib_val *e = cselib_lookup (CONST_CAST_RTX (y), GET_MODE (y), 0);

       if (e)
 	y = e->val_rtx;
diff -rup orig/egcc-SVN20070927/gcc/cselib.h egcc-SVN20070927/gcc/cselib.h
--- orig/egcc-SVN20070927/gcc/cselib.h	2007-07-30 12:38:02.000000000 -0400
+++ egcc-SVN20070927/gcc/cselib.h	2007-09-27 21:23:54.313348091 -0400
@@ -66,7 +66,7 @@ extern void cselib_clear_table (void);
 extern void cselib_finish (void);
 extern void cselib_process_insn (rtx);
 extern enum machine_mode cselib_reg_set_mode (const_rtx);
-extern int rtx_equal_for_cselib_p (rtx, rtx);
+extern int rtx_equal_for_cselib_p (const_rtx, const_rtx);
 extern int references_value_p (const_rtx, int);
 extern rtx cselib_expand_value_rtx (rtx, bitmap, int);
 extern rtx cselib_subst_to_values (rtx);
diff -rup orig/egcc-SVN20070927/gcc/expr.c egcc-SVN20070927/gcc/expr.c
--- orig/egcc-SVN20070927/gcc/expr.c	2007-09-27 20:51:39.000000000 -0400
+++ egcc-SVN20070927/gcc/expr.c	2007-09-27 21:23:54.324562605 -0400
@@ -115,8 +115,8 @@ struct store_by_pieces
   int explicit_inc_to;
   unsigned HOST_WIDE_INT len;
   HOST_WIDE_INT offset;
-  rtx (*constfun) (void *, HOST_WIDE_INT, enum machine_mode);
-  void *constfundata;
+  rtx (*constfun) (const void *, HOST_WIDE_INT, enum machine_mode);
+  const void *constfundata;
   int reverse;
 };

@@ -129,7 +129,7 @@ static bool block_move_libcall_safe_for_
 static bool emit_block_move_via_movmem (rtx, rtx, rtx, unsigned, unsigned, HOST_WIDE_INT);
 static tree emit_block_move_libcall_fn (int);
 static void emit_block_move_via_loop (rtx, rtx, rtx, unsigned);
-static rtx clear_by_pieces_1 (void *, HOST_WIDE_INT, enum machine_mode);
+static rtx clear_by_pieces_1 (const void *, HOST_WIDE_INT, enum machine_mode);
 static void clear_by_pieces (rtx, unsigned HOST_WIDE_INT, unsigned int);
 static void store_by_pieces_1 (struct store_by_pieces *, unsigned int);
 static void store_by_pieces_2 (rtx (*) (rtx, ...), enum machine_mode,
@@ -2222,8 +2222,8 @@ use_group_regs (rtx *call_fusage, rtx re

 int
 can_store_by_pieces (unsigned HOST_WIDE_INT len,
-		     rtx (*constfun) (void *, HOST_WIDE_INT, enum machine_mode),
-		     void *constfundata, unsigned int align, bool memsetp)
+		     rtx (*constfun) (const void *, HOST_WIDE_INT, enum machine_mode),
+		     const void *constfundata, unsigned int align, bool memsetp)
 {
   unsigned HOST_WIDE_INT l;
   unsigned int max_size;
@@ -2321,8 +2321,8 @@ can_store_by_pieces (unsigned HOST_WIDE_

 rtx
 store_by_pieces (rtx to, unsigned HOST_WIDE_INT len,
-		 rtx (*constfun) (void *, HOST_WIDE_INT, enum machine_mode),
-		 void *constfundata, unsigned int align, bool memsetp, int endp)
+		 rtx (*constfun) (const void *, HOST_WIDE_INT, enum machine_mode),
+		 const void *constfundata, unsigned int align, bool memsetp, int endp)
 {
   struct store_by_pieces data;

@@ -2392,7 +2392,7 @@ clear_by_pieces (rtx to, unsigned HOST_W
    Return const0_rtx unconditionally.  */

 static rtx
-clear_by_pieces_1 (void *data ATTRIBUTE_UNUSED,
+clear_by_pieces_1 (const void *data ATTRIBUTE_UNUSED,
 		   HOST_WIDE_INT offset ATTRIBUTE_UNUSED,
 		   enum machine_mode mode ATTRIBUTE_UNUSED)
 {
@@ -4529,7 +4529,7 @@ store_expr (tree exp, rtx target, int ca
 	}
       str_copy_len = MIN (str_copy_len, exp_len);
       if (!can_store_by_pieces (str_copy_len, builtin_strncpy_read_str,
-				(void *) TREE_STRING_POINTER (exp),
+				TREE_STRING_POINTER (exp),
 				MEM_ALIGN (target), false))
 	goto normal_expr;

@@ -4537,7 +4537,7 @@ store_expr (tree exp, rtx target, int ca

       dest_mem = store_by_pieces (dest_mem,
 				  str_copy_len, builtin_strncpy_read_str,
-				  (void *) TREE_STRING_POINTER (exp),
+				  TREE_STRING_POINTER (exp),
 				  MEM_ALIGN (target), false,
 				  exp_len > str_copy_len ? 1 : 0);
       if (exp_len > str_copy_len)
diff -rup orig/egcc-SVN20070927/gcc/expr.h egcc-SVN20070927/gcc/expr.h
--- orig/egcc-SVN20070927/gcc/expr.h	2007-08-27 23:03:15.000000000 -0400
+++ egcc-SVN20070927/gcc/expr.h	2007-09-27 21:23:54.326843589 -0400
@@ -348,7 +348,7 @@ extern void expand_builtin_setjmp_setup
 extern void expand_builtin_setjmp_receiver (rtx);
 extern rtx expand_builtin_saveregs (void);
 extern void expand_builtin_trap (void);
-extern rtx builtin_strncpy_read_str (void *, HOST_WIDE_INT, enum machine_mode);
+extern rtx builtin_strncpy_read_str (const void *, HOST_WIDE_INT, enum machine_mode);

 /* Functions from expr.c:  */

@@ -455,9 +455,9 @@ extern int can_move_by_pieces (unsigned
    MEMSETP is true if this is a real memset/bzero, not a copy
    of a const string.  */
 extern int can_store_by_pieces (unsigned HOST_WIDE_INT,
-				rtx (*) (void *, HOST_WIDE_INT,
+				rtx (*) (const void *, HOST_WIDE_INT,
 					 enum machine_mode),
-				void *, unsigned int, bool);
+				const void *, unsigned int, bool);

 /* Generate several move instructions to store LEN bytes generated by
    CONSTFUN to block TO.  (A MEM rtx with BLKmode).  CONSTFUNDATA is a
@@ -466,8 +466,8 @@ extern int can_store_by_pieces (unsigned
    MEMSETP is true if this is a real memset/bzero, not a copy.
    Returns TO + LEN.  */
 extern rtx store_by_pieces (rtx, unsigned HOST_WIDE_INT,
-			    rtx (*) (void *, HOST_WIDE_INT, enum machine_mode),
-			    void *, unsigned int, bool, int);
+			    rtx (*) (const void *, HOST_WIDE_INT, enum machine_mode),
+			    const void *, unsigned int, bool, int);

 /* Emit insns to set X from Y.  */
 extern rtx emit_move_insn (rtx, rtx);
diff -rup orig/egcc-SVN20070927/gcc/gengtype.c egcc-SVN20070927/gcc/gengtype.c
--- orig/egcc-SVN20070927/gcc/gengtype.c	2007-08-06 20:02:28.000000000 -0400
+++ egcc-SVN20070927/gcc/gengtype.c	2007-09-27 21:23:54.330859853 -0400
@@ -433,7 +433,7 @@ read_input_list (const char *listname)
 				     : lang_dir_names[langno - 1]);

 		    bmap |= curlangs;
-		    set_lang_bitmap ((char *)gt_files[i], bmap);
+		    set_lang_bitmap (CONST_CAST (char *, gt_files[i]), bmap);
 		    here = committed;
 		    goto next_line;
 		  }
@@ -1271,9 +1271,9 @@ adjust_field_type (type_p t, options_p o
 	if (params[num] != NULL)
 	  error_at_line (&lexer_line, "duplicate `%s' option", opt->name);
 	if (! ISDIGIT (opt->name[5]))
-	  params[num] = create_pointer ((type_p) opt->info);
+	  params[num] = create_pointer ((type_p)CONST_CAST (char *, opt->info));
 	else
-	  params[num] = (type_p) opt->info;
+	  params[num] = (type_p)CONST_CAST (char *, opt->info);
       }
     else if (strcmp (opt->name, "special") == 0)
       {
@@ -1322,7 +1322,8 @@ process_gc_options (options_p opt, enum
   options_p o;
   for (o = opt; o; o = o->next)
     if (strcmp (o->name, "ptr_alias") == 0 && level == GC_POINTED_TO)
-      set_gc_used_type ((type_p) o->info, GC_POINTED_TO, NULL);
+      set_gc_used_type ((type_p)CONST_CAST (char *, o->info),
+			GC_POINTED_TO, NULL);
     else if (strcmp (o->name, "maybe_undef") == 0)
       *maybe_undef = 1;
     else if (strcmp (o->name, "use_params") == 0)
diff -rup orig/egcc-SVN20070927/gcc/ggc-common.c egcc-SVN20070927/gcc/ggc-common.c
--- orig/egcc-SVN20070927/gcc/ggc-common.c	2007-08-25 11:25:45.000000000 -0400
+++ egcc-SVN20070927/gcc/ggc-common.c	2007-09-27 21:23:54.332525370 -0400
@@ -125,7 +125,8 @@ ggc_mark_roots (void)
       if (*cti->base)
 	{
 	  ggc_set_mark (*cti->base);
-	  htab_traverse_noresize (*cti->base, ggc_htab_delete, (void *) cti);
+	  htab_traverse_noresize (*cti->base, ggc_htab_delete,
+				  CONST_CAST (struct ggc_cache_tab *, cti));
 	  ggc_set_mark ((*cti->base)->entries);
 	}
 }
diff -rup orig/egcc-SVN20070927/gcc/stringpool.c egcc-SVN20070927/gcc/stringpool.c
--- orig/egcc-SVN20070927/gcc/stringpool.c	2007-07-26 23:03:59.000000000 -0400
+++ egcc-SVN20070927/gcc/stringpool.c	2007-09-27 21:23:54.333389889 -0400
@@ -197,8 +197,8 @@ gt_pch_p_S (void *obj ATTRIBUTE_UNUSED,
 void
 gt_pch_n_S (const void *x)
 {
-  gt_pch_note_object ((void *)x, (void *)x, &gt_pch_p_S,
-		      gt_types_enum_last);
+  gt_pch_note_object (CONST_CAST (void *, x), CONST_CAST (void *, x),
+		      &gt_pch_p_S, gt_types_enum_last);
 }

 /* Handle saving and restoring the string pool for PCH.  */
diff -rup orig/egcc-SVN20070927/gcc/system.h egcc-SVN20070927/gcc/system.h
--- orig/egcc-SVN20070927/gcc/system.h	2007-09-03 13:22:09.000000000 -0400
+++ egcc-SVN20070927/gcc/system.h	2007-09-27 21:23:54.334776112 -0400
@@ -793,9 +793,4 @@ extern void fancy_abort (const char *, i
 #define CONST_CAST_RTX(X) CONST_CAST(struct rtx_def *, (X))
 #define CONST_CAST_BB(X) CONST_CAST(struct basic_block_def *, (X))

-/* Activate -Wcast-qual as a warning (not an error/-Werror).  */
-#if GCC_VERSION >= 4003
-#pragma GCC diagnostic warning "-Wcast-qual"
-#endif
-
 #endif /* ! GCC_SYSTEM_H */
diff -rup orig/egcc-SVN20070927/gcc/tree-parloops.c egcc-SVN20070927/gcc/tree-parloops.c
--- orig/egcc-SVN20070927/gcc/tree-parloops.c	2007-09-15 23:02:52.000000000 -0400
+++ egcc-SVN20070927/gcc/tree-parloops.c	2007-09-27 21:23:54.336582755 -0400
@@ -80,8 +80,10 @@ struct name_to_copy_elt
 static int
 name_to_copy_elt_eq (const void *aa, const void *bb)
 {
-  struct name_to_copy_elt *a = (struct name_to_copy_elt *) aa;
-  struct name_to_copy_elt *b = (struct name_to_copy_elt *) bb;
+  const struct name_to_copy_elt *const a
+    = (const struct name_to_copy_elt *) aa;
+  const struct name_to_copy_elt *const b
+    = (const struct name_to_copy_elt *) bb;

   return a->version == b->version;
 }
@@ -89,7 +91,8 @@ name_to_copy_elt_eq (const void *aa, con
 static hashval_t
 name_to_copy_elt_hash (const void *aa)
 {
-  struct name_to_copy_elt *a = (struct name_to_copy_elt *) aa;
+  const struct name_to_copy_elt *const a
+    = (const struct name_to_copy_elt *) aa;

   return (hashval_t) a->version;
 }
diff -rup orig/egcc-SVN20070927/gcc/tree-ssa-phiopt.c egcc-SVN20070927/gcc/tree-ssa-phiopt.c
--- orig/egcc-SVN20070927/gcc/tree-ssa-phiopt.c	2007-09-10 23:06:02.000000000 -0400
+++ egcc-SVN20070927/gcc/tree-ssa-phiopt.c	2007-09-27 21:23:54.338444041 -0400
@@ -1101,7 +1101,7 @@ static struct pointer_set_t *nontrap_set
 static hashval_t
 name_to_bb_hash (const void *p)
 {
-  tree n = ((struct name_to_bb *)p)->ssa_name;
+  const_tree const n = ((const struct name_to_bb *)p)->ssa_name;
   return htab_hash_pointer (n);
 }

@@ -1110,8 +1110,8 @@ name_to_bb_hash (const void *p)
 static int
 name_to_bb_eq (const void *p1, const void *p2)
 {
-  tree n1 = ((struct name_to_bb *)p1)->ssa_name;
-  tree n2 = ((struct name_to_bb *)p2)->ssa_name;
+  const_tree const n1 = ((const struct name_to_bb *)p1)->ssa_name;
+  const_tree const n2 = ((const struct name_to_bb *)p2)->ssa_name;

   return n1 == n2;
 }
diff -rup orig/egcc-SVN20070927/gcc/tree.h egcc-SVN20070927/gcc/tree.h
--- orig/egcc-SVN20070927/gcc/tree.h	2007-09-23 23:03:09.000000000 -0400
+++ egcc-SVN20070927/gcc/tree.h	2007-09-27 21:23:54.344853535 -0400
@@ -4849,7 +4849,7 @@ extern tree std_gimplify_va_arg_expr (tr
 extern tree build_va_arg_indirect_ref (tree);
 extern tree build_string_literal (int, const char *);
 extern bool validate_arglist (const_tree, ...);
-extern rtx builtin_memset_read_str (void *, HOST_WIDE_INT, enum machine_mode);
+extern rtx builtin_memset_read_str (const void *, HOST_WIDE_INT, enum machine_mode);
 extern int get_pointer_alignment (tree, unsigned int);

 /* In convert.c */

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PING]: Add -Wcast-qual to the bootstrap warning flags [take 2]
  2007-09-29  9:38         ` [PATCH]: Add -Wcast-qual to the bootstrap warning flags [take 2] Kaveh R. GHAZI
@ 2007-10-12 13:09           ` Kaveh R. GHAZI
  0 siblings, 0 replies; 8+ messages in thread
From: Kaveh R. GHAZI @ 2007-10-12 13:09 UTC (permalink / raw)
  To: gcc-patches; +Cc: Andrew Pinski, Jakub Jelinek


Ping?
http://gcc.gnu.org/ml/gcc-patches/2007-09/msg02049.html

		Thanks,
		--Kaveh
--
Kaveh R. Ghazi			ghazi@caip.rutgers.edu

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2007-10-12 13:09 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2007-09-24  7:20 [PATCH]: Add -Wcast-qual to the bootstrap warning flags Kaveh R. GHAZI
2007-09-24  7:29 ` Steve Kargl
2007-09-24  8:31 ` Andrew Pinski
2007-09-24 15:10   ` Kaveh R. GHAZI
2007-09-24 15:56     ` Jakub Jelinek
2007-09-24 19:51       ` Kaveh R. GHAZI
2007-09-29  9:38         ` [PATCH]: Add -Wcast-qual to the bootstrap warning flags [take 2] Kaveh R. GHAZI
2007-10-12 13:09           ` [PING]: " Kaveh R. GHAZI

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).