Apply a patch from Mahadevan R, with minor formatting changes, to

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
This commit is contained in:
Dan Gohman 2008-07-25 00:36:05 +00:00
parent 8b4588fa64
commit 219c7905c5

View File

@ -136,7 +136,13 @@ public:
///
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");