Address review feedback from r215780: Use a flag insteda of the heap. No behavior change.

llvm-svn: 226389
This commit is contained in:
Nico Weber 2015-01-18 01:50:35 +00:00
parent 01fb5fb128
commit 7a92e1ad3d
2 changed files with 19 additions and 25 deletions

View File

@ -6720,12 +6720,17 @@ public:
class SavePendingInstantiationsAndVTableUsesRAII {
public:
SavePendingInstantiationsAndVTableUsesRAII(Sema &S): S(S) {
SavePendingInstantiationsAndVTableUsesRAII(Sema &S, bool Enabled)
: S(S), Enabled(Enabled) {
if (!Enabled) return;
SavedPendingInstantiations.swap(S.PendingInstantiations);
SavedVTableUses.swap(S.VTableUses);
}
~SavePendingInstantiationsAndVTableUsesRAII() {
if (!Enabled) return;
// Restore the set of pending vtables.
assert(S.VTableUses.empty() &&
"VTableUses should be empty before it is discarded.");
@ -6741,6 +6746,7 @@ public:
Sema &S;
SmallVector<VTableUse, 16> SavedVTableUses;
std::deque<PendingImplicitInstantiation> SavedPendingInstantiations;
bool Enabled;
};
/// \brief The queue of implicit template instantiations that are required

View File

@ -3313,12 +3313,8 @@ void Sema::InstantiateFunctionDefinition(SourceLocation PointOfInstantiation,
// it marks vtables used in late parsed templates as used.
SavePendingLocalImplicitInstantiationsRAII
SavedPendingLocalImplicitInstantiations(*this);
std::unique_ptr<SavePendingInstantiationsAndVTableUsesRAII>
SavePendingInstantiationsAndVTableUses;
if (Recursive) {
SavePendingInstantiationsAndVTableUses.reset(
new SavePendingInstantiationsAndVTableUsesRAII(*this));
}
SavePendingInstantiationsAndVTableUsesRAII
SavePendingInstantiationsAndVTableUses(*this, /*Enabled=*/Recursive);
// Call the LateTemplateParser callback if there is a need to late parse
// a templated function definition.
@ -3463,8 +3459,8 @@ void Sema::InstantiateFunctionDefinition(SourceLocation PointOfInstantiation,
// instantiation of this template.
PerformPendingInstantiations();
// Restore PendingInstantiations and VTableUses.
SavePendingInstantiationsAndVTableUses.reset();
// PendingInstantiations and VTableUses are restored through
// SavePendingInstantiationsAndVTableUses's destructor.
}
}
@ -3780,12 +3776,8 @@ void Sema::InstantiateVariableDefinition(SourceLocation PointOfInstantiation,
// If we're performing recursive template instantiation, create our own
// queue of pending implicit instantiations that we will instantiate
// later, while we're still within our own instantiation context.
std::unique_ptr<SavePendingInstantiationsAndVTableUsesRAII>
SavePendingInstantiationsAndVTableUses;
if (Recursive) {
SavePendingInstantiationsAndVTableUses.reset(
new SavePendingInstantiationsAndVTableUsesRAII(*this));
}
SavePendingInstantiationsAndVTableUsesRAII
SavePendingInstantiationsAndVTableUses(*this, /*Enabled=*/Recursive);
LocalInstantiationScope Local(*this);
@ -3812,8 +3804,8 @@ void Sema::InstantiateVariableDefinition(SourceLocation PointOfInstantiation,
// instantiation of this template.
PerformPendingInstantiations();
// Restore PendingInstantiations and VTableUses.
SavePendingInstantiationsAndVTableUses.reset();
// PendingInstantiations and VTableUses are restored through
// SavePendingInstantiationsAndVTableUses's destructor.
}
}
@ -3899,12 +3891,8 @@ void Sema::InstantiateVariableDefinition(SourceLocation PointOfInstantiation,
// while we're still within our own instantiation context.
SavePendingLocalImplicitInstantiationsRAII
SavedPendingLocalImplicitInstantiations(*this);
std::unique_ptr<SavePendingInstantiationsAndVTableUsesRAII>
SavePendingInstantiationsAndVTableUses;
if (Recursive) {
SavePendingInstantiationsAndVTableUses.reset(
new SavePendingInstantiationsAndVTableUsesRAII(*this));
}
SavePendingInstantiationsAndVTableUsesRAII
SavePendingInstantiationsAndVTableUses(*this, /*Enabled=*/Recursive);
// Enter the scope of this instantiation. We don't use
// PushDeclContext because we don't have a scope.
@ -3970,8 +3958,8 @@ void Sema::InstantiateVariableDefinition(SourceLocation PointOfInstantiation,
// instantiation of this template.
PerformPendingInstantiations();
// Restore PendingInstantiations and VTableUses.
SavePendingInstantiationsAndVTableUses.reset();
// PendingInstantiations and VTableUses are restored through
// SavePendingInstantiationsAndVTableUses's destructor.
}
}