summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--clang-tools-extra/clang-tidy/misc/SizeofContainerCheck.cpp1
-rw-r--r--clang-tools-extra/test/clang-tidy/misc-sizeof-container.cpp8
2 files changed, 9 insertions, 0 deletions
diff --git a/clang-tools-extra/clang-tidy/misc/SizeofContainerCheck.cpp b/clang-tools-extra/clang-tidy/misc/SizeofContainerCheck.cpp
index 44753b93382..2a5d91af385 100644
--- a/clang-tools-extra/clang-tidy/misc/SizeofContainerCheck.cpp
+++ b/clang-tools-extra/clang-tidy/misc/SizeofContainerCheck.cpp
@@ -36,6 +36,7 @@ void SizeofContainerCheck::registerMatchers(MatchFinder *Finder) {
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 41f5029b592..9dd113ddb20 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 @@ struct vector {
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 @@ void f() {
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];
OpenPOWER on IntegriCloud