re PR c++/79184 (-Wint-in-bool-context triggered erroneously in template parameter)
PR c++/79184 * cvt.c (ocp_convert): Add a sentinel against -Wint-in-bool-context if warnings shouldn't be given. * g++.dg/warn/Wint-in-bool-context-1.C: New. From-SVN: r245335
This commit is contained in:
parent
6f4f30bf31
commit
3799a5b853
4 changed files with 32 additions and 1 deletions
|
@ -4,6 +4,10 @@
|
|||
* pt.c (type_dependent_expression_p): Check if the expression type
|
||||
is null.
|
||||
|
||||
PR c++/79184
|
||||
* cvt.c (ocp_convert): Add a sentinel against -Wint-in-bool-context
|
||||
if warnings shouldn't be given.
|
||||
|
||||
2017-02-10 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
PR c++/71737
|
||||
|
|
10
gcc/cp/cvt.c
10
gcc/cp/cvt.c
|
@ -798,7 +798,15 @@ ocp_convert (tree type, tree expr, int convtype, int flags,
|
|||
to the underlying type first. */
|
||||
if (SCOPED_ENUM_P (intype) && (convtype & CONV_STATIC))
|
||||
e = build_nop (ENUM_UNDERLYING_TYPE (intype), e);
|
||||
return cp_truthvalue_conversion (e);
|
||||
if (complain & tf_warning)
|
||||
return cp_truthvalue_conversion (e);
|
||||
else
|
||||
{
|
||||
/* Prevent bogus -Wint-in-bool-context warnings coming
|
||||
from c_common_truthvalue_conversion down the line. */
|
||||
warning_sentinel w (warn_int_in_bool_context);
|
||||
return cp_truthvalue_conversion (e);
|
||||
}
|
||||
}
|
||||
|
||||
converted = convert_to_integer_maybe_fold (type, e, dofold);
|
||||
|
|
|
@ -3,6 +3,9 @@
|
|||
PR c++/79435
|
||||
* g++.dg/cpp1y/pr79435.C: New.
|
||||
|
||||
PR c++/79184
|
||||
* g++.dg/warn/Wint-in-bool-context-1.C: New.
|
||||
|
||||
2017-02-10 Christophe Lyon <christophe.lyon@linaro.org>
|
||||
|
||||
* gcc.target/aarch64/advsimd-intrinsics/p64_p128.c
|
||||
|
|
16
gcc/testsuite/g++.dg/warn/Wint-in-bool-context-1.C
Normal file
16
gcc/testsuite/g++.dg/warn/Wint-in-bool-context-1.C
Normal file
|
@ -0,0 +1,16 @@
|
|||
// PR c++/79184
|
||||
// { dg-do compile }
|
||||
// { dg-options "-Wint-in-bool-context" }
|
||||
|
||||
enum { E = 2 };
|
||||
template <bool> void f(int) { }
|
||||
template <int> void f() {}
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
f<1 * 1>(); // { dg-bogus "in boolean context" }
|
||||
f<1 << 1>(); // { dg-bogus "in boolean context" }
|
||||
f<1 ? 3 : 2>(); // { dg-bogus "in boolean context" }
|
||||
f<E>(); // { dg-bogus "in boolean context" }
|
||||
}
|
Loading…
Add table
Reference in a new issue