c++: -Wunused, constant, and generic lambda [PR96311]
We never called mark_use for a return value in a function with dependent return type. In that situation we don't know if the use is as an rvalue or lvalue, but we can use mark_exp_read instead. gcc/cp/ChangeLog: PR c++/96311 * typeck.c (check_return_expr): Call mark_exp_read in dependent case. gcc/testsuite/ChangeLog: PR c++/96311 * g++.dg/cpp1y/lambda-generic-Wunused.C: New test.
This commit is contained in:
parent
07f56824fd
commit
b07dd9b0d0
@ -10215,6 +10215,9 @@ check_return_expr (tree retval, bool *no_warning)
|
||||
dependent:
|
||||
/* We should not have changed the return value. */
|
||||
gcc_assert (retval == saved_retval);
|
||||
/* We don't know if this is an lvalue or rvalue use, but
|
||||
either way we can mark it as read. */
|
||||
mark_exp_read (retval);
|
||||
return retval;
|
||||
}
|
||||
|
||||
|
18
gcc/testsuite/g++.dg/cpp1y/lambda-generic-Wunused.C
Normal file
18
gcc/testsuite/g++.dg/cpp1y/lambda-generic-Wunused.C
Normal file
@ -0,0 +1,18 @@
|
||||
// PR c++/96311
|
||||
// { dg-do compile { target c++14 } }
|
||||
// { dg-additional-options -Wunused }
|
||||
|
||||
auto foo()
|
||||
{
|
||||
constexpr int used = 0;
|
||||
return
|
||||
[](auto unused)
|
||||
{
|
||||
return used;
|
||||
};
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
foo()(42);
|
||||
}
|
Loading…
Reference in New Issue
Block a user