r368501 - Fix a false positive warning when initializing members with gsl::Owners.

Gábor Horváth via cfe-commits cfe-commits at lists.llvm.org
Fri Aug 9 17:54:16 PDT 2019


It does! Do you want me to commit that test as well?

On Fri, 9 Aug 2019 at 17:50, Nico Weber <thakis at chromium.org> wrote:

> This fixes `+  X(std::unique_ptr<int> up) : pointee(up.get()),
> pointer(std::move(up)) {}` as well, right?
>
> On Fri, Aug 9, 2019 at 8:31 PM Gabor Horvath via cfe-commits <
> cfe-commits at lists.llvm.org> wrote:
>
>> Author: xazax
>> Date: Fri Aug  9 17:32:29 2019
>> New Revision: 368501
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=368501&view=rev
>> Log:
>> Fix a false positive warning when initializing members with gsl::Owners.
>>
>> Modified:
>>     cfe/trunk/lib/Sema/SemaInit.cpp
>>     cfe/trunk/test/Sema/warn-lifetime-analysis-nocfg.cpp
>>
>> Modified: cfe/trunk/lib/Sema/SemaInit.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaInit.cpp?rev=368501&r1=368500&r2=368501&view=diff
>>
>> ==============================================================================
>> --- cfe/trunk/lib/Sema/SemaInit.cpp (original)
>> +++ cfe/trunk/lib/Sema/SemaInit.cpp Fri Aug  9 17:32:29 2019
>> @@ -7217,6 +7217,11 @@ void Sema::checkInitializerLifetime(cons
>>          if (pathContainsInit(Path))
>>            return false;
>>
>> +        // Suppress false positives for code like the below:
>> +        //   Ctor(unique_ptr<T> up) : member(*up), member2(move(up)) {}
>> +        if (IsLocalGslOwner && pathOnlyInitializesGslPointer(Path))
>> +          return false;
>> +
>>          auto *DRE = dyn_cast<DeclRefExpr>(L);
>>          auto *VD = DRE ? dyn_cast<VarDecl>(DRE->getDecl()) : nullptr;
>>          if (!VD) {
>>
>> Modified: cfe/trunk/test/Sema/warn-lifetime-analysis-nocfg.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/warn-lifetime-analysis-nocfg.cpp?rev=368501&r1=368500&r2=368501&view=diff
>>
>> ==============================================================================
>> --- cfe/trunk/test/Sema/warn-lifetime-analysis-nocfg.cpp (original)
>> +++ cfe/trunk/test/Sema/warn-lifetime-analysis-nocfg.cpp Fri Aug  9
>> 17:32:29 2019
>> @@ -120,6 +120,13 @@ void initLocalGslPtrWithTempOwner() {
>>  }
>>
>>  namespace std {
>> +template<class T> struct remove_reference       { typedef T type; };
>> +template<class T> struct remove_reference<T &>  { typedef T type; };
>> +template<class T> struct remove_reference<T &&> { typedef T type; };
>> +
>> +template<class T>
>> +typename remove_reference<T>::type &&move(T &&t) noexcept;
>> +
>>  template <typename T>
>>  struct basic_iterator {
>>    basic_iterator operator++();
>> @@ -153,6 +160,7 @@ struct basic_string {
>>
>>  template<typename T>
>>  struct unique_ptr {
>> +  T &operator*();
>>    T *get() const;
>>  };
>>
>> @@ -217,3 +225,10 @@ int &doNotFollowReferencesForLocalOwner(
>>  const char *trackThroughMultiplePointer() {
>>    return
>> std::basic_string_view<char>(std::basic_string<char>()).begin(); //
>> expected-warning {{returning address of local temporary object}}
>>  }
>> +
>> +struct X {
>> +  X(std::unique_ptr<int> up) : pointee(*up), pointer(std::move(up)) {}
>> +
>> +  int &pointee;
>> +  std::unique_ptr<int> pointer;
>> +};
>>
>>
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at lists.llvm.org
>> https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20190809/ba954a2a/attachment.html>


More information about the cfe-commits mailing list