From 582786b6cc903797626accfebe5f7bb84c2dfeb3 Mon Sep 17 00:00:00 2001 From: Reid Kleckner 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. llvm-svn: 236244 --- llvm/docs/CodingStandards.rst | 8 +++++++- llvm/lib/CodeGen/WinEHPrepare.cpp | 8 ++++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/llvm/docs/CodingStandards.rst b/llvm/docs/CodingStandards.rst index 992939259ab9..8c8110d03321 100644 --- a/llvm/docs/CodingStandards.rst +++ b/llvm/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/llvm/lib/CodeGen/WinEHPrepare.cpp b/llvm/lib/CodeGen/WinEHPrepare.cpp index 0461d71507b0..c1067c5d5600 100644 --- a/llvm/lib/CodeGen/WinEHPrepare.cpp +++ b/llvm/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 LPadMaps; @@ -150,7 +150,7 @@ private: // 32-bit EH. DenseMap HandlerToParentFP; - AllocaInst *SEHExceptionCodeSlot; + AllocaInst *SEHExceptionCodeSlot = nullptr; }; class WinEHFrameVariableMaterializer : public ValueMaterializer {