[clang-tidy] misc-sizeof-container: whitelist std::bitset<>.
It's fine to use sizeof on std::bitset<>, since it doesn't have any external
storage, everything's inside.
llvm-svn: 247489
diff --git a/clang-tools-extra/clang-tidy/misc/SizeofContainerCheck.cpp b/clang-tools-extra/clang-tidy/misc/SizeofContainerCheck.cpp
index 44753b9..2a5d91a 100644
--- a/clang-tools-extra/clang-tidy/misc/SizeofContainerCheck.cpp
+++ b/clang-tools-extra/clang-tidy/misc/SizeofContainerCheck.cpp
@@ -36,6 +36,7 @@
expr(unless(isInTemplateInstantiation()),
expr(sizeOfExpr(has(expr(hasType(hasCanonicalType(hasDeclaration(
recordDecl(matchesName("^(::std::|::string)"),
+ unless(hasName("::std::bitset")),
hasMethod(methodDecl(hasName("size"), isPublic(),
isConst()))))))))))
.bind("sizeof"),
diff --git a/clang-tools-extra/test/clang-tidy/misc-sizeof-container.cpp b/clang-tools-extra/test/clang-tidy/misc-sizeof-container.cpp
index 41f5029..9dd113d 100644
--- a/clang-tools-extra/test/clang-tidy/misc-sizeof-container.cpp
+++ b/clang-tools-extra/test/clang-tidy/misc-sizeof-container.cpp
@@ -19,6 +19,12 @@
size_t size() const;
};
+// std::bitset<> is not a container. sizeof() is reasonable for it.
+template <size_t N>
+struct bitset {
+ size_t size() const;
+};
+
class fake_container1 {
size_t size() const; // non-public
};
@@ -78,9 +84,11 @@
std::fake_container1 f1;
std::fake_container2 f2;
+ std::bitset<7> bs;
a = sizeof(f1);
a = sizeof(f2);
+ a = sizeof(bs);
std::string arr[3];