+2014-05-09 Jason Merrill <jason@redhat.com>
+
+ PR c++/22434
+ * call.c (build_conditional_expr_1): Don't try to pool cv-quals
+ if we didn't find a conversion.
+ Don't accept a bad conversion too early.
+
2014-05-08 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/13981
arg2_type, arg3_type);
result = error_mark_node;
}
- else if (conv2 && (!conv2->bad_p || !conv3))
+ else if (conv2 && !conv2->bad_p)
{
arg2 = convert_like (conv2, arg2, complain);
arg2 = convert_from_reference (arg2);
if (error_operand_p (arg2))
result = error_mark_node;
}
- else if (conv3 && (!conv3->bad_p || !conv2))
+ else if (conv3 && !conv3->bad_p)
{
arg3 = convert_like (conv3, arg3, complain);
arg3 = convert_from_reference (arg3);
conditional expression failing altogether, even though,
according to this step, the one operand could be converted to
the type of the other. */
- if ((conv2 || conv3)
+ if (((conv2 && !conv2->bad_p)
+ || (conv3 && !conv3->bad_p))
&& CLASS_TYPE_P (arg2_type)
&& cp_type_quals (arg2_type) != cp_type_quals (arg3_type))
arg2_type = arg3_type =
// PR c++/22434
-// { dg-options "" }
struct A
{
- A(void*); // { dg-message "initializing" }
+ A(void*);
~A();
};
void foo(const int i, bool b)
{
- b ? A(0) : i; // { dg-error "conversion" }
+ b ? A(0) : i; // { dg-error "" }
}