Remove InitializationSequence::ReferenceBinding, the last redundant sequence kind.

llvm-svn: 135175
This commit is contained in:
Sebastian Redl 2011-07-14 19:07:55 +00:00
parent 4cc3bcd575
commit 112aa826c7
2 changed files with 8 additions and 13 deletions

View File

@ -491,10 +491,7 @@ public:
DependentSequence, DependentSequence,
/// \brief A normal sequence. /// \brief A normal sequence.
NormalSequence, NormalSequence
/// \brief A reference binding.
ReferenceBinding // FIXME: Still looks redundant, but complicated.
}; };
/// \brief Describes the kind of a particular step in an initialization /// \brief Describes the kind of a particular step in an initialization

View File

@ -2155,7 +2155,7 @@ void InitializationSequence::Step::Destroy() {
} }
bool InitializationSequence::isDirectReferenceBinding() const { bool InitializationSequence::isDirectReferenceBinding() const {
return getKind() == ReferenceBinding && Steps.back().Kind == SK_BindReference; return !Steps.empty() && Steps.back().Kind == SK_BindReference;
} }
bool InitializationSequence::isAmbiguous() const { bool InitializationSequence::isAmbiguous() const {
@ -2622,8 +2622,6 @@ static void TryReferenceInitialization(Sema &S,
const InitializationKind &Kind, const InitializationKind &Kind,
Expr *Initializer, Expr *Initializer,
InitializationSequence &Sequence) { InitializationSequence &Sequence) {
Sequence.setSequenceKind(InitializationSequence::ReferenceBinding);
QualType DestType = Entity.getType(); QualType DestType = Entity.getType();
QualType cv1T1 = DestType->getAs<ReferenceType>()->getPointeeType(); QualType cv1T1 = DestType->getAs<ReferenceType>()->getPointeeType();
Qualifiers T1Quals; Qualifiers T1Quals;
@ -3892,6 +3890,11 @@ void InitializationSequence::PrintInitLocationNote(Sema &S,
} }
} }
static bool isReferenceBinding(const InitializationSequence::Step &s) {
return s.Kind == InitializationSequence::SK_BindReference ||
s.Kind == InitializationSequence::SK_BindReferenceToTemporary;
}
ExprResult ExprResult
InitializationSequence::Perform(Sema &S, InitializationSequence::Perform(Sema &S,
const InitializedEntity &Entity, const InitializedEntity &Entity,
@ -4187,8 +4190,7 @@ InitializationSequence::Perform(Sema &S,
CreatedObject = Conversion->getResultType()->isRecordType(); CreatedObject = Conversion->getResultType()->isRecordType();
} }
bool RequiresCopy = !IsCopy && bool RequiresCopy = !IsCopy && !isReferenceBinding(Steps.back());
getKind() != InitializationSequence::ReferenceBinding;
if (RequiresCopy || shouldBindAsTemporary(Entity)) if (RequiresCopy || shouldBindAsTemporary(Entity))
CurInit = S.MaybeBindToTemporary(CurInit.takeAs<Expr>()); CurInit = S.MaybeBindToTemporary(CurInit.takeAs<Expr>());
else if (CreatedObject && shouldDestroyTemporary(Entity)) { else if (CreatedObject && shouldDestroyTemporary(Entity)) {
@ -4866,10 +4868,6 @@ void InitializationSequence::dump(llvm::raw_ostream &OS) const {
case NormalSequence: case NormalSequence:
OS << "Normal sequence: "; OS << "Normal sequence: ";
break; break;
case ReferenceBinding:
OS << "Reference binding: ";
break;
} }
for (step_iterator S = step_begin(), SEnd = step_end(); S != SEnd; ++S) { for (step_iterator S = step_begin(), SEnd = step_end(); S != SEnd; ++S) {