From: ktietz Date: Fri, 11 Jun 2010 08:14:33 +0000 (+0000) Subject: 2010-06-11 Kai Tietz X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a3290c827e344c18e56076bb0e249a48ae72d369;p=thirdparty%2Fgcc.git 2010-06-11 Kai Tietz * 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@160598 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a2d92558577c..6f9de31d9959 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2010-06-11 Kai Tietz + + * 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 * doc/md.texi: Document the "unspec" and "unspecv" enum names. diff --git a/gcc/system.h b/gcc/system.h index 085df7d4e9b5..29b7cd230506 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