diff options
Diffstat (limited to 'clang/lib/StaticAnalyzer/Checkers/EnumCastOutOfRangeChecker.cpp')
| -rw-r--r-- | clang/lib/StaticAnalyzer/Checkers/EnumCastOutOfRangeChecker.cpp | 11 |
1 files changed, 2 insertions, 9 deletions
diff --git a/clang/lib/StaticAnalyzer/Checkers/EnumCastOutOfRangeChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/EnumCastOutOfRangeChecker.cpp index 054b2e96bd13..76a1470aaac4 100644 --- a/clang/lib/StaticAnalyzer/Checkers/EnumCastOutOfRangeChecker.cpp +++ b/clang/lib/StaticAnalyzer/Checkers/EnumCastOutOfRangeChecker.cpp @@ -139,18 +139,11 @@ void EnumCastOutOfRangeChecker::checkPreStmt(const CastExpr *CE, if (!ValueToCast) return; - const QualType T = CE->getType(); // Check whether the cast type is an enum. - if (!T->isEnumeralType()) + const auto *ED = CE->getType()->getAsEnumDecl(); + if (!ED) return; - // If the cast is an enum, get its declaration. - // If the isEnumeralType() returned true, then the declaration must exist - // even if it is a stub declaration. It is up to the getDeclValuesForEnum() - // function to handle this. - const EnumDecl *ED = - T->castAs<EnumType>()->getOriginalDecl()->getDefinitionOrSelf(); - // [[clang::flag_enum]] annotated enums are by definition should be ignored. if (ED->hasAttr<FlagEnumAttr>()) return; |
