[PATCH] D70094: [clang-tidy] new altera ID dependent backward branch check
Aaron Ballman via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Fri Apr 30 12:11:03 PDT 2021
aaron.ballman added inline comments.
================
Comment at: clang-tools-extra/clang-tidy/altera/IdDependentBackwardBranchCheck.cpp:28-31
+ hasOperatorName("="), hasOperatorName("*="), hasOperatorName("/="),
+ hasOperatorName("%="), hasOperatorName("+="), hasOperatorName("-="),
+ hasOperatorName("<<="), hasOperatorName(">>="), hasOperatorName("&="),
+ hasOperatorName("^="), hasOperatorName("|="));
----------------
Can you use the `isAssignmentOperator()` AST matcher instead of spelling out the operator names manually?
================
Comment at: clang-tools-extra/clang-tidy/altera/IdDependentBackwardBranchCheck.cpp:54
+ // Bind all VarDecls that include an initializer with a variable DeclRefExpr
+ // (incase it is ID-dependent).
+ Finder->addMatcher(
----------------
================
Comment at: clang-tools-extra/clang-tidy/altera/IdDependentBackwardBranchCheck.cpp:101-102
+ if (const auto *ChildExpression = dyn_cast<Expr>(Child)) {
+ IdDependencyRecord *Result = hasIdDepVar(ChildExpression);
+ if (Result)
+ return Result;
----------------
================
Comment at: clang-tools-extra/clang-tidy/altera/IdDependentBackwardBranchCheck.cpp:121-122
+ if (const auto *ChildExpression = dyn_cast<Expr>(Child)) {
+ IdDependencyRecord *Result = hasIdDepField(ChildExpression);
+ if (Result)
+ return Result;
----------------
================
Comment at: clang-tools-extra/clang-tidy/altera/IdDependentBackwardBranchCheck.cpp:132-134
+ std::ostringstream StringStream;
+ StringStream << "assignment of ID-dependent variable "
+ << Variable->getNameAsString();
----------------
You should use an `llvm::Twine` for this.
================
Comment at: clang-tools-extra/clang-tidy/altera/IdDependentBackwardBranchCheck.cpp:141-143
+ std::ostringstream StringStream;
+ StringStream << "assignment of ID-dependent field "
+ << Field->getNameAsString();
----------------
Same here as above.
================
Comment at: clang-tools-extra/clang-tidy/altera/IdDependentBackwardBranchCheck.cpp:154
+ return;
+ std::ostringstream StringStream;
+ StringStream << "inferred assignment of ID-dependent value from "
----------------
I'd use `llvm::raw_string_ostream` here (basically, try to avoid STL iostream functionality as much as possible, it's really slow/bad).
================
Comment at: clang-tools-extra/clang-tidy/altera/IdDependentBackwardBranchCheck.cpp:199-204
+ if (isa<DoStmt>(Loop))
+ return DO_LOOP;
+ else if (isa<WhileStmt>(Loop))
+ return WHILE_LOOP;
+ else if (isa<ForStmt>(Loop))
+ return FOR_LOOP;
----------------
Rather than repeatedly use `isa<>`, I'd consider using a `switch` over `Loop->getStmtClass()`. This also addresses the "no `else` after a `return`" coding style concern.
================
Comment at: clang-tools-extra/clang-tidy/altera/IdDependentBackwardBranchCheck.h:26
+private:
+ enum LoopType { UNK_LOOP = -1, DO_LOOP = 0, WHILE_LOOP = 1, FOR_LOOP = 2 };
+ // Stores information necessary for printing out source of error.
----------------
The enumerators don't match the style guide -- can you rename them to `UnknownLoop`, `DoLoop`, etc so they look less like macros?
================
Comment at: clang-tools-extra/clang-tidy/altera/IdDependentBackwardBranchCheck.h:32
+ : VariableDeclaration(Declaration), Location(Location),
+ Message(Message) {}
+ IdDependencyRecord(const FieldDecl *Declaration, SourceLocation Location,
----------------
================
Comment at: clang-tools-extra/clang-tidy/altera/IdDependentBackwardBranchCheck.h:35
+ std::string Message)
+ : FieldDeclaration(Declaration), Location(Location), Message(Message) {}
+ IdDependencyRecord() = default;
----------------
================
Comment at: clang-tools-extra/clang-tidy/altera/IdDependentBackwardBranchCheck.h:37-38
+ IdDependencyRecord() = default;
+ const VarDecl *VariableDeclaration;
+ const FieldDecl *FieldDeclaration;
+ SourceLocation Location;
----------------
To ensure they get initialized to something sensible from the default ctor.
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D70094/new/
https://reviews.llvm.org/D70094
More information about the cfe-commits
mailing list