===================================================================
@@ -1660,7 +1660,9 @@ force_paren_expr (tree expr)
tree type = unlowered_expr_type (expr);
bool rval = !!(kind & clk_rvalueref);
type = cp_build_reference_type (type, rval);
+ ++c_inhibit_evaluation_warnings;
expr = build_static_cast (type, expr, tf_error);
+ --c_inhibit_evaluation_warnings;
if (expr != error_mark_node)
REF_PARENTHESIZED_P (expr) = true;
}
===================================================================
@@ -6047,7 +6047,8 @@ cxx_mark_addressable (tree exp)
("address of explicit register variable %qD requested", x);
return false;
}
- else if (extra_warnings)
+ else if (extra_warnings
+ && c_inhibit_evaluation_warnings == 0)
warning
(OPT_Wextra, "address requested for %qD, which is declared %<register%>", x);
}
===================================================================
@@ -0,0 +1,9 @@
+// PR c++/60955
+// { dg-options "-Wextra" }
+
+unsigned int erroneous_warning(register int a) {
+ if ((a) & 0xff) return 1; else return 0;
+}
+unsigned int no_erroneous_warning(register int a) {
+ if (a & 0xff) return 1; else return 0;
+}