[PATCH] D28467: [Sema] Add warning for unused lambda captures

Aaron Ballman via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Thu Jan 12 18:45:46 PST 2017


aaron.ballman accepted this revision.
aaron.ballman added a comment.
This revision is now accepted and ready to land.

LGTM; this is an awesome new diagnostic, thank you for working on it!



================
Comment at: test/SemaCXX/warn-unused-lambda-capture.cpp:26
+  auto explicit_initialized_value_used = [j = 1] { return j + 1; };
+  auto explicit_initialized_value_unused = [j = 1] {}; // expected-warning{{lambda capture 'j' is not used}}
+
----------------
malcolm.parsons wrote:
> aaron.ballman wrote:
> > malcolm.parsons wrote:
> > > Quuxplusone wrote:
> > > > Would this still produce a diagnostic if `decltype(j)` were something complicated like `lock_guard` or `string`? Presumably it should do the same thing, more or less, as the other -Wunused diagnostics, which I think is "don't warn if the constructor/destructor might actually do important work".
> > > I was planning to check for that; thanks for the reminder.
> > One more complex case:
> > ```
> > #include <typeinfo>
> > 
> > struct B {
> >   virtual ~B() = default;
> > };
> > 
> > struct D : B {};
> > 
> > struct C {
> >   B& get_d() const;
> >   C get_c() const;
> > };
> > 
> > void f() {
> >   C c1, c2;
> >   [c1, c2] {
> >     (void)typeid(c1.get_d());
> >     (void)typeid(c2.get_c());
> >   }();
> > }
> > ```
> > Hopefully this does not diagnose `c1` as being unused but still diagnoses `c2` as unused.
> These tests are run with `-nostdsysteminc`, so I ran it manually:
> ```
> aaron.cpp:17:21: warning: expression with side effects will be evaluated despite being used as an operand to 'typeid'
>       [-Wpotentially-evaluated-expression]
>     (void)typeid(c1.get_d());
>                     ^
> aaron.cpp:16:8: warning: lambda capture 'c2' is not required to be captured for use in an unevaluated context [-Wunused-lambda-capture]
>   [c1, c2] {
>        ^
> 2 warnings generated.
> ```
Perfect!


https://reviews.llvm.org/D28467





More information about the cfe-commits mailing list