Iterator invalidation issues already force us to do one lookup and one
insert.
Don't use the particular bit-pattern of the 'Align' field to determine
whether or not we have already inserted into the TypeInfo DenseMap;
instead ask for an iterator to the TypeInfo entry.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@214293
91177308-0d34-0410-b5e6-
96231b3b80d8
}
TypeInfo ASTContext::getTypeInfo(const Type *T) const {
- TypeInfo TI = MemoizedTypeInfo[T];
- if (!TI.Align) {
- // This call can invalidate MemoizedTypeInfo[T], so we need a second lookup.
- TI = getTypeInfoImpl(T);
- MemoizedTypeInfo[T] = TI;
- }
+ TypeInfoMap::iterator I = MemoizedTypeInfo.find(T);
+ if (I != MemoizedTypeInfo.end())
+ return I->second;
+
+ // This call can invalidate MemoizedTypeInfo[T], so we need a second lookup.
+ TypeInfo TI = getTypeInfoImpl(T);
+ MemoizedTypeInfo[T] = TI;
return TI;
}