aboutsummaryrefslogtreecommitdiff
path: root/gcc/genrecog.c
diff options
context:
space:
mode:
authorDJ Delorie <dj@redhat.com>2004-12-23 20:21:08 +0000
committerDJ Delorie <dj@redhat.com>2004-12-23 20:21:08 +0000
commit8de66c86927abc7801f623b5707cdae4ac7c2b48 (patch)
tree45fdcfc18f2bc2f5830cf0b3c5a4ce6d0ff79394 /gcc/genrecog.c
parentb56bd563d87264506bfe723d4327ad8a5530eccf (diff)
* genrecog.c (did_you_mean_codes): New.
(compute_predicate_codes): Fail unmatched codes. git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@92565 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/genrecog.c')
-rw-r--r--gcc/genrecog.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/gcc/genrecog.c b/gcc/genrecog.c
index 64cd905b0ca..2936f80afc7 100644
--- a/gcc/genrecog.c
+++ b/gcc/genrecog.c
@@ -226,6 +226,9 @@ static int error_count;
#define TRISTATE_NOT(a) \
((a) == I ? I : !(a))
+/* 0 means no warning about that code yet, 1 means warned. */
+static char did_you_mean_codes[NUM_RTX_CODE];
+
/* Recursively calculate the set of rtx codes accepted by the
predicate expression EXP, writing the result to CODES. */
static void
@@ -285,14 +288,30 @@ compute_predicate_codes (rtx exp, char codes[NUM_RTX_CODE])
while ((code = scan_comma_elt (&next_code)) != 0)
{
size_t n = next_code - code;
+ int found_it = 0;
for (i = 0; i < NUM_RTX_CODE; i++)
if (!strncmp (code, GET_RTX_NAME (i), n)
&& GET_RTX_NAME (i)[n] == '\0')
{
codes[i] = Y;
+ found_it = 1;
break;
}
+ if (!found_it)
+ {
+ message_with_line (pattern_lineno, "match_code \"%.*s\" matches nothing", n, code);
+ error_count ++;
+ for (i = 0; i < NUM_RTX_CODE; i++)
+ if (!strncasecmp (code, GET_RTX_NAME (i), n)
+ && GET_RTX_NAME (i)[n] == '\0'
+ && !did_you_mean_codes[i])
+ {
+ did_you_mean_codes[i] = 1;
+ message_with_line (pattern_lineno, "(did you mean \"%s\"?)", GET_RTX_NAME (i));
+ }
+ }
+
}
}
break;