workaround a GCC 3.3 bug observed on OpenBSD.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@54002
91177308-0d34-0410-b5e6-
96231b3b80d8
///
template<typename Ty>
Ty *getInfo() {
- if (!MFInfo) MFInfo = new (Allocator.Allocate<Ty>()) Ty(*this);
+ if (!MFInfo) {
+ // This should be just `new (Allocator.Allocate<Ty>()) Ty(*this)', but
+ // that apparently breaks GCC 3.3.
+ Ty *Loc = static_cast<Ty*>(Allocator.Allocate(sizeof(Ty),
+ AlignOf<Ty>::Alignment));
+ MFInfo = new (Loc) Ty(*this);
+ }
assert((void*)dynamic_cast<Ty*>(MFInfo) == (void*)MFInfo &&
"Invalid concrete type or multiple inheritence for getInfo");