aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSergio Martins <smartins@kde.org>2021-07-27 22:35:52 +0100
committerSergio Martins <smartins@kde.org>2021-07-27 22:35:52 +0100
commit215634c156221aa03d0b515f2266752c5651c25c (patch)
tree651b16d1008ec0c97915d4463987d7b82b40a87d
parent27ce217f8dc8f90455801b6741a2a60cf1dadd43 (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.cpp9
-rw-r--r--tests/unexpected-flag-enumerator-value/main.cpp9
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,
+};