[PATCH] D124395: [clang][dataflow] Optimize flow condition representation

2022-04-25 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. Represent flow conditions as Token <=> Constraints bic

[PATCH] D124395: [clang][dataflow] Optimize flow condition representation

2022-04-25 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev updated this revision to Diff 424930. sgatev added a comment. Mark methods as const. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D124395/new/ https://reviews.llvm.org/D124395 Files: clang/include/clang/Analysis/FlowSensitive/DataflowAnal

[PATCH] D124395: [clang][dataflow] Optimize flow condition representation

2022-04-26 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev updated this revision to Diff 425143. sgatev marked 2 inline comments as done. sgatev added a comment. Address comments. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D124395/new/ https://reviews.llvm.org/D124395 Files: clang/include/clang

[PATCH] D124395: [clang][dataflow] Optimize flow condition representation

2022-04-26 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev marked an inline comment as done. sgatev added a comment. In D124395#3472974 , @xazax.hun wrote: > Nice! Did you do some measurements? Does this improve the performance or > decrease the memory consumption? I didn't do any measurements :( I imple

[PATCH] D124395: [clang][dataflow] Optimize flow condition representation

2022-04-26 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev updated this revision to Diff 425221. 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/D124395/new/ https://reviews.llvm.org/D124395 Files: clang/include/clang

[PATCH] D124395: [clang][dataflow] Optimize flow condition representation

2022-04-26 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev marked an inline comment as done. sgatev added a comment. In D124395#3474597 , @ymandel wrote: > Nice work. On the surface, this adds complexity to the system and so should > be justified in terms of performance improvements. However, having read

[PATCH] D124540: [clang][dataflow] Perform structural comparison of indirection values in `join`.

2022-04-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:357-365 +// FIXME: add unit tests that cover this statement. +if (auto *IndVal1 = dyn_cast(Val)) { + auto *IndVal2 = cast(It->second); +

[PATCH] D124395: [clang][dataflow] Optimize flow condition representation

2022-05-01 Thread Stanislav Gatev via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes. Closed by commit rG955a05a2782e: [clang][dataflow] Optimize flow condition representation (authored by sgatev). Changed prior to commit: https://reviews.llvm.org/D124395?vs=425221&id=426298#toc Repository: rG LLVM Gith

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

2022-05-03 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev added inline comments. Herald added a project: All. Comment at: clang/lib/Analysis/FlowSensitive/Transfer.cpp:80 +/// +/// FIXME: Consider adding support for structured bindings to the CFG builder. +class DecompositionVisitor : public ConstStmtVisitor { xa

[PATCH] D124807: [clang][dataflow] Avoid assert for invalid cast to BoolValue

2022-05-03 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev added inline comments. Comment at: clang/lib/Analysis/FlowSensitive/TypeErasedDataflowAnalysis.cpp:78 +/// and integers in the framework. +static const Expr *ignoreParenImpCastsExceptToBool(const Expr *E) { + const Expr *LastE = nullptr; I don't recall wh

[PATCH] D124807: [clang][dataflow] Avoid assert for invalid cast to BoolValue

2022-05-03 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev added inline comments. Comment at: clang/lib/Analysis/FlowSensitive/TypeErasedDataflowAnalysis.cpp:78 +/// and integers in the framework. +static const Expr *ignoreParenImpCastsExceptToBool(const Expr *E) { + const Expr *LastE = nullptr; xazax.hun wrote:

[PATCH] D124807: [clang][dataflow] Only skip ExprWithCleanups when visiting terminators

2022-05-04 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev added inline comments. Comment at: clang/include/clang/Analysis/FlowSensitive/DataflowEnvironment.h:230 + /// + /// Requirements: + /// Why add these as requirements instead of skipping past `ExprWithCleanups` internally, as we currently do for parens?

[PATCH] D124807: [clang][dataflow] Only skip ExprWithCleanups when visiting terminators

2022-05-04 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev accepted this revision. sgatev added a comment. Looks great! Thank you! Comment at: clang/unittests/Analysis/FlowSensitive/TypeErasedDataflowAnalysisTest.cpp:1156 +// FIXME: Remove this test once it provides no additional test coverage. +TEST_F(FlowConditionTest, DoesNo

[PATCH] D124943: [clang][dataflow] Add flowConditionIsTautology function

2022-05-04 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:176-177 + /// Returns true if the constraints of the flow condition identified by + /// `Token` is always true. + bool flowCondition

[PATCH] D121120: [clang-tidy] New check for safe usage of `std::optional` and like types.

2022-05-05 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev added inline comments. Comment at: clang-tools-extra/clang-tidy/bugprone/UncheckedOptionalAccessCheck.cpp:39-45 + using dataflow::ControlFlowContext; + using dataflow::DataflowAnalysisContext; + using dataflow::DataflowAnalysisState; + using dataflow::Environment; +

[PATCH] D121120: [clang-tidy] New check for safe usage of `std::optional` and like types.

