[clang] 177e5ac - [Sema] Promote SmallSet of enum to bitset
Benjamin Kramer via cfe-commits
cfe-commits at lists.llvm.org
Mon Jul 20 08:38:01 PDT 2020
Author: Benjamin Kramer
Date: 2020-07-20T17:35:43+02:00
New Revision: 177e5acbe4b9ca0df3edd6b720ea8851c33baba2
URL: https://github.com/llvm/llvm-project/commit/177e5acbe4b9ca0df3edd6b720ea8851c33baba2
DIFF: https://github.com/llvm/llvm-project/commit/177e5acbe4b9ca0df3edd6b720ea8851c33baba2.diff
LOG: [Sema] Promote SmallSet of enum to bitset
Even with 300 elements, this still consumes less stack space than the
SmallSet. NFCI.
Added:
Modified:
clang/lib/Sema/SemaType.cpp
Removed:
################################################################################
diff --git a/clang/lib/Sema/SemaType.cpp b/clang/lib/Sema/SemaType.cpp
index ee7bf98e9ca6..38cb83938ad2 100644
--- a/clang/lib/Sema/SemaType.cpp
+++ b/clang/lib/Sema/SemaType.cpp
@@ -37,6 +37,7 @@
#include "llvm/ADT/StringSwitch.h"
#include "llvm/IR/DerivedTypes.h"
#include "llvm/Support/ErrorHandling.h"
+#include <bitset>
using namespace clang;
@@ -6858,32 +6859,32 @@ static bool handleMSPointerTypeQualifierAttr(TypeProcessingState &State,
break;
}
- llvm::SmallSet<attr::Kind, 2> Attrs;
+ std::bitset<attr::LastAttr> Attrs;
attr::Kind NewAttrKind = A->getKind();
QualType Desugared = Type;
const AttributedType *AT = dyn_cast<AttributedType>(Type);
while (AT) {
- Attrs.insert(AT->getAttrKind());
+ Attrs[AT->getAttrKind()] = true;
Desugared = AT->getModifiedType();
AT = dyn_cast<AttributedType>(Desugared);
}
// You cannot specify duplicate type attributes, so if the attribute has
// already been applied, flag it.
- if (Attrs.count(NewAttrKind)) {
+ if (Attrs[NewAttrKind]) {
S.Diag(PAttr.getLoc(), diag::warn_duplicate_attribute_exact) << PAttr;
return true;
}
- Attrs.insert(NewAttrKind);
+ Attrs[NewAttrKind] = true;
// You cannot have both __sptr and __uptr on the same type, nor can you
// have __ptr32 and __ptr64.
- if (Attrs.count(attr::Ptr32) && Attrs.count(attr::Ptr64)) {
+ if (Attrs[attr::Ptr32] && Attrs[attr::Ptr64]) {
S.Diag(PAttr.getLoc(), diag::err_attributes_are_not_compatible)
<< "'__ptr32'"
<< "'__ptr64'";
return true;
- } else if (Attrs.count(attr::SPtr) && Attrs.count(attr::UPtr)) {
+ } else if (Attrs[attr::SPtr] && Attrs[attr::UPtr]) {
S.Diag(PAttr.getLoc(), diag::err_attributes_are_not_compatible)
<< "'__sptr'"
<< "'__uptr'";
@@ -6909,12 +6910,12 @@ static bool handleMSPointerTypeQualifierAttr(TypeProcessingState &State,
LangAS ASIdx = LangAS::Default;
uint64_t PtrWidth = S.Context.getTargetInfo().getPointerWidth(0);
if (PtrWidth == 32) {
- if (Attrs.count(attr::Ptr64))
+ if (Attrs[attr::Ptr64])
ASIdx = LangAS::ptr64;
- else if (Attrs.count(attr::UPtr))
+ else if (Attrs[attr::UPtr])
ASIdx = LangAS::ptr32_uptr;
- } else if (PtrWidth == 64 && Attrs.count(attr::Ptr32)) {
- if (Attrs.count(attr::UPtr))
+ } else if (PtrWidth == 64 && Attrs[attr::Ptr32]) {
+ if (Attrs[attr::UPtr])
ASIdx = LangAS::ptr32_uptr;
else
ASIdx = LangAS::ptr32_sptr;
More information about the cfe-commits
mailing list