[clang] [analyzer] Extend EnumCastOutOfRange diagnostics (PR #68191)
via cfe-commits
cfe-commits at lists.llvm.org
Thu Oct 26 07:31:59 PDT 2023
Endre =?utf-8?q?Fülöp?= <endre.fulop at sigmatechnology.se>,
Endre =?utf-8?q?Fülöp?= <endre.fulop at sigmatechnology.se>
Message-ID:
In-Reply-To: <llvm/llvm-project/pull/68191/clang at github.com>
================
@@ -72,21 +72,36 @@ EnumValueVector getDeclValuesForEnum(const EnumDecl *ED) {
EnumValueVector DeclValues(
std::distance(ED->enumerator_begin(), ED->enumerator_end()));
llvm::transform(ED->enumerators(), DeclValues.begin(),
- [](const EnumConstantDecl *D) { return D->getInitVal(); });
+ [](const EnumConstantDecl *D) { return D->getInitVal(); });
return DeclValues;
}
} // namespace
-void EnumCastOutOfRangeChecker::reportWarning(CheckerContext &C) const {
+void EnumCastOutOfRangeChecker::reportWarning(CheckerContext &C,
+ const EnumDecl *E) const {
+ assert(E && "valid EnumDecl* is expected");
if (const ExplodedNode *N = C.generateNonFatalErrorNode()) {
if (!EnumValueCastOutOfRange)
EnumValueCastOutOfRange.reset(
new BugType(this, "Enum cast out of range"));
- constexpr llvm::StringLiteral Msg =
- "The value provided to the cast expression is not in the valid range"
- " of values for the enum";
- C.emitReport(std::make_unique<PathSensitiveBugReport>(
- *EnumValueCastOutOfRange, Msg, N));
+
+ llvm::SmallString<128> Msg{"The value provided to the cast expression is "
+ "not in the valid range of values for "};
+ StringRef EnumName{E->getName()};
+ if (EnumName.empty()) {
+ Msg += "the enum";
----------------
DonatNagyE wrote:
Could you add a testcase that shows an example where this branch is used? (Is this for the C-style `typedef enum {...} foo_t;` declarations?)
https://github.com/llvm/llvm-project/pull/68191
More information about the cfe-commits
mailing list