|
1 | 1 | # Breaking Changes |
2 | 2 |
|
| 3 | +## v2403 |
| 4 | + |
| 5 | +- Versioning scheme has been changed from `<month><year>` to `<year><month>` |
| 6 | +- Default build mode is no longer `SHARED` but `STATIC`. To build in shared mode, use the cmake option `BUILD_SHARED_LIBS` which we don't recommend anymore. Consider using `PHASAR_BUILD_DYNLIB` instead to build one big libphasar.so. |
| 7 | +- Build type `DebugSan` has been removed in favor of a new CMake option `PHASAR_ENABLE_SANITIZERS` that not only works in `Debug` mode. |
| 8 | + |
3 | 9 | ## v0323 |
4 | 10 |
|
5 | 11 | - `EdgeFunctionPtrType` is no longer a `std::shared_ptr`. Instead `EdgeFunction<l_t>` should be used directly. `EdgeFunction` is now a *value-type* that encapsulates its memory management by itself. |
6 | 12 | - Concrete `EdgeFunction` types no longer derive from any base-class. Instead they just need to implement the required API functions. `EdgeFunction` implementations should me move-constructible and can be implicitly cast to `EdgeFunction`. To verify that your type implements the edge function interface use the `IsEdgeFunction` type trait. The API functions have been changed as follows: |
7 | | - - All API functions of `EdgeFunction` must be `const` qualified. |
8 | | - - `EdgeFunctionPtrType composeWith(EdgeFunctionPtrType SecondFunction)` and `EdgeFunctionPtrType joinWith(EdgeFunctionPtrType OtherFunction)` have been changed to `static EdgeFunction<l_t> compose(EdgeFunctionRef<T> This, const EdgeFunction<l_t>& SecondFunction)` and `static EdgeFunction<l_t> join(EdgeFunctionRef<T> This, const EdgeFunction<l_t>& OtherFunction)` respectively. Here, the `This` parameter models the former `shared_from_this()`. |
9 | | - - `bool equal_to(EdgeFunctionPtrType Other)const` has been changed to `bool operator==(const T &Other)const noexcept`, where `T` is your concrete edge function type. |
10 | | - - `void print(llvm::raw_ostream &OS, bool IsForDebug)` has been changed to `friend llvm::raw_ostream &operator<<(llvm::raw_ostream &OS, const T& EF)`. |
| 13 | + - All API functions of `EdgeFunction` must be `const` qualified. |
| 14 | + - `EdgeFunctionPtrType composeWith(EdgeFunctionPtrType SecondFunction)` and `EdgeFunctionPtrType joinWith(EdgeFunctionPtrType OtherFunction)` have been changed to `static EdgeFunction<l_t> compose(EdgeFunctionRef<T> This, const EdgeFunction<l_t>& SecondFunction)` and `static EdgeFunction<l_t> join(EdgeFunctionRef<T> This, const EdgeFunction<l_t>& OtherFunction)` respectively. Here, the `This` parameter models the former `shared_from_this()`. |
| 15 | + - `bool equal_to(EdgeFunctionPtrType Other)const` has been changed to `bool operator==(const T &Other)const noexcept`, where `T` is your concrete edge function type. |
| 16 | + - `void print(llvm::raw_ostream &OS, bool IsForDebug)` has been changed to `friend llvm::raw_ostream &operator<<(llvm::raw_ostream &OS, const T& EF)`. |
11 | 17 | - `EdgeFunction` is tagged with `[[clang::trivial_abi]]`. Hence, you should not rely on any destruction order within a top-level statement that uses temporary `EdgeFunction` objects. |
12 | 18 | - `EdgeFunctionSingletonFactory` has been removed. Use `EdgeFunctionSingletonCache` instead. |
13 | 19 | - `TaintConfig` has been renamed to `LLVMTaintConfig`. For generic code you may want to use the LLVM-independent `TaintConfigBase` CRTP interface instead. |
14 | 20 | - Renamed `phasar/PhasarLLVM/DataFlowSolver/` to either `phasar/DataFlow/` or `phasar/PhasarLLVM/DataFlow/` depending on whether the components need LLVMCore. Analoguous changes in `lib/` and `unittests/`. |
15 | 21 | An incomplete list of moved/renamed files: |
16 | | - - `phasar/PhasarLLVM/DataFlowSolver/IfdsIde/Solver/*` => `phasar/DataFlow/IfdsIde/Solver/*` |
17 | | - - `phasar/PhasarLLVM/DataFlowSolver/IfdsIde/IDETabulationProblem.h` => `phasar/DataFlow/IfdsIde/IDETabulationProblem.h` |
18 | | - - `phasar/DB/LLVMProjectIRDB.h` => `phasar/PhasarLLVM/DB/LLVMProjectIRDB.h` |
19 | | - - ... |
| 22 | + - `phasar/PhasarLLVM/DataFlowSolver/IfdsIde/Solver/*` => `phasar/DataFlow/IfdsIde/Solver/*` |
| 23 | + - `phasar/PhasarLLVM/DataFlowSolver/IfdsIde/IDETabulationProblem.h` => `phasar/DataFlow/IfdsIde/IDETabulationProblem.h` |
| 24 | + - `phasar/DB/LLVMProjectIRDB.h` => `phasar/PhasarLLVM/DB/LLVMProjectIRDB.h` |
| 25 | + - ... |
20 | 26 | - Renamed and split up some libraries: |
21 | | - - `phasar_phasarllvm_utils` => `phasar_llvm_utils` |
22 | | - - `phasar_typehierarchy` => `phasar_llvm_typehierarchy` |
23 | | - - `phasar_ifdside` => `phasar_llvm_ifdside` |
24 | | - - `phasar_controlflow` has its LLVM dependent stuff moved to `phasar_llvm_controlflow` |
25 | | - - `phasar_db` has its LLVM dependent stuff moved to `phasar_llvm_db` |
26 | | - - `phasar_pointer` has its LLVM dependent stuff moved to `phasar_llvm_pointer` |
| 27 | + - `phasar_phasarllvm_utils` => `phasar_llvm_utils` |
| 28 | + - `phasar_typehierarchy` => `phasar_llvm_typehierarchy` |
| 29 | + - `phasar_ifdside` => `phasar_llvm_ifdside` |
| 30 | + - `phasar_controlflow` has its LLVM dependent stuff moved to `phasar_llvm_controlflow` |
| 31 | + - `phasar_db` has its LLVM dependent stuff moved to `phasar_llvm_db` |
| 32 | + - `phasar_pointer` has its LLVM dependent stuff moved to `phasar_llvm_pointer` |
27 | 33 | - Renamed the phasar tool `phasar-llvm` to `phasar-cli` |
28 | 34 | - `LLVMPointsTo[.*]` has been renamed to `LLVMAlias[.*]` |
29 | 35 | - The ctor of `LLVMAliasSet` now takes the `LLVMProjectIRDB` as pointer instead of a reference to better document that it may capture the IRDB by reference. |
|
0 commit comments