summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaInit.h
diff options
context:
space:
mode:
Diffstat (limited to 'clang/lib/Sema/SemaInit.h')
-rw-r--r--clang/lib/Sema/SemaInit.h34
1 files changed, 28 insertions, 6 deletions
diff --git a/clang/lib/Sema/SemaInit.h b/clang/lib/Sema/SemaInit.h
index 85aa421db67..debb0deaddc 100644
--- a/clang/lib/Sema/SemaInit.h
+++ b/clang/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 @@ public:
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 @@ public:
/// \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 @@ public:
/// \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 @@ public:
/// \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 @@ public:
/// \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;
OpenPOWER on IntegriCloud