diff options
| author | Jonas Toth <jonas.toth@gmail.com> | 2017-09-12 20:00:42 +0000 |
|---|---|---|
| committer | Jonas Toth <jonas.toth@gmail.com> | 2017-09-12 20:00:42 +0000 |
| commit | 6ccc1c342a1922f6808fb0035dafd41e65500445 (patch) | |
| tree | 011fba6613ce75a1edccc62c9d4b5f3f20371607 /clang-tools-extra/clang-tidy/cppcoreguidelines/CMakeLists.txt | |
| parent | 6d8dace43819bee0f2e787050d9660d48ffaab09 (diff) | |
| download | bcm5719-llvm-6ccc1c342a1922f6808fb0035dafd41e65500445.tar.gz bcm5719-llvm-6ccc1c342a1922f6808fb0035dafd41e65500445.zip | |
[clang-tidy] Implement type-based check for `gsl::owner`
This check implements the typebased semantic of `gsl::owner`.
Meaning, that
- only `gsl::owner` is allowed to get `delete`d
- `new` expression must be assigned to `gsl::owner`
- function calls that expect `gsl::owner` as argument, must get either an owner
or a newly created and recognized resource (in the moment only `new`ed memory)
- assignment to `gsl::owner` must be either a resource or another owner
- functions returning an `gsl::owner` are considered as factories, and their result
must be assigned to an `gsl::owner`
- classes that have an `gsl::owner`-member must declare a non-default destructor
There are some problems that occur when typededuction is in place.
For example `auto Var = function_that_returns_owner();` the type of `Var` will not be
an `gsl::owner`. This case is catched, and explicitly noted.
But cases like fully templated functions
```
template <typename T>
void f(T t) { delete t; }
// ...
f(gsl::owner<int*>(new int(42)));
```
Will created false positive (the deletion is problematic), since the type deduction
removes the wrapping `typeAlias`.
Codereview in D36354
llvm-svn: 313067
Diffstat (limited to 'clang-tools-extra/clang-tidy/cppcoreguidelines/CMakeLists.txt')
| -rw-r--r-- | clang-tools-extra/clang-tidy/cppcoreguidelines/CMakeLists.txt | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/clang-tools-extra/clang-tidy/cppcoreguidelines/CMakeLists.txt b/clang-tools-extra/clang-tidy/cppcoreguidelines/CMakeLists.txt index 43ac55d1dd1..70ee599c69e 100644 --- a/clang-tools-extra/clang-tidy/cppcoreguidelines/CMakeLists.txt +++ b/clang-tools-extra/clang-tidy/cppcoreguidelines/CMakeLists.txt @@ -4,6 +4,7 @@ add_clang_library(clangTidyCppCoreGuidelinesModule CppCoreGuidelinesTidyModule.cpp InterfacesGlobalInitCheck.cpp NoMallocCheck.cpp + OwningMemoryCheck.cpp ProBoundsArrayToPointerDecayCheck.cpp ProBoundsConstantArrayIndexCheck.cpp ProBoundsPointerArithmeticCheck.cpp |

