Endre =?utf-8?q?Fülöp?= <[email protected]>,
Endre =?utf-8?q?Fülöp?= <[email protected]>,
Endre =?utf-8?q?Fülöp?= <[email protected]>,
Endre =?utf-8?q?Fülöp?= <[email protected]>,
Endre =?utf-8?q?Fülöp?= <[email protected]>,
Endre =?utf-8?q?Fülöp?= <[email protected]>
Message-ID:
In-Reply-To: <llvm.org/llvm/llvm-project/pull/[email protected]>
================
@@ -165,22 +165,36 @@ void EnumInitialValueCheck::registerMatchers(MatchFinder
*Finder) {
void EnumInitialValueCheck::check(const MatchFinder::MatchResult &Result) {
if (const auto *Enum = Result.Nodes.getNodeAs<EnumDecl>("inconsistent")) {
- const DiagnosticBuilder Diag =
- diag(
- Enum->getBeginLoc(),
- "initial values in enum '%0' are not consistent, consider explicit
"
- "initialization of all, none or only the first enumerator")
- << getName(Enum);
- for (const EnumConstantDecl *ECD : Enum->enumerators())
- if (ECD->getInitExpr() == nullptr) {
- const SourceLocation EndLoc = Lexer::getLocForEndOfToken(
- ECD->getLocation(), 0, *Result.SourceManager, getLangOpts());
- if (EndLoc.isMacroID())
- continue;
- llvm::SmallString<8> Str{" = "};
- ECD->getInitVal().toString(Str);
- Diag << FixItHint::CreateInsertion(EndLoc, Str);
+ // Emit warning first (DiagnosticBuilder emits on destruction), then notes.
+ // Notes must follow the primary diagnostic or they may be dropped.
+ {
+ const DiagnosticBuilder Diag =
+ diag(Enum->getBeginLoc(), "initial values in enum '%0' are not "
+ "consistent, consider explicit "
+ "initialization of all, none or only the "
+ "first enumerator")
+ << getName(Enum);
+
+ for (const EnumConstantDecl *ECD : Enum->enumerators()) {
+ if (ECD->getInitExpr() == nullptr) {
+ const SourceLocation EndLoc = Lexer::getLocForEndOfToken(
+ ECD->getLocation(), 0, *Result.SourceManager, getLangOpts());
+ if (EndLoc.isMacroID())
+ continue;
+ llvm::SmallString<8> Str{" = "};
+ ECD->getInitVal().toString(Str);
+ Diag << FixItHint::CreateInsertion(EndLoc, Str);
+ }
+ }
+ }
+
+ for (const EnumConstantDecl *ECD : Enum->enumerators()) {
+ if (ECD->getInitExpr() == nullptr && ECD->getDeclName()) {
----------------
zwuis wrote:
When `ECD->getDeclName()` is `false`? Can we `assert` instead?
https://github.com/llvm/llvm-project/pull/176485
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits