aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMichael Collison <michael.collison@linaro.org>2015-09-24 23:26:50 +0000
committerMichael Collison <collison@gcc.gnu.org>2015-09-24 23:26:50 +0000
commit4fe017f67af0b6ac09c568626227460d7a1209c1 (patch)
tree9fd539665386badc31bb931283c207d960b3116b /gcc
parent86f0bef37378a05ef620a6120b95698c3f113db8 (diff)
downloadgcc-4fe017f67af0b6ac09c568626227460d7a1209c1.zip
gcc-4fe017f67af0b6ac09c568626227460d7a1209c1.tar.gz
gcc-4fe017f67af0b6ac09c568626227460d7a1209c1.tar.bz2
re PR other/57195 (Mode attributes with specific mode iterator can not be used as mode iterators in *.md files)
2015-09-24 Michael Collison <michael.collison@linaro.org> PR other/57195 * read-md.c (read_name): Allow mode iterators inside angle brackets in rtl expressions. From-SVN: r228102
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/read-md.c19
2 files changed, 21 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index e951934..29c4245 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2015-09-24 Michael Collison <michael.collison@linaro.org>
+
+ PR other/57195
+ * read-md.c (read_name): Allow mode iterators inside angle
+ brackets in rtl expressions.
+
2015-09-24 Vladimir Makarov <vmakarov@redhat.com>
PR target/61578
diff --git a/gcc/read-md.c b/gcc/read-md.c
index 9f158ec..e26e4a6 100644
--- a/gcc/read-md.c
+++ b/gcc/read-md.c
@@ -399,20 +399,31 @@ read_name (struct md_name *name)
{
int c;
size_t i;
+ int angle_bracket_depth;
c = read_skip_spaces ();
i = 0;
+ angle_bracket_depth = 0;
while (1)
{
+ if (c == '<')
+ angle_bracket_depth++;
+
+ if ((c == '>') && (angle_bracket_depth > 0))
+ angle_bracket_depth--;
+
if (c == ' ' || c == '\n' || c == '\t' || c == '\f' || c == '\r'
|| c == EOF)
break;
- if (c == ':' || c == ')' || c == ']' || c == '"' || c == '/'
- || c == '(' || c == '[')
+ if (angle_bracket_depth == 0)
{
- unread_char (c);
- break;
+ if (c == ':' || c == ')' || c == ']'
+ || c == '"' || c == '/' || c == '(' || c == '[')
+ {
+ unread_char (c);
+ break;
+ }
}
if (i == sizeof (name->buffer) - 1)