public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH]: Fix problematic -Wcast-qual cases using new CONST_CAST  macro
@ 2007-07-27  8:15 Kaveh R. GHAZI
  2007-07-27  9:53 ` Richard Guenther
  0 siblings, 1 reply; 86+ messages in thread
From: Kaveh R. GHAZI @ 2007-07-27  8:15 UTC (permalink / raw)
  To: gcc-patches

This patch addresses problems in achieving clean -Wcast-qual results.
The issue is that there are certain legitimate situations where it is
impossible in C to avoid casting away const-ness.  Such examples IMHO
include:

1.  Passing const argv strings to execv-like functions.

2.  Initializing const allocated objects.

3.  Free'ing const objects from #2.

(It's been suggested that adding a specialized const_free(const void*)
to libiberty could hide casting away const-ness.  However that only
solves one of the above three cases.)

So I added a mechanism to system.h that uses a union cast to get
around -Wcast-qual.  I named the macro CONST_CAST(X) in honor of the
C++ operator of similar utility.

I believe all of the cases where I used it below fall into one or more
of the above three categories.

Tested on sparc-sun-solaris2.10, no regressions.  I used cc for stage1
to make sure that the non-gcc case works.  I also tested it with
gcc-3.4.6 to make sure that the union cast worked for older gcc
versions.

Okay for mainline?  (If someone approves the system.h mechanism, I'll
install the rest as obvious.)

		Thanks,
		--Kaveh


2007-07-24  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* system.h (CONST_CAST): New.
	* c-decl.c (c_make_fname_decl): Use it.
	* c-lex.c (cb_ident, lex_string): Likewise.
	* c-typeck.c (free_all_tagged_tu_seen_up_to): Likewise.
	* gcc.c (set_spec, read_specs, for_each_path, execute, do_spec_1,
	give_switch, set_multilib_dir): Likewise.
	* gengtype-parse.c (string_seq, typedef_name): Likewise.
	* passes.c (execute_one_pass): Likewise.
	* prefix.c (update_path): Likewise.
	* pretty-print.c (pp_base_destroy_prefix): Likewise.
	* tree.c (build_string): Likewise.

cp:
	* call.c (name_as_c_string): Use CONST_CAST.
	* decl.c (build_decl): Likewise.
	* parser.c (cp_parser_string_literal): Likewise.

fortran:
	* gfortranspec.c (lang_specific_driver): Use CONST_CAST.
	* options.c (gfc_post_options): Likewise.
	* parse.c (parse_omp_structured_block): Likewise.
	* st.c (gfc_free_statement): Likewise.

java:
	* jcf-parse.c (read_class, java_parse_file): Use CONST_CAST.
	* jcf.h (JCF_FINISH): Likewise.

diff -rup orig/egcc-SVN20070721/gcc/system.h egcc-SVN20070721/gcc/system.h
--- orig/egcc-SVN20070721/gcc/system.h	2007-05-03 03:14:36.000000000 -0400
+++ egcc-SVN20070721/gcc/system.h	2007-07-24 20:43:38.775320815 -0400
@@ -767,4 +767,23 @@ extern void fancy_abort (const char *, i

 #endif /* GCC >= 3.0 */

+/* This macro allows casting away const-ness to pass -Wcast-qual
+   warnings.  DO NOT USE THIS UNLESS YOU REALLY HAVE TO!  It should
+   only be used in certain specific cases.  One valid case is where
+   the C standard definitions or prototypes force you to.  E.g. if you
+   need to free a const object, or if you pass a const string to
+   execv, et al.  Another valid use would be in an allocation function
+   that creates const objects that need to be initialized.  Most other
+   cases should be viewed with extreme caution.  */
+#ifdef __GNUC__
+union gcc_constcast
+{
+  const void *cv;
+  void *v;
+};
+#define CONST_CAST(X) ((__extension__(union gcc_constcast)(const void *)(X)).v)
+#else
+#define CONST_CAST(X) ((void*)(X))
+#endif
+
 #endif /* ! GCC_SYSTEM_H */
diff -rup orig/egcc-SVN20070721/gcc/c-decl.c egcc-SVN20070721/gcc/c-decl.c
--- orig/egcc-SVN20070721/gcc/c-decl.c	2007-07-13 12:23:51.000000000 -0400
+++ egcc-SVN20070721/gcc/c-decl.c	2007-07-24 19:03:34.873245149 -0400
@@ -2812,7 +2812,7 @@ c_make_fname_decl (tree id, int type_dep
   DECL_ARTIFICIAL (decl) = 1;

   init = build_string (length + 1, name);
-  free ((char *) name);
+  free (CONST_CAST (name));
   TREE_TYPE (init) = type;
   DECL_INITIAL (decl) = init;

diff -rup orig/egcc-SVN20070721/gcc/c-lex.c egcc-SVN20070721/gcc/c-lex.c
--- orig/egcc-SVN20070721/gcc/c-lex.c	2007-07-24 18:40:58.373062728 -0400
+++ egcc-SVN20070721/gcc/c-lex.c	2007-07-24 19:05:18.535878607 -0400
@@ -187,7 +187,7 @@ cb_ident (cpp_reader * ARG_UNUSED (pfile
       if (cpp_interpret_string (pfile, str, 1, &cstr, false))
 	{
 	  ASM_OUTPUT_IDENT (asm_out_file, (const char *) cstr.text);
-	  free ((void *) cstr.text);
+	  free (CONST_CAST (cstr.text));
 	}
     }
 #endif
@@ -812,7 +812,7 @@ lex_string (const cpp_token *tok, tree *
       (parse_in, strs, concats + 1, &istr, wide))
     {
       value = build_string (istr.len, (const char *) istr.text);
-      free ((void *) istr.text);
+      free (CONST_CAST (istr.text));

       if (c_lex_string_translate == -1)
 	{
@@ -833,7 +833,7 @@ lex_string (const cpp_token *tok, tree *
 	      *valp = build_string (istr.len, (const char *) istr.text);
 	      valp = &TREE_CHAIN (*valp);
 	    }
-	  free ((void *) istr.text);
+	  free (CONST_CAST (istr.text));
 	}
     }
   else
diff -rup orig/egcc-SVN20070721/gcc/c-typeck.c egcc-SVN20070721/gcc/c-typeck.c
--- orig/egcc-SVN20070721/gcc/c-typeck.c	2007-07-24 18:40:58.444523088 -0400
+++ egcc-SVN20070721/gcc/c-typeck.c	2007-07-24 19:02:51.153971227 -0400
@@ -1027,7 +1027,7 @@ free_all_tagged_tu_seen_up_to (const str
       const struct tagged_tu_seen_cache *const tu1
 	= (const struct tagged_tu_seen_cache *) tu;
       tu = tu1->next;
-      free ((void *)tu1);
+      free (CONST_CAST (tu1));
     }
   tagged_tu_seen_base = tu_til;
 }
diff -rup orig/egcc-SVN20070721/gcc/cp/call.c egcc-SVN20070721/gcc/cp/call.c
--- orig/egcc-SVN20070721/gcc/cp/call.c	2007-07-05 23:03:38.000000000 -0400
+++ egcc-SVN20070721/gcc/cp/call.c	2007-07-24 19:47:59.090395675 -0400
@@ -5367,7 +5367,7 @@ name_as_c_string (tree name, tree type,
   if (IDENTIFIER_CTOR_OR_DTOR_P (name))
     {
       pretty_name
-	= (char *) IDENTIFIER_POINTER (constructor_name (type));
+	= (char *) CONST_CAST (IDENTIFIER_POINTER (constructor_name (type)));
       /* For a destructor, add the '~'.  */
       if (name == complete_dtor_identifier
 	  || name == base_dtor_identifier
@@ -5388,7 +5388,7 @@ name_as_c_string (tree name, tree type,
       *free_p = true;
     }
   else
-    pretty_name = (char *) IDENTIFIER_POINTER (name);
+    pretty_name = (char *) CONST_CAST (IDENTIFIER_POINTER (name));

   return pretty_name;
 }
diff -rup orig/egcc-SVN20070721/gcc/cp/decl.c egcc-SVN20070721/gcc/cp/decl.c
--- orig/egcc-SVN20070721/gcc/cp/decl.c	2007-07-24 18:40:58.457872625 -0400
+++ egcc-SVN20070721/gcc/cp/decl.c	2007-07-24 19:49:09.242333435 -0400
@@ -3369,7 +3369,7 @@ cp_make_fname_decl (tree id, int type_de
   tree decl = build_decl (VAR_DECL, id, type);

   if (name)
-    free ((char *) name);
+    free (CONST_CAST (name));

   /* As we're using pushdecl_with_scope, we must set the context.  */
   DECL_CONTEXT (decl) = current_function_decl;
diff -rup orig/egcc-SVN20070721/gcc/cp/parser.c egcc-SVN20070721/gcc/cp/parser.c
--- orig/egcc-SVN20070721/gcc/cp/parser.c	2007-07-13 12:23:18.000000000 -0400
+++ egcc-SVN20070721/gcc/cp/parser.c	2007-07-24 19:55:10.357909872 -0400
@@ -2919,8 +2919,8 @@ cp_parser_string_literal (cp_parser *par
   if ((translate ? cpp_interpret_string : cpp_interpret_string_notranslate)
       (parse_in, strs, count, &istr, wide))
     {
-      value = build_string (istr.len, (char *)istr.text);
-      free ((void *)istr.text);
+      value = build_string (istr.len, (const char *)istr.text);
+      free (CONST_CAST (istr.text));

       TREE_TYPE (value) = wide ? wchar_array_type_node : char_array_type_node;
       value = fix_string_type (value);
diff -rup orig/egcc-SVN20070721/gcc/fortran/gfortranspec.c egcc-SVN20070721/gcc/fortran/gfortranspec.c
--- orig/egcc-SVN20070721/gcc/fortran/gfortranspec.c	2007-06-27 19:45:34.000000000 -0400
+++ egcc-SVN20070721/gcc/fortran/gfortranspec.c	2007-07-24 19:06:28.868883584 -0400
@@ -303,7 +303,7 @@ lang_specific_driver (int *in_argc, cons
   g77_xargc = argc;
   g77_xargv = argv;
   g77_newargc = 0;
-  g77_newargv = (const char **) argv;
+  g77_newargv = (const char **) CONST_CAST (argv);

   /* First pass through arglist.

diff -rup orig/egcc-SVN20070721/gcc/fortran/options.c egcc-SVN20070721/gcc/fortran/options.c
--- orig/egcc-SVN20070721/gcc/fortran/options.c	2007-07-15 23:02:34.000000000 -0400
+++ egcc-SVN20070721/gcc/fortran/options.c	2007-07-24 19:44:53.904878737 -0400
@@ -240,7 +240,7 @@ gfc_post_options (const char **pfilename
     gfc_add_include_path (".", true);

   if (canon_source_file != gfc_source_file)
-    gfc_free ((void *) canon_source_file);
+    gfc_free (CONST_CAST (canon_source_file));

   /* Decide which form the file will be read in as.  */

diff -rup orig/egcc-SVN20070721/gcc/fortran/parse.c egcc-SVN20070721/gcc/fortran/parse.c
--- orig/egcc-SVN20070721/gcc/fortran/parse.c	2007-07-14 23:02:20.000000000 -0400
+++ egcc-SVN20070721/gcc/fortran/parse.c	2007-07-24 19:43:56.383053875 -0400
@@ -2609,7 +2609,7 @@ parse_omp_structured_block (gfc_statemen
 	      && strcmp (cp->ext.omp_name, new_st.ext.omp_name) != 0))
 	gfc_error ("Name after !$omp critical and !$omp end critical does "
 		   "not match at %C");
-      gfc_free ((char *) new_st.ext.omp_name);
+      gfc_free (CONST_CAST (new_st.ext.omp_name));
       break;
     case EXEC_OMP_END_SINGLE:
       cp->ext.omp_clauses->lists[OMP_LIST_COPYPRIVATE]
diff -rup orig/egcc-SVN20070721/gcc/fortran/st.c egcc-SVN20070721/gcc/fortran/st.c
--- orig/egcc-SVN20070721/gcc/fortran/st.c	2007-01-20 20:01:25.000000000 -0500
+++ egcc-SVN20070721/gcc/fortran/st.c	2007-07-24 19:42:59.565302777 -0400
@@ -174,7 +174,7 @@ gfc_free_statement (gfc_code *p)
       break;

     case EXEC_OMP_CRITICAL:
-      gfc_free ((char *) p->ext.omp_name);
+      gfc_free (CONST_CAST (p->ext.omp_name));
       break;

     case EXEC_OMP_FLUSH:
diff -rup orig/egcc-SVN20070721/gcc/gcc.c egcc-SVN20070721/gcc/gcc.c
--- orig/egcc-SVN20070721/gcc/gcc.c	2007-06-27 19:46:07.000000000 -0400
+++ egcc-SVN20070721/gcc/gcc.c	2007-07-24 19:00:24.586507520 -0400
@@ -1877,7 +1877,7 @@ set_spec (const char *name, const char *

   /* Free the old spec.  */
   if (old_spec && sl->alloc_p)
-    free ((void *) old_spec);
+    free (CONST_CAST(old_spec));

   sl->alloc_p = 1;
 }
@@ -2182,7 +2182,7 @@ read_specs (const char *filename, int ma

 	      set_spec (p2, *(sl->ptr_spec));
 	      if (sl->alloc_p)
-		free ((void *) *(sl->ptr_spec));
+		free (CONST_CAST (*(sl->ptr_spec)));

 	      *(sl->ptr_spec) = "";
 	      sl->alloc_p = 0;
@@ -2532,18 +2532,18 @@ for_each_path (const struct path_prefix
 	 Don't repeat any we have already seen.  */
       if (multi_dir)
 	{
-	  free ((char *) multi_dir);
+	  free (CONST_CAST (multi_dir));
 	  multi_dir = NULL;
-	  free ((char *) multi_suffix);
+	  free (CONST_CAST (multi_suffix));
 	  multi_suffix = machine_suffix;
-	  free ((char *) just_multi_suffix);
+	  free (CONST_CAST (just_multi_suffix));
 	  just_multi_suffix = just_machine_suffix;
 	}
       else
 	skip_multi_dir = true;
       if (multi_os_dir)
 	{
-	  free ((char *) multi_os_dir);
+	  free (CONST_CAST (multi_os_dir));
 	  multi_os_dir = NULL;
 	}
       else
@@ -2552,12 +2552,12 @@ for_each_path (const struct path_prefix

   if (multi_dir)
     {
-      free ((char *) multi_dir);
-      free ((char *) multi_suffix);
-      free ((char *) just_multi_suffix);
+      free (CONST_CAST (multi_dir));
+      free (CONST_CAST (multi_suffix));
+      free (CONST_CAST (just_multi_suffix));
     }
   if (multi_os_dir)
-    free ((char *) multi_os_dir);
+    free (CONST_CAST (multi_os_dir));
   if (ret != path)
     free (path);
   return ret;
@@ -2964,7 +2964,7 @@ execute (void)
       errmsg = pex_run (pex,
 			((i + 1 == n_commands ? PEX_LAST : 0)
 			 | (string == commands[i].prog ? PEX_SEARCH : 0)),
-			string, (char * const *) commands[i].argv,
+			string, (char * const *) CONST_CAST (commands[i].argv),
 			NULL, NULL, &err);
       if (errmsg != NULL)
 	{
@@ -2978,7 +2978,7 @@ execute (void)
 	}

       if (string != commands[i].prog)
-	free ((void *) string);
+	free (CONST_CAST (string));
     }

   execution_count++;
@@ -5042,7 +5042,7 @@ do_spec_1 (const char *spec, int inswitc
                   for (i = 0, j = 0; i < max; i++)
                     if (outfiles[i])
                       {
-                        argv[j] = (char *) outfiles[i];
+                        argv[j] = (char *) CONST_CAST (outfiles[i]);
                         j++;
                       }
                   argv[j] = NULL;
@@ -6018,13 +6018,13 @@ give_switch (int switchnum, int omit_fir
 	      while (length-- && !IS_DIR_SEPARATOR (arg[length]))
 		if (arg[length] == '.')
 		  {
-		    ((char *)arg)[length] = 0;
+		    ((char *)CONST_CAST(arg))[length] = 0;
 		    dot = 1;
 		    break;
 		  }
 	      do_spec_1 (arg, 1, NULL);
 	      if (dot)
-		((char *)arg)[length] = '.';
+		((char *)CONST_CAST(arg))[length] = '.';
 	      do_spec_1 (suffix_subst, 1, NULL);
 	    }
 	  else
@@ -7477,7 +7477,7 @@ set_multilib_dir (void)
   if (multilib_dir == NULL && multilib_os_dir != NULL
       && strcmp (multilib_os_dir, ".") == 0)
     {
-      free ((char *) multilib_os_dir);
+      free (CONST_CAST (multilib_os_dir));
       multilib_os_dir = NULL;
     }
   else if (multilib_dir != NULL && multilib_os_dir == NULL)
diff -rup orig/egcc-SVN20070721/gcc/gengtype-parse.c egcc-SVN20070721/gcc/gengtype-parse.c
--- orig/egcc-SVN20070721/gcc/gengtype-parse.c	2007-03-26 20:02:43.000000000 -0500
+++ egcc-SVN20070721/gcc/gengtype-parse.c	2007-07-24 20:20:11.483830545 -0400
@@ -198,9 +198,9 @@ string_seq (void)

       l1 = strlen (s1);
       l2 = strlen (s2);
-      buf = XRESIZEVEC (char, s1, l1 + l2 + 1);
+      buf = XRESIZEVEC (char, CONST_CAST(s1), l1 + l2 + 1);
       memcpy (buf + l1, s2, l2 + 1);
-      XDELETE (s2);
+      XDELETE (CONST_CAST (s2));
       s1 = buf;
     }
   return s1;
@@ -222,8 +222,8 @@ typedef_name (void)
       c2 = require (ID);
       require (')');
       r = concat ("VEC_", c1, "_", c2, (char *)0);
-      free ((void *)c1);
-      free ((void *)c2);
+      free (CONST_CAST (c1));
+      free (CONST_CAST (c2));
       return r;
     }
   else
diff -rup orig/egcc-SVN20070721/gcc/java/jcf-parse.c egcc-SVN20070721/gcc/java/jcf-parse.c
--- orig/egcc-SVN20070721/gcc/java/jcf-parse.c	2007-07-24 18:40:58.550054291 -0400
+++ egcc-SVN20070721/gcc/java/jcf-parse.c	2007-07-24 19:36:28.693654939 -0400
@@ -1302,7 +1302,7 @@ read_class (tree name)
       if (path_name == 0)
 	return 0;
       else
-	free((char *) path_name);
+	free(CONST_CAST (path_name));
     }

   current_jcf = jcf;
@@ -1784,7 +1784,7 @@ java_parse_file (int set_yydebug ATTRIBU
       file_list = list;
     }
   else
-    list = (char *) main_input_filename;
+    list = (char *) CONST_CAST (main_input_filename);

   while (list)
     {
diff -rup orig/egcc-SVN20070721/gcc/java/jcf.h egcc-SVN20070721/gcc/java/jcf.h
--- orig/egcc-SVN20070721/gcc/java/jcf.h	2007-01-13 20:02:03.000000000 -0500
+++ egcc-SVN20070721/gcc/java/jcf.h	2007-07-24 19:33:07.494933312 -0400
@@ -165,8 +165,8 @@ typedef struct JCF GTY(()) {
 #define JCF_FINISH(JCF) { \
   CPOOL_FINISH(&(JCF)->cpool); \
   if ((JCF)->buffer) free ((JCF)->buffer); \
-  if ((JCF)->filename) free ((char *) (JCF)->filename); \
-  if ((JCF)->classname) free ((char *) (JCF)->classname); \
+  if ((JCF)->filename) free (CONST_CAST ((JCF)->filename)); \
+  if ((JCF)->classname) free (CONST_CAST ((JCF)->classname)); \
   (JCF)->finished = 1; }

 #define CPOOL_INIT(CPOOL) \
diff -rup orig/egcc-SVN20070721/gcc/passes.c egcc-SVN20070721/gcc/passes.c
--- orig/egcc-SVN20070721/gcc/passes.c	2007-07-13 12:23:53.000000000 -0400
+++ egcc-SVN20070721/gcc/passes.c	2007-07-24 19:02:17.091278504 -0400
@@ -1153,7 +1153,7 @@ execute_one_pass (struct tree_opt_pass *
   /* Flush and close dump file.  */
   if (dump_file_name)
     {
-      free ((char *) dump_file_name);
+      free (CONST_CAST (dump_file_name));
       dump_file_name = NULL;
     }

diff -rup orig/egcc-SVN20070721/gcc/prefix.c egcc-SVN20070721/gcc/prefix.c
--- orig/egcc-SVN20070721/gcc/prefix.c	2006-01-23 00:24:19.000000000 -0500
+++ egcc-SVN20070721/gcc/prefix.c	2007-07-24 20:05:13.775595567 -0400
@@ -267,7 +267,7 @@ update_path (const char *path, const cha

       result = concat (key, &path[len], NULL);
       if (free_key)
-	free ((char *) key);
+	free (CONST_CAST (key));
       result = translate_name (result);
     }
   else
diff -rup orig/egcc-SVN20070721/gcc/pretty-print.c egcc-SVN20070721/gcc/pretty-print.c
--- orig/egcc-SVN20070721/gcc/pretty-print.c	2006-01-31 15:37:18.000000000 -0500
+++ egcc-SVN20070721/gcc/pretty-print.c	2007-07-24 20:04:22.383432306 -0400
@@ -634,7 +634,7 @@ pp_base_destroy_prefix (pretty_printer *
 {
   if (pp->prefix != NULL)
     {
-      free ((char *) pp->prefix);
+      free (CONST_CAST (pp->prefix));
       pp->prefix = NULL;
     }
 }
diff -rup orig/egcc-SVN20070721/gcc/tree.c egcc-SVN20070721/gcc/tree.c
--- orig/egcc-SVN20070721/gcc/tree.c	2007-07-24 18:40:58.728953172 -0400
+++ egcc-SVN20070721/gcc/tree.c	2007-07-24 20:39:42.541854067 -0400
@@ -1177,8 +1177,8 @@ build_string (int len, const char *str)
   TREE_CONSTANT (s) = 1;
   TREE_INVARIANT (s) = 1;
   TREE_STRING_LENGTH (s) = len;
-  memcpy ((char *) TREE_STRING_POINTER (s), str, len);
-  ((char *) TREE_STRING_POINTER (s))[len] = '\0';
+  memcpy (CONST_CAST (TREE_STRING_POINTER (s)), str, len);
+  ((char *) CONST_CAST (TREE_STRING_POINTER (s)))[len] = '\0';

   return s;
 }

^ permalink raw reply	[flat|nested] 86+ messages in thread
* Re: Add a __nowarn__ keyword
@ 2007-08-10  9:48 Paolo Bonzini
  2007-08-10 16:53 ` Gabriel Dos Reis
  0 siblings, 1 reply; 86+ messages in thread
