diff options
author | ghazi <ghazi@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-08-10 17:53:58 +0000 |
---|---|---|
committer | ghazi <ghazi@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-08-10 17:53:58 +0000 |
commit | c21f4fcd059e1d9644062d61ef5eefc6bcdd177c (patch) | |
tree | 53bd7b9b59c9d1379b40355a4bdf1833b81d993b /gcc/system.h | |
parent | e7ec31c68b6ee397a45f772acf55485d5d21f30b (diff) | |
download | gcc-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.h | 14 |
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 */ |