aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorToon Moene <toon@moene.indiv.nluug.nl>2002-01-30 23:59:47 +0100
committerToon Moene <toon@gcc.gnu.org>2002-01-30 22:59:47 +0000
commit41ff8055c5caf3e399783c728a6c8a820b2c7a29 (patch)
treea205c250016e774fe94ee79562543f40dd404200
parent86f808dc818c23a87f1554aa0b9c11a112ac4531 (diff)
downloadgcc-41ff8055c5caf3e399783c728a6c8a820b2c7a29.zip
gcc-41ff8055c5caf3e399783c728a6c8a820b2c7a29.tar.gz
gcc-41ff8055c5caf3e399783c728a6c8a820b2c7a29.tar.bz2
intrin.c (upcasecmp_): New function.
2002-01-30 Toon Moene <toon@moene.indiv.nluug.nl> * intrin.c (upcasecmp_): New function. (ffeintrin_cmp_name_): Use it to correctly compare name and table entry for bsearch. From-SVN: r49347
-rw-r--r--gcc/f/ChangeLog6
-rw-r--r--gcc/f/intrin.c20
2 files changed, 24 insertions, 2 deletions
diff --git a/gcc/f/ChangeLog b/gcc/f/ChangeLog
index bccdcae..fb1e75b 100644
--- a/gcc/f/ChangeLog
+++ b/gcc/f/ChangeLog
@@ -1,3 +1,9 @@
+2002-01-30 Toon Moene <toon@moene.indiv.nluug.nl>
+
+ * intrin.c (upcasecmp_): New function.
+ (ffeintrin_cmp_name_): Use it to correctly compare name
+ and table entry for bsearch.
+
2002-01-26 Toon Moene <toon@moene.indiv.nluug.nl>
* intrin.c (ffeintrin_cmp_name_): Correct comparison
diff --git a/gcc/f/intrin.c b/gcc/f/intrin.c
index 9759ab7..83a478c 100644
--- a/gcc/f/intrin.c
+++ b/gcc/f/intrin.c
@@ -1153,7 +1153,23 @@ ffeintrin_check_any_ (ffebld arglist)
return FALSE;
}
-/* Compare name to intrinsic's name. Uses strcmp on arguments' names.
+/* Compare a forced-to-uppercase name with a known-upper-case name. */
+
+static int
+upcasecmp_ (const char *name, const char *ucname)
+{
+ for ( ; *name != 0 && *ucname != 0; name++, ucname++)
+ {
+ int i = TOUPPER(*name) - *ucname;
+
+ if (i != 0)
+ return i;
+ }
+
+ return *name - *ucname;
+}
+
+/* Compare name to intrinsic's name.
The intrinsics table is sorted on the upper case entries; so first
compare irrespective of case on the `uc' entry. If it matches,
compare according to the setting of intrinsics case comparison mode. */
@@ -1166,7 +1182,7 @@ ffeintrin_cmp_name_ (const void *name, const void *intrinsic)
const char *const ic = ((const struct _ffeintrin_name_ *) intrinsic)->name_ic;
int i;
- if ((i = strcasecmp (name, uc)) == 0)
+ if ((i = upcasecmp_ (name, uc)) == 0)
{
switch (ffe_case_intrin ())
{