diff --git a/gcc/system.h b/gcc/system.h index a241e1355c40..3c543a005d85 100644 --- a/gcc/system.h +++ b/gcc/system.h @@ -235,6 +235,7 @@ extern int errno; # include # include # include +# include #endif /* Some of glibc's string inlines cause warnings. Plus we'd rather diff --git a/gcc/vec.h b/gcc/vec.h index db48e979d778..6ede62791b0a 100644 --- a/gcc/vec.h +++ b/gcc/vec.h @@ -1283,9 +1283,11 @@ vec::embedded_size (unsigned alloc) { struct alignas (T) U { char data[sizeof (T)]; }; typedef vec vec_embedded; - static_assert (sizeof (vec_embedded) == sizeof(vec), ""); - static_assert (alignof (vec_embedded) == alignof(vec), ""); - return offsetof (vec_embedded, m_vecdata) + alloc * sizeof (T); + typedef typename std::conditional::value, + vec, vec_embedded>::type vec_stdlayout; + static_assert (sizeof (vec_stdlayout) == sizeof (vec), ""); + static_assert (alignof (vec_stdlayout) == alignof (vec), ""); + return offsetof (vec_stdlayout, m_vecdata) + alloc * sizeof (T); }