aaron.ballman added inline comments.

================
Comment at: test/clang-tidy/bugprone-unused-return-value.cpp:163
+
+void noWarning() {
+  auto AsyncRetval1 = std::async(increment, 42);
----------------
khuttun wrote:
> aaron.ballman wrote:
> > khuttun wrote:
> > > aaron.ballman wrote:
> > > > Sorry, I just realized that we're missing a test case for a common 
> > > > situation -- where the result is used as part of another call 
> > > > expression. Can you add a test to `noWarning()` to make sure this does 
> > > > not warn:
> > > > ```
> > > > std::vector<int> v;
> > > > extern void f(bool);
> > > > 
> > > > f(v.empty()); // Should not warn
> > > > ```
> > > See line 199 in this file.
> > Ah, my eyes missed that, thank you!
> > 
> > Hmm, I *think* this test should also be okay, but I want to be sure:
> > ```
> > std::vector<int> v;
> > bool b = ({v.empty()}); // Should not warn
> > ({v.empty()}); // ???
> > ```
> > I kind of thing that, as an extension to the spirit of this check, any GNU 
> > expression statement whose result is unused should probably be diagnosed; 
> > what do you think?
> > 
> > You should add tests for the above so we document the expected behavior 
> > here.
> Getting a warning when just surrounding the call expression with parenthesis 
> is tested in bugprone-unused-return-value-custom.cpp.
> 
> Would your example be parsed as creating an initializer_list? In that case it 
> should not warn. I can add test cases for that.
> 
> What do you mean by "GNU expression"?
> Getting a warning when just surrounding the call expression with parenthesis 
> is tested in bugprone-unused-return-value-custom.cpp.

Yup, this is something entirely different, however.

> Would your example be parsed as creating an initializer_list? In that case it 
> should not warn. I can add test cases for that.
>
> What do you mean by "GNU expression"?

Those examples are GNU expression statements, which is a GCC extension that 
Clang also supports. See 
https://gcc.gnu.org/onlinedocs/gcc/Statement-Exprs.html for more information.

Effectively, the last statement in the GNU expression statement is the "return 
value" of the expression statement. We should make sure the warnings are 
sensible with this construct.


https://reviews.llvm.org/D41655



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to