re PR c++/92666 (bogus -Wunused-but-set-variable in gcov.c with -Wno-restrict)

PR c++/92666
	* call.c (convert_arg_to_ellipsis): For floating point or
	decltype(nullptr) arguments call mark_rvalue_use.

	* g++.dg/warn/Wunused-var-36.C: New test.

From-SVN: r279681
This commit is contained in:
Jakub Jelinek 2019-12-21 00:16:58 +01:00 committed by Jakub Jelinek
parent 6c7b84305a
commit 0bd002bf2e
4 changed files with 34 additions and 0 deletions

View File

@ -1,5 +1,9 @@
2019-12-20 Jakub Jelinek <jakub@redhat.com>
PR c++/92666
* call.c (convert_arg_to_ellipsis): For floating point or
decltype(nullptr) arguments call mark_rvalue_use.
PR c++/92992
* call.c (convert_arg_to_ellipsis): For decltype(nullptr) arguments
that have side-effects use cp_build_compound_expr.

View File

@ -7819,10 +7819,12 @@ convert_arg_to_ellipsis (tree arg, tsubst_flags_t complain)
"implicit conversion from %qH to %qI when passing "
"argument to function",
arg_type, double_type_node);
arg = mark_rvalue_use (arg);
arg = convert_to_real_nofold (double_type_node, arg);
}
else if (NULLPTR_TYPE_P (arg_type))
{
arg = mark_rvalue_use (arg);
if (TREE_SIDE_EFFECTS (arg))
arg = cp_build_compound_expr (arg, null_pointer_node, complain);
else

View File

@ -1,5 +1,8 @@
2019-12-20 Jakub Jelinek <jakub@redhat.com>
PR c++/92666
* g++.dg/warn/Wunused-var-36.C: New test.
PR c++/92992
* g++.dg/cpp0x/nullptr45.C: New test.

View File

@ -0,0 +1,25 @@
// PR c++/92666
// { dg-do compile }
// { dg-options "-Wunused-but-set-variable" }
int bar (int, ...);
#if __cplusplus >= 201103L
enum class E : int { F = 0, G = 1 };
#endif
struct S { int s; };
void
foo ()
{
float r = 1.0f; // { dg-bogus "set but not used" }
int i = 2; // { dg-bogus "set but not used" }
#if __cplusplus >= 201103L
decltype(nullptr) n = nullptr; // { dg-bogus "set but not used" }
E e = E::F; // { dg-bogus "set but not used" }
#else
void *n = (void *) 0;
int e = 4;
#endif
S s = { 3 }; // { dg-bogus "set but not used" }
bar (0, r, i, n, e, s);
}