summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorJonas Toth <jonas.toth@gmail.com>2017-09-12 16:20:51 +0000
committerJonas Toth <jonas.toth@gmail.com>2017-09-12 16:20:51 +0000
commita5d53274f34f33a9c1edc833072d4159c7e7ba92 (patch)
tree87f1996db178a8a2e746bad8062f969602ee28aa /llvm/lib
parent7fac4b2f25885d515502391fcb0b54f78e2b6dde (diff)
downloadbcm5719-llvm-a5d53274f34f33a9c1edc833072d4159c7e7ba92.tar.gz
bcm5719-llvm-a5d53274f34f33a9c1edc833072d4159c7e7ba92.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`. Please give your comments :) llvm-svn: 313043
Diffstat (limited to 'llvm/lib')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud