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; |