From: Paolo Bonzini @ 2007-08-10  9:48 UTC (permalink / raw)
  To: GCC Patches

[sorry for breaking the thread]

> +  if (strcmp (kind_string, "push") == 0)
> +    {
> +      stack = (diagnostic_stack_entry_t *) xmalloc (sizeof (diagnostic_stack_entry_t));
> +      stack->previous = diagnostic_stack;
> +      stack->state = diagnostic_save_classifications (global_dc);
> +      diagnostic_stack = stack;
> +      return;
> +    }

> If yes, is the "push" necessary?  Can we make it implicit?

We could have something like this:

     if (memcmp (kind_string, "push", 4) == 0
         && (kind_string[4] == '\0' || ISSPACE (kind_string[4])))
       {
         ...
         diagnostic_stack = stack;
         kind_string += 4;
         while (ISSPACE (*kind_string))
           kind_string++;
         if (*kind_string == '\0')
           return;
       }

which allows both

#pragma GCC diagnostics push

and

#pragma GCC diagnostics push ignore "-Wcast-qual"

Paolo

^ permalink raw reply	[flat|nested] 86+ messages in thread
* Re: Add a __nowarn__ keyword
@ 2007-08-10 21:52 FX Coudert
  2007-08-10 22:13 ` Kaveh R. GHAZI
  0 siblings, 1 reply; 86+ messages in thread
From: FX Coudert @ 2007-08-10 21:52 UTC (permalink / raw)
  To: gcc-patches list, GNU Fortran; +Cc: Kaveh R. GHAZI

Hi Kaveh,

I just want to ask that patches touching Fortran areas (front-end,  
libgfortran, testsuite) be CCed to the fortran mailing-list, which  
allows us to keep track of what is changed before (or when) it  
happens, rather than having to search through mailing-list archives  
when you discover something new in the code (like happened to me  
tonight). Most (all?) if us don't read gcc-patches on a regular basis.

Thanks,
FX

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

end of thread, other threads:[~2009-11-23 23:27 UTC | newest]

Thread overview: 86+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2007-07-27  8:15 [PATCH]: Fix problematic -Wcast-qual cases using new CONST_CAST macro Kaveh R. GHAZI
2007-07-27  9:53 ` Richard Guenther
2007-07-27 17:24   ` Kaveh R. GHAZI
2007-07-27 19:32     ` Richard Guenther
2007-07-27 19:37       ` Kaveh R. GHAZI
2007-07-27 20:28         ` Gabriel Dos Reis
2007-08-03 14:19         ` Kaveh R. GHAZI
2007-08-03 18:07           ` Gabriel Dos Reis
2007-08-06  0:19             ` Mark Mitchell
2007-08-06  0:32               ` Gabriel Dos Reis
2007-08-06  4:42                 ` Kaveh R. GHAZI
2007-08-06  5:23                   ` Mark Mitchell
2007-08-06 14:09                     ` Kaveh R. GHAZI
2007-08-06 15:33                       ` Gabriel Dos Reis
2007-08-06 17:59                         ` Kaveh R. GHAZI
2007-08-06 18:11                           ` DJ Delorie
2007-08-06 18:23                             ` Gabriel Dos Reis
2007-08-06 18:18                           ` Gabriel Dos Reis
2007-08-06 15:44                       ` Mark Mitchell
2007-08-08  5:04                         ` Add a __nowarn__ keyword Kaveh R. GHAZI
2007-08-08  8:52                           ` Manuel López-Ibáñez
2007-08-08  9:04                             ` Gabriel Dos Reis
2007-08-08 13:06                               ` Kaveh R. GHAZI
2007-08-08 13:16                                 ` Gabriel Dos Reis
2007-08-08 13:48                                   ` Kaveh R. GHAZI
2007-08-08 13:58                                     ` Paolo Bonzini
2007-08-10  1:42                                       ` Gabriel Dos Reis
2007-08-08 14:29                                     ` Manuel López-Ibáñez
2007-08-08 15:25                                       ` Daniel Jacobowitz
2007-08-08 16:35                                       ` Paolo Bonzini
2007-08-08 19:31                                         ` Kaveh R. GHAZI
2007-08-08 19:42                                           ` Gabriel Dos Reis
2007-08-08 20:22                                             ` Paolo Bonzini
2007-08-08 19:51                                           ` DJ Delorie
2007-08-08 22:41                                             ` Kaveh R. GHAZI
2007-08-08 22:54                                               ` DJ Delorie
2007-08-09  2:36                                                 ` Kaveh R. GHAZI
2007-08-09 13:40                                                   ` Daniel Jacobowitz
2007-08-09 14:19                                                     ` Kaveh R. GHAZI
2007-08-09 14:30                                                       ` Daniel Jacobowitz
2007-08-09 15:05                                                         ` Manuel López-Ibáñez
2007-08-09 15:15                                                           ` Daniel Jacobowitz
2007-08-09 15:31                                                           ` DJ Delorie
2007-08-09 22:23                                                             ` Mark Mitchell
2007-08-09 22:43                                                               ` Kaveh R. GHAZI
2007-08-10  1:52                                                                 ` Gabriel Dos Reis
2007-08-10 16:42                                                                 ` Mark Mitchell
2007-08-10  1:50                                                               ` Gabriel Dos Reis
2007-08-10  2:02                                                                 ` DJ Delorie
2007-08-10  3:09                                                                   ` Gabriel Dos Reis
2007-08-10  3:28                                                                     ` DJ Delorie
2007-08-10  3:44                                                                       ` Gabriel Dos Reis
2007-08-10  4:00                                                                         ` DJ Delorie
2007-08-10  4:12                                                                           ` Gabriel Dos Reis
2007-08-10  4:23                                                                             ` DJ Delorie
2007-08-10 13:24                                                                               ` Gabriel Dos Reis
2007-08-10 18:40                                                                             ` DJ Delorie
2007-08-11 19:19                                                                               ` Joseph S. Myers
2007-08-13 18:36                                                                                 ` DJ Delorie
2007-08-21  3:24                                                                                 ` DJ Delorie
2009-11-21 12:24                                                                                   ` Magnus Fromreide
2009-11-23 16:40                                                                                     ` Manuel López-Ibáñez
2009-11-23 23:28                                                                                     ` DJ Delorie
2007-08-10 19:05                                                                             ` DJ Delorie
2007-08-10 10:04                                                                       ` Manuel López-Ibáñez
2007-08-10 18:46                                                                         ` DJ Delorie
2007-08-09 15:21                                                         ` Kaveh R. GHAZI
2007-08-09 16:48                                                           ` Paolo Bonzini
2007-08-09 20:04                                                   ` Ian Lance Taylor
2007-08-09 20:40                                                     ` DJ Delorie
2007-08-10  1:47                                                   ` Gabriel Dos Reis
2007-08-09 14:41                                           ` Manuel López-Ibáñez
2007-08-09 16:36                                             ` Gabriel Dos Reis
2007-08-09 23:14                                               ` Kaveh R. GHAZI
2007-08-09 22:55                                             ` Kaveh R. GHAZI
2007-08-10  3:18                                               ` Kaveh R. GHAZI
2007-08-10  3:25                                                 ` Gabriel Dos Reis
2007-08-08 12:56                             ` Kaveh R. GHAZI
2007-08-08 14:05                               ` Manuel López-Ibáñez
2007-08-10  9:48 Paolo Bonzini
2007-08-10 16:53 ` Gabriel Dos Reis
2007-08-10 18:20   ` DJ Delorie
2007-08-10 18:40     ` Kaveh R. GHAZI
2007-08-10 18:52       ` DJ Delorie
2007-08-10 21:52 FX Coudert
2007-08-10 22:13 ` 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).