mirror of git://gcc.gnu.org/git/gcc.git
re PR c++/53166 (static_assert produces bogus warning)
/cp 2012-05-04 Paolo Carlini <paolo.carlini@oracle.com> PR c++/53166 * pt.c (instantiate_class_template_1): Increase / decrease c_inhibit_evaluation_warnings around the tsubst_expr call for STATIC_ASSERT_CONDITION. (tsubst_expr, case STATIC_ASSERT): Likewise. * typeck.c (cp_build_binary_op, case EQ_EXPR/NE_EXPR): Check c_inhibit_evaluation_warnings in the OPT_Waddress warnings. /testsuite 2012-05-04 Paolo Carlini <paolo.carlini@oracle.com> PR c++/53166 * g++.dg/cpp0x/static_assert7.C: New. From-SVN: r187165
This commit is contained in:
parent
33e337e34d
commit
fb4bcc8d65
|
@ -1,3 +1,13 @@
|
|||
2012-05-04 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
PR c++/53166
|
||||
* pt.c (instantiate_class_template_1): Increase / decrease
|
||||
c_inhibit_evaluation_warnings around the tsubst_expr call
|
||||
for STATIC_ASSERT_CONDITION.
|
||||
(tsubst_expr, case STATIC_ASSERT): Likewise.
|
||||
* typeck.c (cp_build_binary_op, case EQ_EXPR/NE_EXPR): Check
|
||||
c_inhibit_evaluation_warnings in the OPT_Waddress warnings.
|
||||
|
||||
2012-05-03 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
PR c++/53186
|
||||
|
|
14
gcc/cp/pt.c
14
gcc/cp/pt.c
|
@ -8950,10 +8950,15 @@ instantiate_class_template_1 (tree type)
|
|||
/* Build new TYPE_FIELDS. */
|
||||
if (TREE_CODE (t) == STATIC_ASSERT)
|
||||
{
|
||||
tree condition =
|
||||
tree condition;
|
||||
|
||||
++c_inhibit_evaluation_warnings;
|
||||
condition =
|
||||
tsubst_expr (STATIC_ASSERT_CONDITION (t), args,
|
||||
tf_warning_or_error, NULL_TREE,
|
||||
/*integral_constant_expression_p=*/true);
|
||||
--c_inhibit_evaluation_warnings;
|
||||
|
||||
finish_static_assert (condition,
|
||||
STATIC_ASSERT_MESSAGE (t),
|
||||
STATIC_ASSERT_SOURCE_LOCATION (t),
|
||||
|
@ -13110,11 +13115,16 @@ tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl,
|
|||
|
||||
case STATIC_ASSERT:
|
||||
{
|
||||
tree condition =
|
||||
tree condition;
|
||||
|
||||
++c_inhibit_evaluation_warnings;
|
||||
condition =
|
||||
tsubst_expr (STATIC_ASSERT_CONDITION (t),
|
||||
args,
|
||||
complain, in_decl,
|
||||
/*integral_constant_expression_p=*/true);
|
||||
--c_inhibit_evaluation_warnings;
|
||||
|
||||
finish_static_assert (condition,
|
||||
STATIC_ASSERT_MESSAGE (t),
|
||||
STATIC_ASSERT_SOURCE_LOCATION (t),
|
||||
|
|
|
@ -4081,7 +4081,8 @@ cp_build_binary_op (location_t location,
|
|||
if (TREE_CODE (op0) == ADDR_EXPR
|
||||
&& decl_with_nonnull_addr_p (TREE_OPERAND (op0, 0)))
|
||||
{
|
||||
if (complain & tf_warning)
|
||||
if ((complain & tf_warning)
|
||||
&& c_inhibit_evaluation_warnings == 0)
|
||||
warning (OPT_Waddress, "the address of %qD will never be NULL",
|
||||
TREE_OPERAND (op0, 0));
|
||||
}
|
||||
|
@ -4093,7 +4094,8 @@ cp_build_binary_op (location_t location,
|
|||
if (TREE_CODE (op1) == ADDR_EXPR
|
||||
&& decl_with_nonnull_addr_p (TREE_OPERAND (op1, 0)))
|
||||
{
|
||||
if (complain & tf_warning)
|
||||
if ((complain & tf_warning)
|
||||
&& c_inhibit_evaluation_warnings == 0)
|
||||
warning (OPT_Waddress, "the address of %qD will never be NULL",
|
||||
TREE_OPERAND (op1, 0));
|
||||
}
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2012-05-04 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
PR c++/53166
|
||||
* g++.dg/cpp0x/static_assert7.C: New.
|
||||
|
||||
2012-05-04 Ulrich Weigand <ulrich.weigand@linaro.org>
|
||||
|
||||
PR tree-optimization/52633
|
||||
|
|
|
@ -0,0 +1,20 @@
|
|||
// PR c++/53166
|
||||
// { dg-options "-std=c++11 -Waddress" }
|
||||
|
||||
template <typename X, X a>
|
||||
struct A
|
||||
{
|
||||
static_assert (a != nullptr, "oops");
|
||||
static_assert (nullptr != a, "oops");
|
||||
|
||||
int f()
|
||||
{
|
||||
static_assert (a != nullptr, "oops");
|
||||
static_assert (nullptr != a, "oops");
|
||||
return 1;
|
||||
}
|
||||
};
|
||||
|
||||
int i1;
|
||||
A<int*, &i1> a1;
|
||||
int i2 = a1.f();
|
Loading…
Reference in New Issue