diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/system.h | 14 |
2 files changed, 21 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a2d9255..6f9de31 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2010-06-11 Kai Tietz <kai.tietz@onevision.com> + + * system.h (helper_const_non_const_cast): New inline for + gcc version <= 4.0. + (CONST_CAST2): For gcc version <= 4.0 use + new helper to do const/non-const casting. + 2010-06-10 Richard Sandiford <rdsandiford@googlemail.com> * doc/md.texi: Document the "unspec" and "unspecv" enum names. diff --git a/gcc/system.h b/gcc/system.h index 085df7d..29b7cd2 100644 --- a/gcc/system.h +++ b/gcc/system.h @@ -834,6 +834,20 @@ extern void fancy_abort (const char *, int, const char *) ATTRIBUTE_NORETURN; /* GCC 4.0.x has a bug where it may ICE on this expression, so does GCC 3.4.x (PR17436). */ #define CONST_CAST2(TOTYPE,FROMTYPE,X) ((__extension__(union {FROMTYPE _q; TOTYPE _nq;})(X))._nq) +#elif defined(__GNUC__) +static inline char * +helper_const_non_const_cast (const char *p) +{ + union { + const char *const_c; + char *c; + } val; + val.const_c = p; + return val.c; +} + +#define CONST_CAST2(TOTYPE,FROMTYPE,X) \ + ((TOTYPE) helper_const_non_const_cast ((const char *) (FROMTYPE) (X))) #else #define CONST_CAST2(TOTYPE,FROMTYPE,X) ((TOTYPE)(FROMTYPE)(X)) #endif |