aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Sandiford <richard.sandiford@arm.com>2023-11-05 18:24:40 +0000
committerRichard Sandiford <richard.sandiford@arm.com>2023-11-05 18:24:40 +0000
commit5bd1d548472c4c8e55c40fb3342217ace1a8e78d (patch)
tree0e638af398579b34f2d5b609696a678755d1ffaa
parent5648446cdaaa808b00c1a975373031016049ad85 (diff)
downloadgcc-5bd1d548472c4c8e55c40fb3342217ace1a8e78d.zip
gcc-5bd1d548472c4c8e55c40fb3342217ace1a8e78d.tar.gz
gcc-5bd1d548472c4c8e55c40fb3342217ace1a8e78d.tar.bz2
read-rtl: Fix infinite loop while parsing [...]
read_rtx_operand would spin endlessly for: (unspec [(...))] UNSPEC_FOO) because read_nested_rtx does nothing if the next character is not '('. gcc/ * read-rtl.cc (read_rtx_operand): Avoid spinning endlessly for invalid [...] operands.
-rw-r--r--gcc/read-rtl.cc4
1 files changed, 3 insertions, 1 deletions
diff --git a/gcc/read-rtl.cc b/gcc/read-rtl.cc
index 292f8b7..f3b5613 100644
--- a/gcc/read-rtl.cc
+++ b/gcc/read-rtl.cc
@@ -1896,8 +1896,10 @@ rtx_reader::read_rtx_operand (rtx return_rtx, int idx)
repeat_count--;
value = saved_rtx;
}
- else
+ else if (c == '(')
value = read_nested_rtx ();
+ else
+ fatal_with_file_and_line ("unexpected character in vector");
for (; repeat_count > 0; repeat_count--)
{