diff options
| -rw-r--r-- | clang-tools-extra/clang-tidy/misc/SizeofContainerCheck.cpp | 1 | ||||
| -rw-r--r-- | clang-tools-extra/test/clang-tidy/misc-sizeof-container.cpp | 8 |
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]; |

