diff options
author | DJ Delorie <dj@redhat.com> | 2001-11-19 17:37:12 -0500 |
---|---|---|
committer | DJ Delorie <dj@gcc.gnu.org> | 2001-11-19 17:37:12 -0500 |
commit | 53c98b1f0f371b87bb844d480b9cc963d30e3a5a (patch) | |
tree | 600d1a2fa45d18ede321e0380ab136ef1e727499 /gcc/read-rtl.c | |
parent | 8b97450d2127d14da7f544909ae73c823fefa242 (diff) | |
download | gcc-53c98b1f0f371b87bb844d480b9cc963d30e3a5a.zip gcc-53c98b1f0f371b87bb844d480b9cc963d30e3a5a.tar.gz gcc-53c98b1f0f371b87bb844d480b9cc963d30e3a5a.tar.bz2 |
read-rtl.c (ISDIGIT, ISSPACE): Make sure we have these.
* read-rtl.c (ISDIGIT, ISSPACE): Make sure we have these.
(validate_const_int): New.
(read_rtx): Validate constant integers.
* config/i386/i386.md (pmulhrwv4hi3): Use decimal constants.
From-SVN: r47187
Diffstat (limited to 'gcc/read-rtl.c')
-rw-r--r-- | gcc/read-rtl.c | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/gcc/read-rtl.c b/gcc/read-rtl.c index a366dc8..fd79176 100644 --- a/gcc/read-rtl.c +++ b/gcc/read-rtl.c @@ -25,6 +25,12 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA #include "obstack.h" #include "hashtab.h" +#ifndef ISDIGIT +#include <ctype.h> +#define ISDIGIT isdigit +#define ISSPACE isspace +#endif + #define obstack_chunk_alloc xmalloc #define obstack_chunk_free free @@ -41,6 +47,7 @@ static void read_escape PARAMS ((struct obstack *, FILE *)); static unsigned def_hash PARAMS ((const void *)); static int def_name_eq_p PARAMS ((const void *, const void *)); static void read_constants PARAMS ((FILE *infile, char *tmp_char)); +static void validate_const_int PARAMS ((FILE *, const char *)); /* Subroutines of read_rtx. */ @@ -494,6 +501,28 @@ traverse_md_constants (callback, info) htab_traverse (md_constants, callback, info); } +static void +validate_const_int (infile, string) + FILE *infile; + const char *string; +{ + const char *cp; + int valid = 1; + + cp = string; + while (*cp && ISSPACE(*cp)) + cp++; + if (*cp == '-' || *cp == '+') + cp++; + if (*cp == 0) + valid = 0; + for (; *cp; cp++) + if (! ISDIGIT (*cp)) + valid = 0; + if (!valid) + fatal_with_file_and_line (infile, "invalid decimal constant \"%s\"\n", string); +} + /* Read an rtx in printed representation from INFILE and return an actual rtx in core constructed accordingly. read_rtx is not used in the compiler proper, but rather in @@ -699,6 +728,7 @@ again: case 'w': read_name (tmp_char, infile); + validate_const_int(infile, tmp_char); #if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_INT tmp_wide = atoi (tmp_char); #else @@ -720,6 +750,7 @@ again: case 'i': case 'n': read_name (tmp_char, infile); + validate_const_int(infile, tmp_char); tmp_int = atoi (tmp_char); XINT (return_rtx, i) = tmp_int; break; |