<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/59389>59389</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [clang-tidy] Clang-Tidy produces a false positive when returning from a lambda `cppcoreguidelines-owning-memory`
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          H-G-Hristov
      </td>
    </tr>
</table>

<pre>
    Clang-Tidy produces a false positive when returning from a lambda:

https://releases.llvm.org/15.0.0/tools/clang/tools/extra/docs/clang-tidy/checks/cppcoreguidelines/owning-memory.html#cppcoreguidelines-owning-memory

> returning a newly created resource of type 'void' or 'gsl::owner<>' from a function whose return type is not 'gsl::owner<>'C/C++[cppcoreguidelines-owning-memory](https://releases.llvm.org/15.0.0/tools/clang/tools/extra/docs/clang-tidy/checks/cppcoreguidelines/owning-memory.html)

Is caused by:

```C++
TEST(ExternalLibTest, MicrosoftGslOwner)
{
 struct S
    {
        int value{1};
    };

    const auto MakeS = [] -> ::gsl::owner<S*>
    {
        return ::gsl::owner<S*>{new S{}};
    };

    const ::gsl::owner<S*> sPtr = MakeS();

    EXPECT_EQ(sPtr->value, 1);
    EXPECT_NE(sPtr->value, 2);
}
```

but is fine:

```C++
namespace {

struct S
{
    int value{1};
};

auto MakeInt()
{
    return ::gsl::owner<S*>{new S{}};
}

}  // namespace
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMVU-v4jYQ_zTOZQQyDvl3yGH5k92Vuu1WcOitcpwJuOvYyHZg-faVIQ_Co32v1V4WRUYznhnP7zfjMXdO7jRiSZIFSVYR7_3e2PLT5OPkk5XOm2NUm-ZcLhXXu8lWNmc4WNP0Ah1waLlyCAfjpJdHhNMeNVj0vdVS76C1pgMOind1w0n8gdAVocO69_7ggo5VhFUWFXKHbqrUsZsauyOsmiVTOqWEVd4Y5QirREhhJON3bzlhVWPEbXviZXMOwh7Ft4v2cBDG4q6XDSqpMejMKaQ36bAz9jzd-04RFj8ZTh7MxrmTeD1CyUHjSZ1BWOQeG7DoTG8FgmnBnw8IhGVHIxvCMjA2SDunAvL4gzlptCRekngddge-2l4LL42G0944HE66hpIOtPFvxFgSVi0JW4QvWbyHKVkRlv9slSjGVH92IHjvsIH6_KqDSEqv3wvei3a73mwJy9ffPVrN1S-y3qLzhC3hixTWONP6j079diHtdlQ2OIPzthceNoMIAPe94Se1hyNXPZJsMSPZisSLsfVdvmuF0c4D772BL_wbboDEK7jeN5iEZrpW8qmkG8JCr72RzNAb7_hnC40n2ATvbPV_Un47Lriv3l6wXFARlgdGn2Ot__i6Xm7_XP9OWB5cAuQrg2wJs7HPyPrX9T9Zs4cTstWrThifXPc-XJdWavxPjaN5h-7ABd5Zvq6PPfFQgn_thWdSb9X_rP3A1HO8HyznnZAXEeB6q-GG7hUFUVPGTREXPMJylmZ0nqcZi6N9OW9TzGjW5A1j85SLtBBJVsR0hmmeIBaRLBllbMZoTnOasHhaJ3lbNG024_O2qQUlc4odl-o2SSLpXI9lUsR5ESleo3Ivr44tg9Gk7neOzKmSzt8HUOSlV5f3aTRXkhX88IsEJKXvTciURr1V5eOM3Em_7-upMB1hVUhz-JscrPkLhSesukANE-6C9u8AAAD__49-LVo">