[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