mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-12-05 12:51:16 +00:00
Address review feedback from r215780: Use a flag insteda of the heap. No behavior change.
llvm-svn: 226389
This commit is contained in:
parent
01fb5fb128
commit
7a92e1ad3d
@ -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
|
||||
|
@ -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.
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user