summaryrefslogtreecommitdiff
path: root/gcc/system.h
diff options
context:
space:
mode:
authorghazi <ghazi@138bc75d-0d04-0410-961f-82ee72b054a4>2007-08-10 17:53:58 +0000
committerghazi <ghazi@138bc75d-0d04-0410-961f-82ee72b054a4>2007-08-10 17:53:58 +0000
commitc21f4fcd059e1d9644062d61ef5eefc6bcdd177c (patch)
tree53bd7b9b59c9d1379b40355a4bdf1833b81d993b /gcc/system.h
parente7ec31c68b6ee397a45f772acf55485d5d21f30b (diff)
downloadgcc-c21f4fcd059e1d9644062d61ef5eefc6bcdd177c.tar.gz
* 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@127344 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/system.h')
-rw-r--r--gcc/system.h14
1 files changed, 14 insertions, 0 deletions
diff --git a/gcc/system.h b/gcc/system.h
index b96205b7dd1..46da3817d80 100644
--- a/gcc/system.h
+++ b/gcc/system.h
@@ -766,4 +766,18 @@ extern void fancy_abort (const char *, int, const char *) ATTRIBUTE_NORETURN;
#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__
+#define CONST_CAST(X) ((__extension__(union {__typeof(X)_q; void *_v;})(X))._v)
+#else
+#define CONST_CAST(X) ((void*)(X))
+#endif
+
#endif /* ! GCC_SYSTEM_H */