summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra
diff options
context:
space:
mode:
authorAlexander Kornienko <alexfh@google.com>2015-09-11 22:54:44 +0000
committerAlexander Kornienko <alexfh@google.com>2015-09-11 22:54:44 +0000
commit541de378cedc703fcb5bde480141589ba9ece377 (patch)
tree6b6e55e1e3b89c28f26bfe066fbfa6623e4b3738 /clang-tools-extra
parentc8a7eb5939e21657f55ba7a7935641e71512ee9e (diff)
downloadbcm5719-llvm-541de378cedc703fcb5bde480141589ba9ece377.tar.gz
bcm5719-llvm-541de378cedc703fcb5bde480141589ba9ece377.zip
[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
Diffstat (limited to 'clang-tools-extra')
-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