From 1ed169d8a157cbc5c0339aee3f7376fd078e7249 Mon Sep 17 00:00:00 2001 From: Reid Kleckner <reid@kleckner.net> Date: Thu, 30 Apr 2015 18:17:12 +0000 Subject: [PATCH] Add a note about permitting default member initializers Use them in WinEHPrepare so that we can spot any toolchain bugs that come up. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@236244 91177308-0d34-0410-b5e6-96231b3b80d8 --- docs/CodingStandards.rst | 8 +++++++- lib/CodeGen/WinEHPrepare.cpp | 8 ++++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/docs/CodingStandards.rst b/docs/CodingStandards.rst index 992939259ab..8c8110d0332 100644 --- a/docs/CodingStandards.rst +++ b/docs/CodingStandards.rst @@ -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 diff --git a/lib/CodeGen/WinEHPrepare.cpp b/lib/CodeGen/WinEHPrepare.cpp index 0461d71507b..c1067c5d560 100644 --- a/lib/CodeGen/WinEHPrepare.cpp +++ b/lib/CodeGen/WinEHPrepare.cpp @@ -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 { -- 2.34.1