| Index: gcc/gcc/genflags.c
|
| diff --git a/gcc/gcc/genflags.c b/gcc/gcc/genflags.c
|
| index b2c878d0594219c7753c1532c2c5ada4d6fad6fb..fcfd2f1bd899938e6d440ae90d77801eec4bc48e 100644
|
| --- a/gcc/gcc/genflags.c
|
| +++ b/gcc/gcc/genflags.c
|
| @@ -43,7 +43,7 @@ static void max_operand_1 (rtx);
|
| static int num_operands (rtx);
|
| static void gen_proto (rtx);
|
| static void gen_macro (const char *, int, int);
|
| -static void gen_insn (rtx);
|
| +static void gen_insn (int, rtx);
|
|
|
| /* Count the number of match_operand's found. */
|
|
|
| @@ -187,13 +187,32 @@ gen_proto (rtx insn)
|
| }
|
|
|
| static void
|
| -gen_insn (rtx insn)
|
| +gen_insn (int line_no, rtx insn)
|
| {
|
| const char *name = XSTR (insn, 0);
|
| const char *p;
|
| + const char *lt, *gt;
|
| int len;
|
| int truth = maybe_eval_c_test (XSTR (insn, 2));
|
|
|
| + lt = strchr (name, '<');
|
| + if (lt && strchr (lt + 1, '>'))
|
| + {
|
| + message_with_line (line_no, "unresolved iterator");
|
| + have_error = 1;
|
| + return;
|
| + }
|
| +
|
| + gt = strchr (name, '>');
|
| + if (lt || gt)
|
| + {
|
| + message_with_line (line_no,
|
| + "unmatched angle brackets, likely "
|
| + "an error in iterator syntax");
|
| + have_error = 1;
|
| + return;
|
| + }
|
| +
|
| /* Don't mention instructions whose names are the null string
|
| or begin with '*'. They are in the machine description just
|
| to be recognized. */
|
| @@ -260,7 +279,7 @@ main (int argc, char **argv)
|
| if (desc == NULL)
|
| break;
|
| if (GET_CODE (desc) == DEFINE_INSN || GET_CODE (desc) == DEFINE_EXPAND)
|
| - gen_insn (desc);
|
| + gen_insn (line_no, desc);
|
| }
|
|
|
| /* Print out the prototypes now. */
|
| @@ -273,7 +292,7 @@ main (int argc, char **argv)
|
|
|
| puts("\n#endif /* GCC_INSN_FLAGS_H */");
|
|
|
| - if (ferror (stdout) || fflush (stdout) || fclose (stdout))
|
| + if (have_error || ferror (stdout) || fflush (stdout) || fclose (stdout))
|
| return FATAL_EXIT_CODE;
|
|
|
| return SUCCESS_EXIT_CODE;
|
|
|