mirror of
https://github.com/archlinuxarm/PKGBUILDs.git
synced 2024-11-28 22:57:37 +00:00
67 lines
1.9 KiB
Diff
67 lines
1.9 KiB
Diff
|
diff --git a/gcc/cp/call.c b/gcc/cp/call.c
|
||
|
index 7bdf236..689d542 100644
|
||
|
--- a/gcc/cp/call.c
|
||
|
+++ b/gcc/cp/call.c
|
||
|
@@ -5677,8 +5677,9 @@ build_new_op_1 (location_t loc, enum tree_code code, int flags, tree arg1,
|
||
|
case TRUTH_ORIF_EXPR:
|
||
|
case TRUTH_AND_EXPR:
|
||
|
case TRUTH_OR_EXPR:
|
||
|
- warn_logical_operator (loc, code, boolean_type_node,
|
||
|
- code_orig_arg1, arg1, code_orig_arg2, arg2);
|
||
|
+ if (complain & tf_warning)
|
||
|
+ warn_logical_operator (loc, code, boolean_type_node,
|
||
|
+ code_orig_arg1, arg1, code_orig_arg2, arg2);
|
||
|
/* Fall through. */
|
||
|
case GT_EXPR:
|
||
|
case LT_EXPR:
|
||
|
@@ -5686,8 +5687,9 @@ build_new_op_1 (location_t loc, enum tree_code code, int flags, tree arg1,
|
||
|
case LE_EXPR:
|
||
|
case EQ_EXPR:
|
||
|
case NE_EXPR:
|
||
|
- if ((code_orig_arg1 == BOOLEAN_TYPE)
|
||
|
- ^ (code_orig_arg2 == BOOLEAN_TYPE))
|
||
|
+ if ((complain & tf_warning)
|
||
|
+ && ((code_orig_arg1 == BOOLEAN_TYPE)
|
||
|
+ ^ (code_orig_arg2 == BOOLEAN_TYPE)))
|
||
|
maybe_warn_bool_compare (loc, code, arg1, arg2);
|
||
|
/* Fall through. */
|
||
|
case PLUS_EXPR:
|
||
|
diff --git a/gcc/testsuite/g++.dg/diagnostic/inhibit-warn.C b/gcc/testsuite/g++.dg/diagnostic/inhibit-warn.C
|
||
|
new file mode 100644
|
||
|
index 0000000..5655eb4
|
||
|
--- /dev/null
|
||
|
+++ b/gcc/testsuite/g++.dg/diagnostic/inhibit-warn.C
|
||
|
@@ -0,0 +1,32 @@
|
||
|
+// 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>();
|
||
|
+}
|