Add a note about permitting default member initializers

Use them in WinEHPrepare so that we can spot any toolchain bugs that
come up.

llvm-svn: 236244
This commit is contained in:
Reid Kleckner 2015-04-30 18:17:12 +00:00
parent 738c55d5f4
commit 582786b6cc
2 changed files with 11 additions and 5 deletions

View File

@ -131,6 +131,12 @@ unlikely to be supported by our host compilers.
cannot synthesize them.
* Initializer lists: N2627_
* Delegating constructors: N1986_
* Default member initializers (non-static data member initializers): N2756_
* Only use these for scalar members that would otherwise be left
uninitialized. Non-scalar members generally have appropriate default
constructors, and MSVC 2013 has problems when braced initializer lists are
involved.
.. _N2118: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2118.html
.. _N2439: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2439.htm
@ -156,7 +162,7 @@ unlikely to be supported by our host compilers.
.. _N2346: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2346.htm
.. _N2627: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2672.htm
.. _N1986: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1986.pdf
.. _MSVC-compatible RTTI: http://llvm.org/PR18951
.. _N2756: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2756.htm
The supported features in the C++11 standard libraries are less well tracked,
but also much greater. Most of the standard libraries implement most of C++11's

View File

@ -72,7 +72,7 @@ class WinEHPrepare : public FunctionPass {
public:
static char ID; // Pass identification, replacement for typeid.
WinEHPrepare(const TargetMachine *TM = nullptr)
: FunctionPass(ID), DT(nullptr), SEHExceptionCodeSlot(nullptr) {
: FunctionPass(ID) {
if (TM)
TheTriple = Triple(TM->getTargetTriple());
}
@ -119,8 +119,8 @@ private:
Triple TheTriple;
// All fields are reset by runOnFunction.
DominatorTree *DT;
EHPersonality Personality;
DominatorTree *DT = nullptr;
EHPersonality Personality = EHPersonality::Unknown;
CatchHandlerMapTy CatchHandlerMap;
CleanupHandlerMapTy CleanupHandlerMap;
DenseMap<const LandingPadInst *, LandingPadMap> LPadMaps;
@ -150,7 +150,7 @@ private:
// 32-bit EH.
DenseMap<Function *, Value *> HandlerToParentFP;
AllocaInst *SEHExceptionCodeSlot;
AllocaInst *SEHExceptionCodeSlot = nullptr;
};
class WinEHFrameVariableMaterializer : public ValueMaterializer {