genrecog.c (validate_pattern): Check matching constraint refers to a lower numbered operand.
* genrecog.c (validate_pattern): Check matching constraint refers to a lower numbered operand. From-SVN: r222418
This commit is contained in:
parent
6d7d9f0eae
commit
6f96dcebb2
@ -1,3 +1,8 @@
|
||||
2015-04-24 Chen Gang <gang.chen.5i5j@gmail.com>
|
||||
|
||||
* genrecog.c (validate_pattern): Check matching constraint refers
|
||||
to a lower numbered operand.
|
||||
|
||||
2015-04-24 Michael Meissner <meissner@linux.vnet.ibm.com>
|
||||
|
||||
PR target/65849
|
||||
|
@ -503,7 +503,8 @@ validate_pattern (rtx pattern, rtx insn, rtx set, int set_code)
|
||||
|
||||
if (code == MATCH_OPERAND)
|
||||
{
|
||||
const char constraints0 = XSTR (pattern, 2)[0];
|
||||
const char *constraints = XSTR (pattern, 2);
|
||||
const char constraints0 = constraints[0];
|
||||
|
||||
if (!constraints_supported_in_insn_p (insn))
|
||||
{
|
||||
@ -537,6 +538,33 @@ validate_pattern (rtx pattern, rtx insn, rtx set, int set_code)
|
||||
"operand %d missing output reload",
|
||||
XINT (pattern, 0));
|
||||
}
|
||||
|
||||
/* For matching constraint in MATCH_OPERAND, the digit must be a
|
||||
smaller number than the number of the operand that uses it in the
|
||||
constraint. */
|
||||
while (1)
|
||||
{
|
||||
while (constraints[0]
|
||||
&& (constraints[0] == ' ' || constraints[0] == ','))
|
||||
constraints++;
|
||||
if (!constraints[0])
|
||||
break;
|
||||
|
||||
if (constraints[0] >= '0' && constraints[0] <= '9')
|
||||
{
|
||||
int val;
|
||||
|
||||
sscanf (constraints, "%d", &val);
|
||||
if (val >= XINT (pattern, 0))
|
||||
error_with_line (pattern_lineno,
|
||||
"constraint digit %d is not smaller than"
|
||||
" operand %d",
|
||||
val, XINT (pattern, 0));
|
||||
}
|
||||
|
||||
while (constraints[0] && constraints[0] != ',')
|
||||
constraints++;
|
||||
}
|
||||
}
|
||||
|
||||
/* Allowing non-lvalues in destinations -- particularly CONST_INT --
|
||||
|
Loading…
x
Reference in New Issue
Block a user