2022-05-06 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev accepted this revision. sgatev added inline comments. Comment at: clang-tools-extra/clang-tidy/bugprone/UncheckedOptionalAccessCheck.cpp:39-45 + using dataflow::ControlFlowContext; + using dataflow::DataflowAnalysisContext; + using dataflow::DataflowAnalysisState; + u

[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 https://revie

[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(Context) {} explicit DataflowAnalysis(ASTContext &Context, bool ApplyBuiltinTra

[PATCH] D124932: [clang][dataflow] Track `optional` contents in `optional` model.

2022-05-10 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev added inline comments. Comment at: clang/lib/Analysis/FlowSensitive/Models/UncheckedOptionalAccessModel.cpp:170 /// Returns the symbolic value that represents the "has_value" property of the -/// optional value `Val`. Returns null if `Val` is null. -BoolValue *getHasValu

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

2022-05-18 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. Add support for correlated branches to the std::option

[PATCH] D114234: [clang][dataflow] Add base types for building dataflow analyses

2021-11-19 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev created this revision. sgatev added reviewers: ymandel, NoQ, xazax.hun, gribozavr. Herald added subscribers: rnkovacs, mgorny. sgatev requested review of this revision. Herald added a project: clang. This is part of the implementation of the dataflow analysis framework. See "[RFC] A dataflo

[PATCH] D114234: [clang][dataflow] Add base types for building dataflow analyses

2021-11-19 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev updated this revision to Diff 388465. sgatev added a comment. Fix ifndefs. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D114234/new/ https://reviews.llvm.org/D114234 Files: clang/include/clang/Analysis/FlowSensitive/DataflowAnalysis.h c

[PATCH] D114234: [clang][dataflow] Add base types for building dataflow analyses

2021-11-19 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev updated this revision to Diff 388469. sgatev added a comment. Use triple slash at the start of declaration comments. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D114234/new/ https://reviews.llvm.org/D114234 Files: clang/include/clang/Ana

[PATCH] D114234: [clang][dataflow] Add base types for building dataflow analyses

2021-11-19 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev updated this revision to Diff 388490. sgatev added a comment. Add using namespace declarations in the cpp file. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D114234/new/ https://reviews.llvm.org/D114234 Files: clang/include/clang/Analysis

[PATCH] D114234: [clang][dataflow] Add base types for building dataflow analyses

2021-11-23 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev updated this revision to Diff 389166. sgatev added a comment. Remove unnecessary constructor. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D114234/new/ https://reviews.llvm.org/D114234 Files: clang/include/clang/Analysis/FlowSensitive/Dat

[PATCH] D114234: [clang][dataflow] Add base types for building dataflow analyses

2021-11-23 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev updated this revision to Diff 389189. sgatev marked an inline comment as done. sgatev added a comment. Add a note about asserting the requirements of the CFG object. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D114234/new/ https://reviews.l

[PATCH] D114234: [clang][dataflow] Add base types for building dataflow analyses

2021-11-24 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev updated this revision to Diff 389522. sgatev marked an inline comment as done. sgatev added a comment. Document the role of the "Dynamic" suffix in the name of DataflowAnalysisDynamic and its members. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm

[PATCH] D114234: [clang][dataflow] Add base types for building dataflow analyses

2021-11-25 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev updated this revision to Diff 389773. sgatev added a comment. Put typed and type-erased interfaces in separate files. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D114234/new/ https://reviews.llvm.org/D114234 Files: clang/include/clang/An

[PATCH] D114234: [clang][dataflow] Add base types for building dataflow analyses

2021-11-25 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev updated this revision to Diff 389774. sgatev added a comment. Rename Environment.h to DataflowEnvironment.h. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D114234/new/ https://reviews.llvm.org/D114234 Files: clang/include/clang/Analysis/Fl

[PATCH] D114234: [clang][dataflow] Add base types for building dataflow analyses

2021-11-25 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev added inline comments. Comment at: clang/include/clang/Analysis/FlowSensitive/DataflowAnalysis.h:48 +/// Type-erased base class for dataflow analyses built on a single lattice type. +class DataflowAnalysisDynamic { +public: xazax.hun wrote: > Does the `Dy

[PATCH] D114234: [clang][dataflow] Add base types for building dataflow analyses

2021-11-26 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev updated this revision to Diff 390029. sgatev marked 3 inline comments as done. sgatev added a comment. Replace "Dynamic" with "TypeErased" in the names of types and their members. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D114234/new/ htt

[PATCH] D114234: [clang][dataflow] Add base types for building dataflow analyses

2021-11-26 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev updated this revision to Diff 390034. sgatev added a comment. Minor tweaks to documentation. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D114234/new/ https://reviews.llvm.org/D114234 Files: clang/include/clang/Analysis/FlowSensitive/Data

[PATCH] D114234: [clang][dataflow] Add base types for building dataflow analyses

2021-11-26 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev added a comment. Thanks Gábor and Dmitri! Comment at: clang/include/clang/Analysis/FlowSensitive/DataflowAnalysis.h:48 +/// Type-erased base class for dataflow analyses built on a single lattice type. +class DataflowAnalysisDynamic { +public: xazax.hun

[PATCH] D114721: [clang][dataflow] Add unit tests for PostOrderCFGView

2021-11-29 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev created this revision. sgatev added reviewers: ymandel, xazax.hun, gribozavr2. Herald added subscribers: rnkovacs, mgorny. sgatev requested review of this revision. Herald added a project: clang. This adds unit tests for the PostOrderCFGView class which will be used as part of the implement

[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] 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] 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; C

[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 &L, + Environment &Env) {} --

[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" Th

[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 you

[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] 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 &createTopBoolValue() { +return takeOwnership(std::make_unique()); Please add a comment. Comment at: clang

[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: clang/unittests/Analysis/FlowSensitive/Va

[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] 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] 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] 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 &OptionalLoc1, - const StorageLocation &OptionalLoc2, - LatticeTransferState &State

[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 th

[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: clang/include/clang/Analysis/FlowSensitive/Models/UncheckedOptio

[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), + Merg

[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: clang/include/clan

[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 &OptionalVal, BoolValue &HasValueVal) { + OptionalVal.setProperty("has_value",

[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/ https://reviews.llvm.org/D12774

[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 &PointeeLoc) + explicit PointerValue(StorageLocation *PointeeLoc) : Value(Kind::Pointer), PointeeLoc(PointeeLoc) {} -

[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/ https://reviews.llvm.org/D

[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 &OptionalVal, const Environment &env) { + auto *HasValueVal = xazax.hun wrote: > I wonder whether `

[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 C

[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 referen

[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 CHANGES

[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] 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. Repo

[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: clang/lib/Analysis/FlowSensitive/TypeErasedDataflowAnalysis.

[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 LAS

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

2022-06-19 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: clang/lib/Analysis/FlowSensitive/TypeErasedDataflowAnalysis.

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

2022-06-19 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 `DoSt

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

2022-06-19 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). Repos

[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] 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 c

[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
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] 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: clang/include/clan

[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, Analysi

[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(&Token); + if (ConstraintsIt == Fl

[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 Unchec

[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] 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 wi

[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? https:

[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] 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 &createImplication(BoolValue &LHS, BoolValue &RHS); + Let's call it `

[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 &Val1, + BoolValue &Val2) { This seems unr

[PATCH] D126405: [clang][dataflow] Relax assert on existence of `this` pointee storage

2022-05-25 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev accepted this revision. sgatev added inline comments. Comment at: clang/lib/Analysis/FlowSensitive/Transfer.cpp:282 auto *ThisPointeeLoc = Env.getThisPointeeStorageLocation(); -assert(ThisPointeeLoc != nullptr); +if (ThisPointeeLoc == nullptr) + return; -

[PATCH] D126420: [clang][dataflow] Remove private-field filtering from `StorageLocation` creation.

2022-05-25 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev added inline comments. Comment at: clang/lib/Analysis/FlowSensitive/DataflowEnvironment.cpp:407 for (const FieldDecl *Field : getAccessibleObjectFields(Type)) { assert(Field != nullptr); Why not use `getObjectFields` here too? =

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

2022-05-28 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev updated this revision to Diff 432728. sgatev added a comment. Rebase main. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D120495/new/ https://reviews.llvm.org/D120495 Files: clang/lib/Analysis/FlowSensitive/Transfer.cpp clang/unittests/A

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

2022-05-28 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev updated this revision to Diff 432731. sgatev added a comment. Address comments. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D120495/new/ https://reviews.llvm.org/D120495 Files: clang/lib/Analysis/FlowSensitive/Transfer.cpp clang/unitte

[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 { ---

[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 LLV

[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 ACTI

[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: clang/lib/Analysis/FlowSensitive/Models/UncheckedOptionalAcc

[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: > Does

[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 LLVM

[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. +TEST_P(UncheckedOptiona

[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 +/// fo

[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 typ

[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: c

[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 BlockReachable

[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 resu

[PATCH] D117493: [clang][dataflow] Replace initValueInStorageLocation with createValue

2022-01-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 rG782eced56149: [clang][dataflow] Replace initValueInStorageLocation with createValue (authored by sgatev). Herald added a subscriber: steakhal. Repos

[PATCH] D117496: [clang][dataflow] Add transfer function for addrof

2022-01-18 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/Transfer.cpp:190 Env.setValue(Loc, Env.takeOwnership(std::make_unique( SubExprVal->getPointeeLoc(; + break; ---

[PATCH] D117496: [clang][dataflow] Add transfer function for addrof

2022-01-18 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 rG59e031ff9057: [clang][dataflow] Add transfer function for addrof (authored by sgatev). Repository: rG LLV

[PATCH] D117563: [clang][dataflow] Remove obsolete FIXME

2022-01-18 Thread Stanislav Gatev via Phabricator via cfe-commits
sgatev created this revision. sgatev added reviewers: ymandel, xazax.hun, gribozavr2. Herald added subscribers: steakhal, rnkovacs. sgatev requested review of this revision. Herald added a project: clang. The FIXME is no longer relevant as ControlFlowContext centralizes the construction of the CFG

<    1   2   3   4   >