mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-22 23:01:17 +08:00
c-common.c (binary_op_error): Don't allow LROTATE_EXPR, RROTATE_EXPR or unknown code.
* c-common.c (binary_op_error): Don't allow LROTATE_EXPR, RROTATE_EXPR or unknown code. * c-typeck.c (build_binary_op): Don't allow RROTATE_EXPR, LROTATE_EXPR, MAX_EXPR, MIN_EXPR, UNORDERED_EXPR, ORDERED_EXPR, UNLT_EXPR, UNLE_EXPR, UNGT_EXPR, UNGE_EXPR, UNEQ_EXPR, LTGT_EXPR or unknown code. From-SVN: r90697
This commit is contained in:
parent
d134f39eeb
commit
37b2f2904b
@ -1,3 +1,12 @@
|
||||
2004-11-15 Joseph S. Myers <joseph@codesourcery.com>
|
||||
|
||||
* c-common.c (binary_op_error): Don't allow LROTATE_EXPR,
|
||||
RROTATE_EXPR or unknown code.
|
||||
* c-typeck.c (build_binary_op): Don't allow RROTATE_EXPR,
|
||||
LROTATE_EXPR, MAX_EXPR, MIN_EXPR, UNORDERED_EXPR, ORDERED_EXPR,
|
||||
UNLT_EXPR, UNLE_EXPR, UNGT_EXPR, UNGE_EXPR, UNEQ_EXPR, LTGT_EXPR
|
||||
or unknown code.
|
||||
|
||||
2004-11-15 Joseph S. Myers <joseph@codesourcery.com>
|
||||
|
||||
PR c/18498
|
||||
|
@ -1863,11 +1863,8 @@ binary_op_error (enum tree_code code)
|
||||
opname = "||"; break;
|
||||
case BIT_XOR_EXPR:
|
||||
opname = "^"; break;
|
||||
case LROTATE_EXPR:
|
||||
case RROTATE_EXPR:
|
||||
opname = "rotate"; break;
|
||||
default:
|
||||
opname = "unknown"; break;
|
||||
gcc_unreachable ();
|
||||
}
|
||||
error ("invalid operands to binary %s", opname);
|
||||
}
|
||||
|
@ -7281,29 +7281,6 @@ build_binary_op (enum tree_code code, tree orig_op0, tree orig_op1,
|
||||
}
|
||||
break;
|
||||
|
||||
case RROTATE_EXPR:
|
||||
case LROTATE_EXPR:
|
||||
if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
|
||||
{
|
||||
if (TREE_CODE (op1) == INTEGER_CST && skip_evaluation == 0)
|
||||
{
|
||||
if (tree_int_cst_sgn (op1) < 0)
|
||||
warning ("shift count is negative");
|
||||
else if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
|
||||
warning ("shift count >= width of type");
|
||||
}
|
||||
|
||||
/* Use the type of the value to be shifted. */
|
||||
result_type = type0;
|
||||
/* Convert the shift-count to an integer, regardless of size
|
||||
of value being shifted. */
|
||||
if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
|
||||
op1 = convert (integer_type_node, op1);
|
||||
/* Avoid converting op1 to result_type later. */
|
||||
converted = 1;
|
||||
}
|
||||
break;
|
||||
|
||||
case EQ_EXPR:
|
||||
case NE_EXPR:
|
||||
if (warn_float_equal && (code0 == REAL_TYPE || code1 == REAL_TYPE))
|
||||
@ -7365,28 +7342,6 @@ build_binary_op (enum tree_code code, tree orig_op0, tree orig_op1,
|
||||
}
|
||||
break;
|
||||
|
||||
case MAX_EXPR:
|
||||
case MIN_EXPR:
|
||||
if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE)
|
||||
&& (code1 == INTEGER_TYPE || code1 == REAL_TYPE))
|
||||
shorten = 1;
|
||||
else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
|
||||
{
|
||||
if (comp_target_types (type0, type1, 1))
|
||||
{
|
||||
result_type = common_pointer_type (type0, type1);
|
||||
if (pedantic
|
||||
&& TREE_CODE (TREE_TYPE (type0)) == FUNCTION_TYPE)
|
||||
pedwarn ("ISO C forbids ordered comparisons of pointers to functions");
|
||||
}
|
||||
else
|
||||
{
|
||||
result_type = ptr_type_node;
|
||||
pedwarn ("comparison of distinct pointer types lacks a cast");
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case LE_EXPR:
|
||||
case GE_EXPR:
|
||||
case LT_EXPR:
|
||||
@ -7439,25 +7394,8 @@ build_binary_op (enum tree_code code, tree orig_op0, tree orig_op1,
|
||||
}
|
||||
break;
|
||||
|
||||
case UNORDERED_EXPR:
|
||||
case ORDERED_EXPR:
|
||||
case UNLT_EXPR:
|
||||
case UNLE_EXPR:
|
||||
case UNGT_EXPR:
|
||||
case UNGE_EXPR:
|
||||
case UNEQ_EXPR:
|
||||
case LTGT_EXPR:
|
||||
build_type = integer_type_node;
|
||||
if (code0 != REAL_TYPE || code1 != REAL_TYPE)
|
||||
{
|
||||
error ("unordered comparison on non-floating point argument");
|
||||
return error_mark_node;
|
||||
}
|
||||
common = 1;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
gcc_unreachable ();
|
||||
}
|
||||
|
||||
if (code0 == ERROR_MARK || code1 == ERROR_MARK)
|
||||
|
Loading…
x
Reference in New Issue
Block a user