From 3c7228e4684b88651412273661db32d6cc554ebe Mon Sep 17 00:00:00 2001 From: David Majnemer Date: Tue, 1 Jul 2014 21:10:07 +0000 Subject: [PATCH] AST: Small simplification in VTableBuilder Stash whether or not we have an RTTI component away instead of recomputing it. llvm-svn: 212127 --- clang/lib/AST/VTableBuilder.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/clang/lib/AST/VTableBuilder.cpp b/clang/lib/AST/VTableBuilder.cpp index 49e1355..edc82f8 100644 --- a/clang/lib/AST/VTableBuilder.cpp +++ b/clang/lib/AST/VTableBuilder.cpp @@ -2446,6 +2446,9 @@ private: MethodVFTableLocationsTy MethodVFTableLocations; + /// \brief Does this class have an RTTI component? + bool HasRTTIComponent; + /// MethodInfo - Contains information about a method in a vtable. /// (Used for computing 'this' pointer adjustment thunks. struct MethodInfo { @@ -2576,8 +2579,9 @@ public: Overriders(MostDerivedClass, CharUnits(), MostDerivedClass) { // Only include the RTTI component if we know that we will provide a // definition of the vftable. - if (Context.getLangOpts().RTTI && - !MostDerivedClass->hasAttr()) + HasRTTIComponent = Context.getLangOpts().RTTI && + !MostDerivedClass->hasAttr(); + if (HasRTTIComponent) Components.push_back(VTableComponent::MakeRTTI(MostDerivedClass)); LayoutVFTable(); @@ -2921,8 +2925,8 @@ void VFTableBuilder::AddMethods(BaseSubobject Base, unsigned BaseDepth, // it requires return adjustment. Insert the method info for this method. unsigned VBIndex = LastVBase ? VTables.getVBTableIndex(MostDerivedClass, LastVBase) : 0; - MethodInfo MI(VBIndex, Context.getLangOpts().RTTI ? Components.size() - 1 - : Components.size()); + MethodInfo MI(VBIndex, + HasRTTIComponent ? Components.size() - 1 : Components.size()); assert(!MethodInfoMap.count(MD) && "Should not have method info for this method yet!"); -- 2.7.4