[PATCH] D148554: [dataflow] Extract arena for Value/StorageLocation out of DataflowAnalysisContext

2023-04-18 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev accepted this revision. sgatev added inline comments. Comment at: clang/include/clang/Analysis/FlowSensitive/Arena.h:91-97 + /// Returns a boolean value as a result of substituting `Val` and its sub + /// values based on entries in `SubstitutionsCache`. Intermediate

[PATCH] D146514: [clang][dataflow] Fix crash when RHS of `&&` or `||` calls `noreturn` func.

2023-03-21 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev accepted this revision. sgatev added inline comments. Comment at: clang/include/clang/Analysis/FlowSensitive/ControlFlowContext.h:52 + /// Returns whether `B` is reachable from the entry block. + bool isBlockReachable(const CFGBlock *B) const { +return

[PATCH] D142710: [clang][dataflow] Relax validity assumptions in `UncheckedOptionalAccessModel`.

2023-01-27 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev added inline comments. Comment at: clang/lib/Analysis/FlowSensitive/Models/UncheckedOptionalAccessModel.cpp:524 -void transferSwap(const StorageLocation , - const StorageLocation , - LatticeTransferState ) { - auto *OptionalVal1 =

[PATCH] D142468: [clang][dataflow] Fix bug in handling of reference-typed fields.

2023-01-24 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev accepted this revision. sgatev added inline comments. This revision is now accepted and ready to land. Comment at: clang/lib/Analysis/FlowSensitive/Transfer.cpp:209 if (VD->getType()->isReferenceType()) { + assert(isValidReferenceLoc(*DeclLoc, Env) && +

[PATCH] D141716: [clang][dataflow] Add (initial) debug printing for `Value` and `Environment`.

2023-01-16 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev accepted this revision. sgatev added inline comments. Comment at: clang/lib/Analysis/FlowSensitive/DataflowEnvironment.cpp:792 + // fields are printed. + llvm::dbgs() << "DeclToLoc:\n"; + for (auto [D, L] : DeclToLoc) Shouldn't this be `OS`? Same for

[PATCH] D140859: [clang][dataflow] Allow analyzing multiple functions in unit tests

2023-01-03 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev accepted this revision. sgatev added inline comments. This revision is now accepted and ready to land. Comment at: clang/unittests/Analysis/FlowSensitive/TestingSupport.cpp:89-104 + unsigned FunctionBeginOffset = + SourceManager.getFileOffset(Func->getBeginLoc()); +

[PATCH] D137948: [clang][dataflow] Add widening API and implement it for built-in boolean model.

2022-11-22 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev accepted this revision. sgatev added inline comments. Comment at: clang/include/clang/Analysis/FlowSensitive/DataflowEnvironment.h:467 + + //`DeclContext` of the block being analysed if provided. std::vector CallStack; Comment at:

[PATCH] D137334: [clang][dataflow] Generalize custom comparison to return tri-value result.

2022-11-03 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev added inline comments. Comment at: clang/include/clang/Analysis/FlowSensitive/DataflowEnvironment.h:52 +/// Indicates the result of a tentative comparison. +enum class ComparisonStatus { + Same, Alternative that I slightly prefer - `ComparisonResult`.

[PATCH] D135964: [clang][dataflow] Add equivalence relation for `Value` type.

2022-10-17 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev accepted this revision. sgatev added inline comments. Comment at: clang/lib/Analysis/FlowSensitive/Value.cpp:15 +#include "llvm/Support/Casting.h" +#include + This seems unnecessary. Comment at:

[PATCH] D135397: [clang][dataflow] Add support for a Top value in boolean formulas.

2022-10-10 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev added inline comments. Comment at: clang/include/clang/Analysis/FlowSensitive/DataflowAnalysisContext.h:156 + TopBoolValue () { +return takeOwnership(std::make_unique()); Please add a comment. Comment at:

[PATCH] D133935: [clang][dataflow] Refactor `clang/Analysis/FlowSensitive/MatchSwitchTest.cpp`.

2022-09-15 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev accepted this revision. sgatev added inline comments. This revision is now accepted and ready to land. Comment at: clang/unittests/Analysis/FlowSensitive/MatchSwitchTest.cpp:139 TEST(MatchSwitchTest, ReturnNonVoid) { using namespace ast_matchers;

[PATCH] D133933: [clang][dataflow] Modify `transfer` in `DataflowModel` to take `CFGElement` as input instead of `Stmt`.

2022-09-15 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev accepted this revision. sgatev added inline comments. This revision is now accepted and ready to land. Comment at: clang/include/clang/Analysis/FlowSensitive/DataflowAnalysis.h:235 + /// Return value indicates whether the model processed the `Element`. + virtual bool

[PATCH] D133930: [clang][dataflow] Replace `transfer(const Stmt *, ...)` with `transfer(const CFGElement *, ...)` in `Analysis/FlowSensitive/Models/UncheckedOptionalAccessModel`.

2022-09-15 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev accepted this revision. sgatev added inline comments. This revision is now accepted and ready to land. Comment at: clang/include/clang/Analysis/FlowSensitive/Models/UncheckedOptionalAccessModel.h:75 + std::vector + diagnose(ASTContext , const CFGElement *Elt, const

[PATCH] D133865: [clang][dataflow] Replace usage of the deprecated overload of `checkDataflow`.

2022-09-15 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev accepted this revision. sgatev added inline comments. Comment at: clang/unittests/Analysis/FlowSensitive/TestingSupportTest.cpp:83-88 +AnalysisInputs( +Code, hasName(Target), +[](ASTContext ,

[PATCH] D132377: [clang][dataflow] Add `SetupTest` parameter for `AnalysisInputs`.

2022-08-26 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev added inline comments. Comment at: clang/unittests/Analysis/FlowSensitive/TestingSupport.h:88 +/// Arguments for building the dataflow analysis. +template struct AnalysisInputs { + /// Input code that is analyzed. Why move this? It makes it hard to tell

[PATCH] D132147: [clang][dataflow] Refactor `TestingSupport.h`

2022-08-26 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev accepted this revision. sgatev added inline comments. Comment at: clang/unittests/Analysis/FlowSensitive/TestingSupport.h:60 +/// Arguments for building the dataflow analysis. +template struct AnalysisInputs { + /// Input code that is analyzed. Could

[PATCH] D131616: [clang][dataflow] Generalise match switch utility to other AST types and add a `CFGMatchSwitch` which currently handles `CFGStmt` and `CFGInitializer`.

2022-08-23 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev added inline comments. Comment at: clang/include/clang/Analysis/FlowSensitive/CFGMatchSwitch.h:24-25 +#include "clang/AST/Stmt.h" +#include "clang/ASTMatchers/ASTMatchFinder.h" +#include "clang/ASTMatchers/ASTMatchers.h" +#include "clang/Analysis/CFG.h"

[PATCH] D131614: [clang][dataflow] Extend transfer functions for other `CFGElement`s

2022-08-22 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev added inline comments. Comment at: clang/include/clang/Analysis/FlowSensitive/DataflowAnalysis.h:103 + /// code being analysed. + virtual void transferCFGElement(const CFGElement *Element, Lattice , + Environment ) {}

[PATCH] D131809: [clang][dataflow] Add an option for context-sensitive depth

2022-08-15 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev added inline comments. Comment at: clang/include/clang/Analysis/FlowSensitive/DataflowEnvironment.h:395 // `DeclContext` of the block being analysed if provided. - const DeclContext *DeclCtx = nullptr; + std::vector CallString;

[PATCH] D131779: [clang][dataflow] Encode options using llvm::Optional

2022-08-12 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev accepted this revision. sgatev added inline comments. This revision is now accepted and ready to land. Comment at: clang/include/clang/Analysis/FlowSensitive/DataflowAnalysis.h:70 + ? TransferOptions{} +

[PATCH] D131646: [clang][dataflow] Restructure loops to call widen on back edges

2022-08-12 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev added inline comments. Comment at: clang/lib/Analysis/FlowSensitive/TypeErasedDataflowAnalysis.cpp:157 +// Returns whether `Block` is a "back edge" in the CFG. Such a block has only +// one successor, the start of the loop. Let's start function comments

[PATCH] D131438: [clang][dataflow] Analyze constructor bodies

2022-08-10 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev accepted this revision. sgatev added inline comments. Comment at: clang/include/clang/Analysis/FlowSensitive/DataflowEnvironment.h:379 + /// Shared implementation of `pushCall` overloads. + void pushCallInternal(const FunctionDecl *FuncDecl, +

[PATCH] D131438: [clang][dataflow] Analyze constructor bodies

2022-08-09 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev added inline comments. Comment at: clang/include/clang/Analysis/FlowSensitive/DataflowEnvironment.h:138 /// + /// `Call` must be either a `CallExpr` or a `CXXConstructExpr`. + /// How about we define overloads that take these types instead of taking

[PATCH] D131280: [clang][dataflow] Parameterize analysis by explicit map of analyzable functions.

2022-08-08 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev added inline comments. Comment at: clang/include/clang/Analysis/FlowSensitive/ControlFlowContext.h:83 +/// overload sets. change the key to support uniqueness. +llvm::Expected> +buildFunctionMapFromAST(ASTUnit ); `#include "llvm/ADT/StringMap.h"`

[PATCH] D131065: [clang][dataflow] Store DeclContext of block being analysed in Environment if available.

2022-08-05 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev accepted this revision. sgatev added inline comments. Comment at: clang/lib/Analysis/FlowSensitive/Transfer.cpp:537-539 + auto *Caller = Env.getDeclCtx(); + Env = Environment(ExitState->Env); + Env.setDeclCtx(Caller); I believe you'll need

[PATCH] D131170: [clang][dataflow] Analyze method bodies

2022-08-04 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev added inline comments. Comment at: clang/lib/Analysis/FlowSensitive/DataflowEnvironment.cpp:217 +const Expr *Arg = MethodCall->getImplicitObjectArgument(); +Env.ThisPointeeLoc = Env.getStorageLocation(*Arg, SkipPast::Reference); + } samestep

[PATCH] D130600: [clang][dataflow] Handle return statements

2022-08-04 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev accepted this revision. sgatev added inline comments. Comment at: clang/lib/Analysis/FlowSensitive/DataflowEnvironment.cpp:208 Environment Env(*this); + Env.ReturnLoc = Env.getStorageLocation(*Call, SkipPast::Reference); Let's add a FIXME to support

[PATCH] D131170: [clang][dataflow] Analyze method bodies

2022-08-04 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev accepted this revision. sgatev added inline comments. This revision is now accepted and ready to land. Comment at: clang/lib/Analysis/FlowSensitive/DataflowEnvironment.cpp:217 +const Expr *Arg = MethodCall->getImplicitObjectArgument(); +Env.ThisPointeeLoc =

[PATCH] D131170: [clang][dataflow] Analyze method bodies

2022-08-04 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev added inline comments. Comment at: clang/include/clang/Analysis/FlowSensitive/DataflowEnvironment.h:383 StorageLocation *ReturnLoc = nullptr; - // FIXME: Move `ThisPointeeLoc` here from `DataflowAnalysisContext`. + StorageLocation *ThisPointeeLoc = nullptr;

[PATCH] D130600: [clang][dataflow] Handle return statements

2022-08-04 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev added inline comments. Comment at: clang/lib/Analysis/FlowSensitive/Transfer.cpp:348 +auto *Loc = Env.getReturnStorageLocation(); +assert(Loc != nullptr); +// FIXME: Model NRVO. samestep wrote: > sgatev wrote: > > Let's do `if (Loc == nullptr)

[PATCH] D130726: [clang][dataflow] Handle multiple context-sensitive calls to the same function

2022-08-03 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev added inline comments. Comment at: clang/lib/Analysis/FlowSensitive/DataflowEnvironment.cpp:250 + // scope, we do not propagate the maps. + this->LocToVal = std::move(CalleeEnv.LocToVal); + this->MemberLocToStruct = std::move(CalleeEnv.MemberLocToStruct);

[PATCH] D130600: [clang][dataflow] Handle return statements

2022-08-03 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev added inline comments. Comment at: clang/lib/Analysis/FlowSensitive/Transfer.cpp:345 +// FIXME: Support reference-type returns. +assert(Val->getKind() != Value::Kind::Reference); + Let's do `if (Val->getKind() == Value::Kind::Reference) return;`.

[PATCH] D131109: [clang][dataflow][NFC] Fix outdated comment on getStableStorageLocation

2022-08-03 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev accepted this revision. sgatev added a comment. Thanks! Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D131109/new/ https://reviews.llvm.org/D131109 ___ cfe-commits mailing list

[PATCH] D131039: [clang][dataflow] Add cache of `ControlFlowContext`s for function decls.

2022-08-03 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev accepted this revision. sgatev added inline comments. Comment at: clang/include/clang/Analysis/FlowSensitive/ControlFlowContext.h:34 + /// Builds a ControlFlowContext from an AST node. `D` is the function in which + /// `S` resides. All arguments must be non-null.

[PATCH] D131065: [clang][dataflow] Store DeclContext of block being analysed in Environment if available.

2022-08-03 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev accepted this revision. sgatev added inline comments. This revision is now accepted and ready to land. Comment at: clang/include/clang/Analysis/FlowSensitive/DataflowEnvironment.h:170 + /// Returns the `DeclCtx` of the block being analysed if provided, otherwise + ///

[PATCH] D131021: [clang][dataflow] Rename member to make it clear that it isn't stable

2022-08-03 Thread Stanislav Gatev via Phabricator via cfe-commits
This revision was landed with ongoing or failed builds. This revision was automatically updated to reflect the committed changes. Closed by commit rG817dd5e3fd6b: [clang][dataflow] Rename member to make it clear that it isnt stable (authored by sgatev). Repository: rG LLVM Github Monorepo

[PATCH] D131014: [clang][dataflow] Make the type of the post visit callback consistent

2022-08-03 Thread Stanislav Gatev via Phabricator via cfe-commits
This revision was landed with ongoing or failed builds. This revision was automatically updated to reflect the committed changes. Closed by commit rGc44c71843f3e: [clang][dataflow] Make the type of the post visit callback consistent (authored by sgatev). Repository: rG LLVM Github Monorepo

[PATCH] D131039: [clang][dataflow] Add cache of `ControlFlowContext`s for function decls.

2022-08-02 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev added inline comments. Comment at: clang/include/clang/Analysis/FlowSensitive/ControlFlowContext.h:34 + /// Builds a ControlFlowContext from an AST node. `D` is the function in which + /// `S` resides. All arguments must be non-null. static llvm::Expected

[PATCH] D131014: [clang][dataflow] Make the type of the post visit callback consistent

2022-08-02 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev added a comment. In D131014#3694852 , @samestep wrote: > Seems reasonable  I'm curious though, why does this not require > `clang-tools-extra/clang-tidy/bugprone/UncheckedOptionalAccessCheck.cpp` to > be updated? It does, thanks! Fixed.

[PATCH] D131014: [clang][dataflow] Make the type of the post visit callback consistent

2022-08-02 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev updated this revision to Diff 449449. sgatev added a comment. Herald added a subscriber: carlosgalvezp. Herald added a project: clang-tools-extra. Address comments Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D131014/new/

[PATCH] D131021: [clang][dataflow] Rename member to make it clear that it isn't stable

2022-08-02 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev updated this revision to Diff 449436. sgatev added a comment. Update commit message Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D131021/new/ https://reviews.llvm.org/D131021 Files:

[PATCH] D131021: [clang][dataflow] Rename member to make it clear that it isn't stable

2022-08-02 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev created this revision. sgatev added reviewers: ymandel, xazax.hun, gribozavr2, wyt. Herald added subscribers: martong, tschuett, rnkovacs. Herald added a reviewer: NoQ. Herald added a project: All. sgatev requested review of this revision. Herald added a project: clang. Rename

[PATCH] D129097: [clang][dataflow] Handle null pointers of type std::nullptr_t

2022-08-02 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev added inline comments. Comment at: clang/include/clang/Analysis/FlowSensitive/DataflowAnalysisContext.h:96 /// /// `Type` must not be null. StorageLocation (QualType Type); This is inconsistent with the change introduced by this patch.

[PATCH] D131014: [clang][dataflow] Make the type of the post visit callback consistent

2022-08-02 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev updated this revision to Diff 449398. sgatev added a comment. Update commit message Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D131014/new/ https://reviews.llvm.org/D131014 Files:

[PATCH] D131014: [clang][dataflow] Make the type of the post visit callback consistent

2022-08-02 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev created this revision. sgatev added reviewers: ymandel, xazax.hun, gribozavr2, samestep. Herald added subscribers: martong, tschuett, rnkovacs. Herald added a reviewer: NoQ. Herald added a project: All. sgatev requested review of this revision. Herald added a project: clang. Make the type

[PATCH] D130270: [clang][dataflow] Use a dedicated bool to encode which branch was taken

2022-07-28 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev accepted this revision. sgatev added inline comments. Comment at: clang/lib/Analysis/FlowSensitive/DataflowEnvironment.cpp:103 if (Value *MergedVal = MergedEnv.createValue(Type)) if (Model.merge(Type, *Val1, Env1, *Val2, Env2, *MergedVal, MergedEnv)) return

[PATCH] D130600: [clang][dataflow] Handle return statements

2022-07-28 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev added inline comments. Comment at: clang/include/clang/Analysis/FlowSensitive/DataflowAnalysisContext.h:114 + /// + /// `return` must not be assigned a storage location. + void setReturnStorageLocation(StorageLocation ) { li.zhe.hua wrote: > samestep

[PATCH] D130600: [clang][dataflow] Handle return statements

2022-07-26 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev added inline comments. Comment at: clang/lib/Analysis/FlowSensitive/Transfer.cpp:338-339 +if (Loc == nullptr) { + // The outermost context does not set a storage location for `return`, so + // in that case we just ignore `return` statements. + return;

[PATCH] D130519: [clang][dataflow] Add explicit "AST" nodes for implications and iff

2022-07-26 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev accepted this revision. sgatev added inline comments. Comment at: clang/include/clang/Analysis/FlowSensitive/Value.h:40-41 // Synthetic boolean values are either atomic values or composites that // represent conjunctions, disjunctions, and negations.

[PATCH] D130522: [clang][dataflow] Fix SAT solver crashes on `X ^ X` and `X v X`

2022-07-26 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev accepted this revision. sgatev added inline comments. Comment at: clang/lib/Analysis/FlowSensitive/WatchedLiteralsSolver.cpp:273 + +// Visit a sub-value of `Val` (pick any, they are identical). + } else { Let's visit `C->getLeftSubValue()`

[PATCH] D130305: [clang][dataflow] Refactor ApplyBuiltinTransfer field out into DataflowAnalysisOptions struct

2022-07-22 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev accepted this revision. sgatev added inline comments. Comment at: clang/include/clang/Analysis/FlowSensitive/DataflowAnalysis.h:66 explicit DataflowAnalysis(ASTContext ) : Context(Context) {} explicit DataflowAnalysis(ASTContext , bool ApplyBuiltinTransfer) :

[PATCH] D129546: [clang][dataflow] Refactor boolean creation as a test utility.

2022-07-12 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev accepted this revision. sgatev added inline comments. Comment at: clang/unittests/Analysis/FlowSensitive/TestingSupport.h:263 +private: + std::vector> Vals; +}; `#include ` Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION

[PATCH] D129180: [clang][dataflow] Return a solution from the solver when `Constraints` are `Satisfiable`.

2022-07-07 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev accepted this revision. sgatev added inline comments. Comment at: clang/include/clang/Analysis/FlowSensitive/Solver.h:78 +Status Status; +std::optional> Solution; }; `#include "llvm/ADT/DenseMap.h"` Comment at:

[PATCH] D129180: [clang][dataflow] Return a solution from the solver when `Constraints` are `Satisfiable`.

2022-07-06 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev added inline comments. Comment at: clang/include/clang/Analysis/FlowSensitive/Solver.h:45 +enum class Assignment : int8_t { + Unassigned = -1, + AssignedFalse = 0, A solution consists of true/false assignments for all variables. Having an

[PATCH] D128924: [clang][dataflow] Replace TEST_F with TEST where possible

2022-06-30 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev accepted this revision. sgatev added a comment. Thanks! Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D128924/new/ https://reviews.llvm.org/D128924 ___ cfe-commits mailing list

[PATCH] D128833: [clang][dataflow] Handle `for` statements without conditions

2022-06-30 Thread Stanislav Gatev via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes. Closed by commit rG8207c2a66030: [clang][dataflow] Handle `for` statements without conditions (authored by sgatev). Herald added a reviewer: NoQ. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION

[PATCH] D128833: [clang][dataflow] Handle `for` statements without conditions

2022-06-29 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev created this revision. sgatev added reviewers: ymandel, xazax.hun, gribozavr2. Herald added subscribers: martong, tschuett, rnkovacs. Herald added a project: All. sgatev requested review of this revision. Herald added a project: clang. Handle `for` statements without conditions.

[PATCH] D128352: [clang][dataflow] Use diagnosis API in optional checker

2022-06-29 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev accepted this revision. sgatev added inline comments. Comment at: clang/include/clang/Analysis/FlowSensitive/DataflowAnalysis.h:126-129 +auto *Lattice = +llvm::any_cast(); +PostVisitStmt(Stmt, DataflowAnalysisState{ +

[PATCH] D127898: [clang][dataflow] Add API to separate analysis from diagnosis

2022-06-29 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev accepted this revision. sgatev added inline comments. Comment at: clang/lib/Analysis/FlowSensitive/TypeErasedDataflowAnalysis.cpp:401 + const TypeErasedDataflowAnalysisState ) { +PostVisitStmt(Stmt.getStmt(), State); + });

[PATCH] D128521: [clang][dataflow] Implement functionality to compare if two boolean values are equivalent.

2022-06-24 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev added inline comments. Comment at: clang/lib/Analysis/FlowSensitive/DataflowAnalysisContext.cpp:138 +bool DataflowAnalysisContext::equivalentBoolValues(BoolValue , + BoolValue ) { This seems unrelated to

[PATCH] D128519: [clang][dataflow] Move logic for creating implication and iff expressions into `DataflowAnalysisContext` from `DataflowEnvironment`.

2022-06-24 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev added inline comments. Comment at: clang/include/clang/Analysis/FlowSensitive/DataflowAnalysisContext.h:170 + /// will be a value that represents the true boolean literal. + BoolValue (BoolValue , BoolValue ); + Let's call it `getOrCreateImplication`

[PATCH] D128359: [clang][dataflow] Move logic for `createStorageLocation` from `DataflowEnvironment` to `DataflowAnalysisContext`.

2022-06-24 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev accepted this revision. sgatev added inline comments. This revision is now accepted and ready to land. Comment at: clang/include/clang/Analysis/FlowSensitive/DataflowAnalysisContext.h:91 + /// Creates a stable storage location appropriate for `Type`. + ///

[PATCH] D127898: [clang][dataflow] Add API to separate analysis from diagnosis

2022-06-23 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev accepted this revision. sgatev added inline comments. This revision is now accepted and ready to land. Comment at: clang/include/clang/Analysis/FlowSensitive/Diagnosis.h:57 + } + return std::move(Diags); +} Better to remove this and rely on NRVO?

[PATCH] D128056: [clang][dataflow] Singleton pointer values for null pointers.

2022-06-23 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev accepted this revision. sgatev added inline comments. Comment at: clang/include/clang/Analysis/FlowSensitive/DataflowAnalysisContext.h:164-166 + /// Returns a pointer value that represents a null pointer. Calls + /// with `PointeeType` that are canonically equivalent

[PATCH] D128359: [clang][dataflow] Move logic for `createStorageLocation` from `DataflowEnvironment` to `DataflowAnalysisContext`.

2022-06-22 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev added inline comments. Comment at: clang/include/clang/Analysis/FlowSensitive/DataflowAnalysisContext.h:91-92 + // FIXME: Rename `createOrGetStorageLocation` to `getOrCreateStorageLocation`, + // `getStableStorageLocation`, or something more appropriate. +

[PATCH] D127898: [clang][dataflow] Add API to separate analysis from diagnosis

2022-06-22 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev added inline comments. Comment at: clang/include/clang/Analysis/FlowSensitive/Models/UncheckedOptionalAccessModel.h:76 +class UncheckedOptionalAccessDiagnosis { +public: samestep wrote: > samestep wrote: > > sgatev wrote: > > > Move this to a new

[PATCH] D128357: [clang][dataflow] Store flow condition constraints in a single `FlowConditionConstraints` map.

2022-06-22 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev accepted this revision. sgatev added inline comments. This revision is now accepted and ready to land. Comment at: clang/lib/Analysis/FlowSensitive/DataflowAnalysisContext.cpp:138-150 + auto ConstraintsIt = FlowConditionConstraints.find(); + if (ConstraintsIt ==

[PATCH] D128352: [clang][dataflow] Use diagnosis API in optional checker

2022-06-22 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev added inline comments. Comment at: clang-tools-extra/clang-tidy/bugprone/UncheckedOptionalAccessCheck.cpp:58 BlockToOutputState = - dataflow::runDataflowAnalysis(*Context, Analysis, Env); + dataflow::runTypeErasedDataflowAnalysis(*Context,

[PATCH] D127898: [clang][dataflow] Add API to separate analysis from diagnosis

2022-06-22 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev added inline comments. Comment at: clang/include/clang/Analysis/FlowSensitive/Diagnosis.h:26 +template +using Diagnosis = +std::function; Let's add some documentation for `Diagnosis` and `diagnoseCFG`. Comment at:

[PATCH] D128183: [clang][dataflow] Extend flow condition in the body of a do/while loop

2022-06-20 Thread Stanislav Gatev via Phabricator via cfe-commits
This revision was landed with ongoing or failed builds. This revision was automatically updated to reflect the committed changes. sgatev marked an inline comment as done. Closed by commit rGe363c5963dc3: [clang][dataflow] Extend flow condition in the body of a do/while loop (authored by sgatev).

[PATCH] D128183: [clang][dataflow] Extend flow condition in the body of a do/while loop

2022-06-20 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev marked an inline comment as done. sgatev added inline comments. Comment at: clang/unittests/Analysis/FlowSensitive/TransferTest.cpp:3700 +EXPECT_TRUE(AfterLoopEnv.flowConditionImplies( +AfterLoopEnv.makeNot(AfterLoopFooVal))); + });

[PATCH] D128183: [clang][dataflow] Extend flow condition in the body of a do/while loop

2022-06-20 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev updated this revision to Diff 438427. sgatev added a comment. Address comments. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D128183/new/ https://reviews.llvm.org/D128183 Files: clang/lib/Analysis/FlowSensitive/DataflowEnvironment.cpp

[PATCH] D128183: [clang][dataflow] Extend flow condition in the body of a do/while loop

2022-06-20 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev created this revision. sgatev added reviewers: ymandel, xazax.hun, gribozavr2. Herald added subscribers: martong, tschuett, rnkovacs. Herald added a project: All. sgatev requested review of this revision. Herald added a project: clang. Extend flow condition in the body of a do/while loop.

[PATCH] D128060: [clang][dataflow] Extend flow condition in the body of a for loop

2022-06-20 Thread Stanislav Gatev via Phabricator via cfe-commits
This revision was landed with ongoing or failed builds. This revision was automatically updated to reflect the committed changes. sgatev marked an inline comment as done. Closed by commit rG83232099cb5e: [clang][dataflow] Extend flow condition in the body of a for loop (authored by sgatev).

[PATCH] D128060: [clang][dataflow] Extend flow condition in the body of a for loop

2022-06-20 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev marked an inline comment as done. sgatev added inline comments. Comment at: clang/lib/Analysis/FlowSensitive/TypeErasedDataflowAnalysis.cpp:92 + void VisitForStmt(const ForStmt *S) { +auto *Cond = S->getCond(); xazax.hun wrote: > Do we support

[PATCH] D128060: [clang][dataflow] Extend flow condition in the body of a for loop

2022-06-20 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev updated this revision to Diff 438257. sgatev added a comment. Address comments. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D128060/new/ https://reviews.llvm.org/D128060 Files:

[PATCH] D128013: [clang][dataflow] Add support for comma binary operator

2022-06-17 Thread Stanislav Gatev via Phabricator via cfe-commits
This revision was landed with ongoing or failed builds. This revision was automatically updated to reflect the committed changes. Closed by commit rGba53906ceff1: [clang][dataflow] Add support for comma binary operator (authored by sgatev). Repository: rG LLVM Github Monorepo CHANGES SINCE

[PATCH] D128060: [clang][dataflow] Extend flow condition in the body of a for loop

2022-06-17 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev updated this revision to Diff 437918. sgatev added a comment. Address comments. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D128060/new/ https://reviews.llvm.org/D128060 Files:

[PATCH] D128060: [clang][dataflow] Extend flow condition in the body of a for loop

2022-06-17 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev created this revision. sgatev added reviewers: ymandel, xazax.hun, gribozavr2. Herald added subscribers: martong, tschuett, rnkovacs. Herald added a project: All. sgatev requested review of this revision. Herald added a project: clang. Extend flow condition in the body of a for loop.

[PATCH] D128013: [clang][dataflow] Add support for comma binary operator

2022-06-16 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev created this revision. sgatev added reviewers: ymandel, xazax.hun, gribozavr2. Herald added subscribers: martong, tschuett, rnkovacs. Herald added a project: All. sgatev requested review of this revision. Herald added a project: clang. Add support for comma binary operator. Repository:

[PATCH] D127865: [clang][dataflow] Make `Value` and `StorageLocation` non-copyable

2022-06-15 Thread Stanislav Gatev via Phabricator via cfe-commits
This revision was landed with ongoing or failed builds. This revision was automatically updated to reflect the committed changes. Closed by commit rG0c2edf27a22e: [clang][dataflow] Make `Value` and `StorageLocation` non-copyable (authored by sgatev). Repository: rG LLVM Github Monorepo

[PATCH] D127865: [clang][dataflow] Make `Value` and `StorageLocation` non-copyable

2022-06-15 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev created this revision. sgatev added reviewers: ymandel, xazax.hun, gribozavr2. Herald added subscribers: martong, tschuett, rnkovacs. Herald added a project: All. sgatev requested review of this revision. Herald added a project: clang. This makes it harder to misuse APIs that return

[PATCH] D125931: [clang][dataflow] Add support for correlated branches to optional model

2022-06-15 Thread Stanislav Gatev via Phabricator via cfe-commits
This revision was landed with ongoing or failed builds. This revision was automatically updated to reflect the committed changes. Closed by commit rG8fcdd625856b: [clang][dataflow] Add support for correlated branches to optional model (authored by sgatev). Repository: rG LLVM Github Monorepo

[PATCH] D125931: [clang][dataflow] Add support for correlated branches to optional model

2022-06-15 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev added inline comments. Comment at: clang/lib/Analysis/FlowSensitive/Models/UncheckedOptionalAccessModel.cpp:288 +bool isEngagedOptionalValue(const Value , const Environment ) { + auto *HasValueVal = xazax.hun wrote: > I wonder whether `NonEmpty` is

[PATCH] D125931: [clang][dataflow] Add support for correlated branches to optional model

2022-06-15 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev updated this revision to Diff 437088. sgatev marked 3 inline comments as done. sgatev added a comment. Herald added a subscriber: martong. Address comments. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D125931/new/

[PATCH] D127746: [clang][dataflow] Convert `PointeeLoc` of PointerValue from reference to pointer. This allows PointeeLoc to be empty in the case of `nullptr`

2022-06-14 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev added inline comments. Comment at: clang/include/clang/Analysis/FlowSensitive/Value.h:189 public: - explicit PointerValue(StorageLocation ) + explicit PointerValue(StorageLocation *PointeeLoc) : Value(Kind::Pointer), PointeeLoc(PointeeLoc) {}

[PATCH] D127745: [clang][dataflow] Rename `getPointeeLoc` to `getReferencePointeeLoc` and `getPointerPointeeLoc` respectively for ReferenceValue and PointerValue.

2022-06-14 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev added a comment. On a high level, what's wrong with having `getPointeeLoc` members with different return types in `ReferenceValue` and `PointerValue`? Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D127745/new/

[PATCH] D125931: [clang][dataflow] Add support for correlated branches to optional model

2022-06-14 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev added inline comments. Comment at: clang/lib/Analysis/FlowSensitive/Models/UncheckedOptionalAccessModel.cpp:174 +/// property of the optional value `OptionalVal`. +void setHasValue(StructValue , BoolValue ) { + OptionalVal.setProperty("has_value", HasValueVal);

[PATCH] D125931: [clang][dataflow] Add support for correlated branches to optional model

2022-06-14 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev updated this revision to Diff 436710. sgatev marked 4 inline comments as done. sgatev added a comment. Address comments. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D125931/new/ https://reviews.llvm.org/D125931 Files:

[PATCH] D125931: [clang][dataflow] Add support for correlated branches to optional model

2022-06-13 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev marked 3 inline comments as done. sgatev added inline comments. Comment at: clang/lib/Analysis/FlowSensitive/Models/UncheckedOptionalAccessModel.cpp:596-598 + MergedEnv.makeOr( + MergedEnv.makeAnd(Env1.getFlowConditionToken(), *HasValueVal1), +

[PATCH] D125931: [clang][dataflow] Add support for correlated branches to optional model

2022-06-13 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev updated this revision to Diff 436590. sgatev added a comment. Rebase main. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D125931/new/ https://reviews.llvm.org/D125931 Files:

[PATCH] D127434: [clang][dataflow] In `optional` model, match call return via hasType

2022-06-10 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev added a comment. I see that the declaration of `operator*` in `std::unique_ptr` is `typename add_lvalue_reference::type operator*() const;`. I managed to reproduce the crash with the following snippet: #include namespace detail { template struct type_identity { using

[PATCH] D127196: [clang][dataflow] Enable use of synthetic properties on all Value instances.

2022-06-07 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev accepted this revision. sgatev added inline comments. Comment at: clang/include/clang/Analysis/FlowSensitive/Value.h:29 /// Base class for all values computed by abstract interpretation. +/// All Value instances should be separately allocated and stored by pointer +///

[PATCH] D126972: [clang][dataflow] Modify optional-checker to handle type aliases.

2022-06-03 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev accepted this revision. sgatev added inline comments. This revision is now accepted and ready to land. Comment at: clang/unittests/Analysis/FlowSensitive/UncheckedOptionalAccessModelTest.cpp:2217 +// Verifies that the check sees through aliases.

[PATCH] D126759: [clang][dataflow] Model calls returning optionals

2022-06-03 Thread Stanislav Gatev via Phabricator via cfe-commits
This revision was landed with ongoing or failed builds. This revision was automatically updated to reflect the committed changes. sgatev marked an inline comment as done. Closed by commit rG65e710c3fc03: [clang][dataflow] Model calls returning optionals (authored by sgatev). Repository: rG

[PATCH] D126759: [clang][dataflow] Model calls returning optionals

2022-06-03 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev marked an inline comment as done. sgatev added inline comments. Comment at: clang/lib/Analysis/FlowSensitive/Models/UncheckedOptionalAccessModel.cpp:161 +auto possiblyAliasedOptionalType() { + return hasUnqualifiedDesugaredType( xazax.hun wrote: >

[PATCH] D126759: [clang][dataflow] Model calls returning optionals

2022-06-03 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev updated this revision to Diff 434000. sgatev added a comment. Address comments. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D126759/new/ https://reviews.llvm.org/D126759 Files:

[PATCH] D120495: [clang][dataflow] Add transfer functions for structured bindings

2022-06-02 Thread Stanislav Gatev via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes. sgatev marked an inline comment as done. Closed by commit rG0e286b77cf7b: [clang][dataflow] Add transfer functions for structured bindings (authored by sgatev). Repository: rG LLVM Github Monorepo CHANGES SINCE LAST

[PATCH] D126759: [clang][dataflow] Model calls returning optionals

2022-06-01 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev created this revision. sgatev added reviewers: ymandel, xazax.hun, gribozavr2. Herald added subscribers: tschuett, steakhal, rnkovacs. Herald added a project: All. sgatev requested review of this revision. Herald added a project: clang. Model calls returning optionals Repository: rG

[PATCH] D120495: [clang][dataflow] Add transfer functions for structured bindings

2022-05-28 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev marked 2 inline comments as done. sgatev added inline comments. Comment at: clang/lib/Analysis/FlowSensitive/Transfer.cpp:80 +/// +/// FIXME: Consider adding support for structured bindings to the CFG builder. +class DecompositionVisitor : public ConstStmtVisitor {

  1   2   3   4   >