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 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits