Googletest export
Launder buffer before reference In GCC, directly casting the Buffer reference to another type results in strict-aliasing violation errors. This launders the reference using an intermediate pointer prior to creating the new reference. PiperOrigin-RevId: 350809323
This commit is contained in:
parent
c13c27a513
commit
50ce520161
@ -421,7 +421,11 @@ class MatcherBase : private MatcherDescriberInterface {
|
||||
template <typename M, bool = IsInlined<M>()>
|
||||
struct ValuePolicy {
|
||||
static const M& Get(const MatcherBase& m) {
|
||||
return reinterpret_cast<const M&>(m.buffer_);
|
||||
// When inlined along with Init, need to be explicit to avoid violating
|
||||
// strict aliasing rules.
|
||||
const M *ptr = static_cast<const M*>(
|
||||
static_cast<const void*>(&m.buffer_));
|
||||
return *ptr;
|
||||
}
|
||||
static void Init(MatcherBase& m, M impl) {
|
||||
::new (static_cast<void*>(&m.buffer_)) M(impl);
|
||||
|
Loading…
Reference in New Issue
Block a user