OSDN Git Service

2010-06-11 Kai Tietz <kai.tietz@onevision.com>
authorktietz <ktietz@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 11 Jun 2010 08:14:33 +0000 (08:14 +0000)
committerktietz <ktietz@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 11 Jun 2010 08:14:33 +0000 (08:14 +0000)
        * 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

gcc/ChangeLog
gcc/system.h

index a2d9255..6f9de31 100644 (file)
@@ -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.
index 085df7d..29b7cd2 100644 (file)
@@ -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