[clang-tidy] Implement type-based check for `gsl::owner`


[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 deleted
  • 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 newed 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


JonasTothSep 12 2017, 1:00 PM
rL313066: [MinGW] Pass the undecorated entry point name to the COFF linker