diff options
author | Sergio Martins <smartins@kde.org> | 2021-07-27 22:35:52 +0100 |
---|---|---|
committer | Sergio Martins <smartins@kde.org> | 2021-07-27 22:35:52 +0100 |
commit | 215634c156221aa03d0b515f2266752c5651c25c (patch) | |
tree | 651b16d1008ec0c97915d4463987d7b82b40a87d | |
parent | 27ce217f8dc8f90455801b6741a2a60cf1dadd43 (diff) |
unexpected-flag-enumerator-value: Don't warn for enums with 0
0 is a valid and very common flag
-rw-r--r-- | src/checks/manuallevel/unexpected-flag-enumerator-value.cpp | 9 | ||||
-rw-r--r-- | tests/unexpected-flag-enumerator-value/main.cpp | 9 |
2 files changed, 13 insertions, 5 deletions
diff --git a/src/checks/manuallevel/unexpected-flag-enumerator-value.cpp b/src/checks/manuallevel/unexpected-flag-enumerator-value.cpp index ad3dc39f..d48be74e 100644 --- a/src/checks/manuallevel/unexpected-flag-enumerator-value.cpp +++ b/src/checks/manuallevel/unexpected-flag-enumerator-value.cpp @@ -116,15 +116,14 @@ void UnexpectedFlagEnumeratorValue::VisitDecl(clang::Decl *decl) const SmallVector<EnumConstantDecl*, 16> enumerators = getEnumerators(enDecl); auto flagEnum = isFlagEnum(enumerators); - if (!flagEnum.isFlagEnum) { + if (!flagEnum.isFlagEnum) return; - } for (EnumConstantDecl* enumerator : enumerators) { - if (!enumerator->getInitVal().isPowerOf2()) { - if (isIntentionallyNotPowerOf2(enumerator)) { + const auto &initVal = enumerator->getInitVal(); + if (!initVal.isPowerOf2() && !initVal.isNullValue()){ + if (isIntentionallyNotPowerOf2(enumerator)) continue; - } const auto value = enumerator->getInitVal().getLimitedValue(); Expr *initExpr = enumerator->getInitExpr(); emitWarning(initExpr ? initExpr->getBeginLoc() : enumerator->getBeginLoc(), "Unexpected non power-of-2 enumerator value: " + std::to_string(value)); diff --git a/tests/unexpected-flag-enumerator-value/main.cpp b/tests/unexpected-flag-enumerator-value/main.cpp index db070983..bb2d19f4 100644 --- a/tests/unexpected-flag-enumerator-value/main.cpp +++ b/tests/unexpected-flag-enumerator-value/main.cpp @@ -63,3 +63,12 @@ enum WithMasks V8 = 8, Mask = 0x0000FFFF }; + + +enum class WithZero { + Zero = 0, + Foo = 1, + Bar = 2, + Four = 4, + Eight = 8, +}; |