[PATCH] D65549: [Sema] Prevent -Wunused-lambda-capture from generating false positive warnings on templated member function

Ziang Wan via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Jul 31 17:06:02 PDT 2019


ziangwan created this revision.
ziangwan added reviewers: rsmith, nickdesaulniers, kongyi, pirama, stephenkelly.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

This is a continuation of https://reviews.llvm.org/D44844 and a potential fix for https://bugs.llvm.org/show_bug.cgi?id=36880.

  template <typename A>
  class Variant {
  public:
    Variant() {
      [this](auto value) { Construct(value); }(5); // false positive warning about "this" capture unused.
    }
  
  
    template <typename Arg>
    void Construct(Arg value) {}
  };
  
  
  int main() {
    Variant<int> v;
    return 0;
  }

Whenever we see a `UnresolvedMemberExpr`, we always mark a this capture ODR-used, even if later on it may be resolved to a static member function. The trade-off of this fix is that it will leads to false negative in the following case:

  template <typename A>
  class OverloadedMixFalseNegative {
  public:
    OverloadedMixFalseNegative() {
      [this](auto value) { Construct(value); }(5); // warning disappears but should happen
    }
  
    static void Construct(int value) {}
    void Construct(float value) {}
  };


Repository:
  rC Clang

https://reviews.llvm.org/D65549

Files:
  clang/lib/Sema/SemaExpr.cpp
  clang/test/SemaCXX/warn-unused-lambda-capture-this.cpp

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D65549.212705.patch
Type: text/x-patch
Size: 3260 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20190801/30a7c36d/attachment.bin>


More information about the cfe-commits mailing list