Commit cd95a0d5 by Mikhail Maltsev Committed by Mikhail Maltsev

re PR c++/65882 (Internal compiler error: Error reporting routines re-entered)

PR c++/65882

gcc/cp/
	* call.c (build_new_op_1): Check tf_warning flag in all cases.

gcc/testsuite/
	* g++.dg/diagnostic/inhibit-warn-1.C: New test.
	* g++.dg/diagnostic/inhibit-warn-2.C: New test.

From-SVN: r224702
parent 3cad5f64
2015-06-20 Mikhail Maltsev <maltsevm@gmail.com>
PR c++/65882
* call.c (build_new_op_1): Check tf_warning flag in all cases.
2015-06-19 Jason Merrill <jason@redhat.com> 2015-06-19 Jason Merrill <jason@redhat.com>
PR c++/66585 PR c++/66585
......
...@@ -5640,8 +5640,9 @@ build_new_op_1 (location_t loc, enum tree_code code, int flags, tree arg1, ...@@ -5640,8 +5640,9 @@ build_new_op_1 (location_t loc, enum tree_code code, int flags, tree arg1,
case TRUTH_ORIF_EXPR: case TRUTH_ORIF_EXPR:
case TRUTH_AND_EXPR: case TRUTH_AND_EXPR:
case TRUTH_OR_EXPR: case TRUTH_OR_EXPR:
warn_logical_operator (loc, code, boolean_type_node, if (complain & tf_warning)
code_orig_arg1, arg1, code_orig_arg2, arg2); warn_logical_operator (loc, code, boolean_type_node,
code_orig_arg1, arg1, code_orig_arg2, arg2);
/* Fall through. */ /* Fall through. */
case GT_EXPR: case GT_EXPR:
case LT_EXPR: case LT_EXPR:
...@@ -5649,8 +5650,9 @@ build_new_op_1 (location_t loc, enum tree_code code, int flags, tree arg1, ...@@ -5649,8 +5650,9 @@ build_new_op_1 (location_t loc, enum tree_code code, int flags, tree arg1,
case LE_EXPR: case LE_EXPR:
case EQ_EXPR: case EQ_EXPR:
case NE_EXPR: case NE_EXPR:
if ((code_orig_arg1 == BOOLEAN_TYPE) if ((complain & tf_warning)
^ (code_orig_arg2 == BOOLEAN_TYPE)) && ((code_orig_arg1 == BOOLEAN_TYPE)
^ (code_orig_arg2 == BOOLEAN_TYPE)))
maybe_warn_bool_compare (loc, code, arg1, arg2); maybe_warn_bool_compare (loc, code, arg1, arg2);
/* Fall through. */ /* Fall through. */
case PLUS_EXPR: case PLUS_EXPR:
......
2015-06-20 Mikhail Maltsev <maltsevm@gmail.com>
PR c++/65882
* g++.dg/diagnostic/inhibit-warn-1.C: New test.
* g++.dg/diagnostic/inhibit-warn-2.C: New test.
2015-06-19 Eric Botcazou <ebotcazou@adacore.com> 2015-06-19 Eric Botcazou <ebotcazou@adacore.com>
* gnat.dg/specs/debug1.ads: Adjust. * gnat.dg/specs/debug1.ads: Adjust.
......
// PR c++/65882
// { dg-do compile { target c++11 } }
// { dg-options "-Wbool-compare" }
// Check that we don't ICE because of reentering error reporting routines while
// evaluating template parameters
template<typename>
struct type_function {
static constexpr bool value = false;
};
template<bool>
struct dependent_type {
typedef int type;
};
template<typename T>
typename dependent_type<(5 > type_function<T>::value)>::type
bar();
template<typename T>
typename dependent_type<(5 > type_function<T>::value)>::type
foo()
{
return bar<int>();
}
int main()
{
foo<int>();
}
// PR c++/65882
// PR c++/66467
// { dg-do compile }
template <bool>
struct A
{
typedef int type;
};
struct B
{
static const int value = 0;
};
template <class>
struct C
{
typedef int type;
};
template <class>
struct F : B {};
class D
{
template <class Expr>
typename A<F<typename C<Expr>::type>::value || B::value>::type
operator=(Expr); // { dg-message "declared" }
};
void fn1()
{
D opt;
opt = 0; // { dg-error "private" }
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment