Move initialization via initializer list over to InitializationSequences.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@91050 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Sema/SemaInit.h b/lib/Sema/SemaInit.h
index 85aa421..debb0de 100644
--- a/lib/Sema/SemaInit.h
+++ b/lib/Sema/SemaInit.h
@@ -1,4 +1,4 @@
-//===--- SemaInit.h - Semantic Analysis for Initializers ------------------===//
+//===--- SemaInit.h - Semantic Analysis for Initializers --------*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
@@ -304,7 +304,10 @@
DependentSequence,
/// \brief A reference binding.
- ReferenceBinding
+ ReferenceBinding,
+
+ /// \brief List initialization
+ ListInitialization
};
/// \brief Describes the kind of a particular step in an initialization
@@ -329,7 +332,9 @@
/// \brief Perform a qualification conversion, producing an lvalue.
SK_QualificationConversionLValue,
/// \brief Perform an implicit conversion sequence.
- SK_ConversionSequence
+ SK_ConversionSequence,
+ /// \brief Perform list-initialization
+ SK_ListInitialization
};
/// \brief A single step in the initialization sequence.
@@ -388,7 +393,14 @@
/// \brief Reference binding failed.
FK_ReferenceInitFailed,
/// \brief Implicit conversion failed.
- FK_ConversionFailed
+ FK_ConversionFailed,
+ /// \brief Too many initializers for scalar
+ FK_TooManyInitsForScalar,
+ /// \brief Reference initialization from an initializer list
+ FK_ReferenceBindingToInitList,
+ /// \brief Initialization of some unused destination type with an
+ /// initializer list.
+ FK_InitListBadDestinationType
};
private:
@@ -437,13 +449,20 @@
/// \param Args the argument(s) provided for initialization, ownership of
/// which is transfered into the routine.
///
+ /// \param ResultType if non-NULL, will be set to the type of the
+ /// initialized object, which is the type of the declaration in most
+ /// cases. However, when the initialized object is a variable of
+ /// incomplete array type and the initializer is an initializer
+ /// list, this type will be set to the completed array type.
+ ///
/// \returns an expression that performs the actual object initialization, if
/// the initialization is well-formed. Otherwise, emits diagnostics
/// and returns an invalid expression.
Action::OwningExprResult Perform(Sema &S,
const InitializedEntity &Entity,
const InitializationKind &Kind,
- Action::MultiExprArg Args);
+ Action::MultiExprArg Args,
+ QualType *ResultType = 0);
/// \brief Diagnose an potentially-invalid initialization sequence.
///
@@ -501,7 +520,10 @@
/// \brief Add a new step that applies an implicit conversion sequence.
void AddConversionSequenceStep(const ImplicitConversionSequence &ICS,
QualType T);
-
+
+ /// \brief Add a list-initialiation step
+ void AddListInitializationStep(QualType T);
+
/// \brief Note that this initialization sequence failed.
void SetFailed(FailureKind Failure) {
SequenceKind = FailedSequence;