Implement value initialization in InitializationSequence; untested
WIP, yet again.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@91368 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Sema/SemaInit.h b/lib/Sema/SemaInit.h
index 2c05196..2d4b01f 100644
--- a/lib/Sema/SemaInit.h
+++ b/lib/Sema/SemaInit.h
@@ -269,7 +269,7 @@
/// \brief Retrieve the source range that covers the initialization.
SourceRange getRange() const {
- return SourceRange(Locations[0], Locations[1]);
+ return SourceRange(Locations[0], Locations[2]);
}
/// \brief Retrieve the location of the equal sign for copy initialization
@@ -293,6 +293,9 @@
class InitializationSequence {
public:
/// \brief Describes the kind of initialization sequence computed.
+ ///
+ /// FIXME: Much of this information is in the initialization steps... why is
+ /// it duplicated here?
enum SequenceKind {
/// \brief A failed initialization sequence. The failure kind tells what
/// happened.
@@ -313,7 +316,10 @@
ReferenceBinding,
/// \brief List initialization
- ListInitialization
+ ListInitialization,
+
+ /// \brief Zero-initialization.
+ ZeroInitialization
};
/// \brief Describes the kind of a particular step in an initialization
@@ -342,7 +348,9 @@
/// \brief Perform list-initialization
SK_ListInitialization,
/// \brief Perform initialization via a constructor.
- SK_ConstructorInitialization
+ SK_ConstructorInitialization,
+ /// \brief Zero-initialize the object
+ SK_ZeroInitialization
};
/// \brief A single step in the initialization sequence.
@@ -536,9 +544,12 @@
/// \brief Add a list-initialiation step
void AddListInitializationStep(QualType T);
- /// \brief Add a a constructor-initialization step.
+ /// \brief Add a constructor-initialization step.
void AddConstructorInitializationStep(CXXConstructorDecl *Constructor,
QualType T);
+
+ /// \brief Add a zero-initialization step.
+ void AddZeroInitializationStep(QualType T);
/// \brief Note that this initialization sequence failed.
void SetFailed(FailureKind Failure) {