(default_conversion): Pass through non-lvalue arrays without any conversion and/or error messages.
(default_conversion): Pass through non-lvalue arrays without any conversion and/or error messages. Such operands are perfectly OK in many contexts. (build_conditional_expr): Do default_conversion before testing for ERROR_MARK. From-SVN: r4281
This commit is contained in:
parent
b61cccc267
commit
e855c5ce20
|
@ -986,8 +986,8 @@ default_conversion (exp)
|
||||||
if (!lvalue_p (exp)
|
if (!lvalue_p (exp)
|
||||||
&& ! (TREE_CODE (exp) == CONSTRUCTOR && TREE_STATIC (exp)))
|
&& ! (TREE_CODE (exp) == CONSTRUCTOR && TREE_STATIC (exp)))
|
||||||
{
|
{
|
||||||
error ("invalid use of non-lvalue array");
|
/* Non-lvalue arrays do not decay into pointers. */
|
||||||
return error_mark_node;
|
return exp;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (TYPE_READONLY (type) || TYPE_VOLATILE (type))
|
if (TYPE_READONLY (type) || TYPE_VOLATILE (type))
|
||||||
|
@ -3560,11 +3560,6 @@ build_conditional_expr (ifexp, op1, op2)
|
||||||
|
|
||||||
ifexp = truthvalue_conversion (default_conversion (ifexp));
|
ifexp = truthvalue_conversion (default_conversion (ifexp));
|
||||||
|
|
||||||
if (TREE_CODE (ifexp) == ERROR_MARK
|
|
||||||
|| TREE_CODE (TREE_TYPE (op1)) == ERROR_MARK
|
|
||||||
|| TREE_CODE (TREE_TYPE (op2)) == ERROR_MARK)
|
|
||||||
return error_mark_node;
|
|
||||||
|
|
||||||
#if 0 /* Produces wrong result if within sizeof. */
|
#if 0 /* Produces wrong result if within sizeof. */
|
||||||
/* Don't promote the operands separately if they promote
|
/* Don't promote the operands separately if they promote
|
||||||
the same way. Return the unpromoted type and let the combined
|
the same way. Return the unpromoted type and let the combined
|
||||||
|
@ -3582,13 +3577,18 @@ build_conditional_expr (ifexp, op1, op2)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* They don't match; promote them both and then try to reconcile them. */
|
/* Promote both alternatives. */
|
||||||
|
|
||||||
if (TREE_CODE (TREE_TYPE (op1)) != VOID_TYPE)
|
if (TREE_CODE (TREE_TYPE (op1)) != VOID_TYPE)
|
||||||
op1 = default_conversion (op1);
|
op1 = default_conversion (op1);
|
||||||
if (TREE_CODE (TREE_TYPE (op2)) != VOID_TYPE)
|
if (TREE_CODE (TREE_TYPE (op2)) != VOID_TYPE)
|
||||||
op2 = default_conversion (op2);
|
op2 = default_conversion (op2);
|
||||||
|
|
||||||
|
if (TREE_CODE (ifexp) == ERROR_MARK
|
||||||
|
|| TREE_CODE (TREE_TYPE (op1)) == ERROR_MARK
|
||||||
|
|| TREE_CODE (TREE_TYPE (op2)) == ERROR_MARK)
|
||||||
|
return error_mark_node;
|
||||||
|
|
||||||
type1 = TREE_TYPE (op1);
|
type1 = TREE_TYPE (op1);
|
||||||
code1 = TREE_CODE (type1);
|
code1 = TREE_CODE (type1);
|
||||||
type2 = TREE_TYPE (op2);
|
type2 = TREE_TYPE (op2);
|
||||||
|
|
Loading…
Reference in New Issue