OSDN Git Service

* vec.h (VEC_BASE): If base is at offset 0 in the structure,
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 10 Nov 2011 15:40:34 +0000 (15:40 +0000)
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 10 Nov 2011 15:40:34 +0000 (15:40 +0000)
use &(P)->base even if P is NULL.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@181258 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/vec.h

index faea63a..8651536 100644 (file)
@@ -1,5 +1,8 @@
 2011-11-10  Jakub Jelinek  <jakub@redhat.com>
 
+       * vec.h (VEC_BASE): If base is at offset 0 in the structure,
+       use &(P)->base even if P is NULL.
+
        PR rtl-optimization/51023
        * combine.c (simplify_comparison) <case SIGN_EXTEND>: Don't use
        val_signbit_known_clear_p for signed comparison narrowing
index 789e8e2..d477958 100644 (file)
--- a/gcc/vec.h
+++ b/gcc/vec.h
@@ -549,7 +549,12 @@ typedef struct VEC(T,A)                                                      \
 } VEC(T,A)
 
 /* Convert to base type.  */
+#if GCC_VERSION >= 4000
+#define VEC_BASE(P) \
+  ((offsetof (__typeof (*P), base) == 0 || (P)) ? &(P)->base : 0)
+#else
 #define VEC_BASE(P)  ((P) ? &(P)->base : 0)
+#endif
 
 /* Vector of integer-like object.  */
 #define DEF_VEC_I(T)                                                     \