hanchenye-llvm-project/clang-tools-extra/clang-tidy/utils
Jonas Toth 6ccc1c342a [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
2017-09-12 20:00:42 +00:00
..
ASTUtils.cpp [clang-tidy] Add a new Android check "android-cloexec-socket" 2017-07-12 17:43:36 +00:00
ASTUtils.h [clang-tidy] Add a new Android check "android-cloexec-socket" 2017-07-12 17:43:36 +00:00
CMakeLists.txt [clang-tidy] refactor ExprSequence out of use-after-move check 2016-12-24 12:45:07 +00:00
DeclRefExprUtils.cpp [clang-tidy] Do not trigger move fix for non-copy assignment operators in performance-unnecessary-value-param check 2017-01-19 15:51:10 +00:00
DeclRefExprUtils.h [clang-tidy] Handle constructors in performance-unnecessary-value-param 2017-01-03 12:10:44 +00:00
ExprSequence.cpp [clang-tidy] refactor ExprSequence out of use-after-move check 2016-12-24 12:45:07 +00:00
ExprSequence.h [clang-tidy] refactor ExprSequence out of use-after-move check 2016-12-24 12:45:07 +00:00
FixItHintUtils.cpp [clang-tidy] getPreviousNonCommentToken -> getPreviousToken 2017-02-06 15:46:33 +00:00
FixItHintUtils.h
HeaderFileExtensionsUtils.cpp [clang-tidy] Some tweaks on header guard checks. 2016-08-26 11:15:38 +00:00
HeaderFileExtensionsUtils.h [clang-tidy] Unify the way IncludeStyle and HeaderFileExtesions options are used 2017-07-20 12:02:03 +00:00
HeaderGuard.cpp Spelling mistakes in comments. NFCI. 2017-03-30 13:10:33 +00:00
HeaderGuard.h [clang-tidy] Unify the way IncludeStyle and HeaderFileExtesions options are used 2017-07-20 12:02:03 +00:00
IncludeInserter.cpp [clang-tools-extra] Format sources with clang-format. NFC. 2016-11-08 07:50:19 +00:00
IncludeInserter.h
IncludeSorter.cpp Correctly classify main file includes if there is a prefix added 2017-01-12 15:31:50 +00:00
IncludeSorter.h
LexerUtils.cpp [clang-tidy] getPreviousNonCommentToken -> getPreviousToken 2017-02-06 15:46:33 +00:00
LexerUtils.h [clang-tidy] getPreviousNonCommentToken -> getPreviousToken 2017-02-06 15:46:33 +00:00
Matchers.h [clang-tidy] Implement type-based check for `gsl::owner` 2017-09-12 20:00:42 +00:00
NamespaceAliaser.cpp [clang-tools-extra] Format sources with clang-format. NFC. 2016-11-08 07:50:19 +00:00
NamespaceAliaser.h Recommit "[ClangTidy] Add UsingInserter and NamespaceAliaser" 2016-10-17 08:33:59 +00:00
OptionsUtils.cpp
OptionsUtils.h
TypeTraits.cpp [clang-tools-extra] Format sources with clang-format. NFC. 2016-11-08 07:50:19 +00:00
TypeTraits.h [clang-tidy] UnnecessaryValueParamCheck - suggest std::move() if non-const value parameter can be moved. 2016-07-01 20:12:15 +00:00
UsingInserter.cpp [clang-tools-extra] Format sources with clang-format. NFC. 2016-11-08 07:50:19 +00:00
UsingInserter.h Recommit "[ClangTidy] Add UsingInserter and NamespaceAliaser" 2016-10-17 08:33:59 +00:00