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>
|
2012-05-03 Paolo Carlini <paolo.carlini@oracle.com>
|
||||||
|
|
||||||
PR c++/53186
|
PR c++/53186
|
||||||
|
|
20
gcc/cp/pt.c
20
gcc/cp/pt.c
|
@ -8950,10 +8950,15 @@ instantiate_class_template_1 (tree type)
|
||||||
/* Build new TYPE_FIELDS. */
|
/* Build new TYPE_FIELDS. */
|
||||||
if (TREE_CODE (t) == STATIC_ASSERT)
|
if (TREE_CODE (t) == STATIC_ASSERT)
|
||||||
{
|
{
|
||||||
tree condition =
|
tree condition;
|
||||||
tsubst_expr (STATIC_ASSERT_CONDITION (t), args,
|
|
||||||
tf_warning_or_error, NULL_TREE,
|
++c_inhibit_evaluation_warnings;
|
||||||
/*integral_constant_expression_p=*/true);
|
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,
|
finish_static_assert (condition,
|
||||||
STATIC_ASSERT_MESSAGE (t),
|
STATIC_ASSERT_MESSAGE (t),
|
||||||
STATIC_ASSERT_SOURCE_LOCATION (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:
|
case STATIC_ASSERT:
|
||||||
{
|
{
|
||||||
tree condition =
|
tree condition;
|
||||||
|
|
||||||
|
++c_inhibit_evaluation_warnings;
|
||||||
|
condition =
|
||||||
tsubst_expr (STATIC_ASSERT_CONDITION (t),
|
tsubst_expr (STATIC_ASSERT_CONDITION (t),
|
||||||
args,
|
args,
|
||||||
complain, in_decl,
|
complain, in_decl,
|
||||||
/*integral_constant_expression_p=*/true);
|
/*integral_constant_expression_p=*/true);
|
||||||
|
--c_inhibit_evaluation_warnings;
|
||||||
|
|
||||||
finish_static_assert (condition,
|
finish_static_assert (condition,
|
||||||
STATIC_ASSERT_MESSAGE (t),
|
STATIC_ASSERT_MESSAGE (t),
|
||||||
STATIC_ASSERT_SOURCE_LOCATION (t),
|
STATIC_ASSERT_SOURCE_LOCATION (t),
|
||||||
|
|
|
@ -4081,7 +4081,8 @@ cp_build_binary_op (location_t location,
|
||||||
if (TREE_CODE (op0) == ADDR_EXPR
|
if (TREE_CODE (op0) == ADDR_EXPR
|
||||||
&& decl_with_nonnull_addr_p (TREE_OPERAND (op0, 0)))
|
&& 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",
|
warning (OPT_Waddress, "the address of %qD will never be NULL",
|
||||||
TREE_OPERAND (op0, 0));
|
TREE_OPERAND (op0, 0));
|
||||||
}
|
}
|
||||||
|
@ -4093,7 +4094,8 @@ cp_build_binary_op (location_t location,
|
||||||
if (TREE_CODE (op1) == ADDR_EXPR
|
if (TREE_CODE (op1) == ADDR_EXPR
|
||||||
&& decl_with_nonnull_addr_p (TREE_OPERAND (op1, 0)))
|
&& 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",
|
warning (OPT_Waddress, "the address of %qD will never be NULL",
|
||||||
TREE_OPERAND (op1, 0));
|
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>
|
2012-05-04 Ulrich Weigand <ulrich.weigand@linaro.org>
|
||||||
|
|
||||||
PR tree-optimization/52633
|
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