diff options
author | Richard Sandiford <richard.sandiford@arm.com> | 2023-11-05 18:24:40 +0000 |
---|---|---|
committer | Richard Sandiford <richard.sandiford@arm.com> | 2023-11-05 18:24:40 +0000 |
commit | 5bd1d548472c4c8e55c40fb3342217ace1a8e78d (patch) | |
tree | 0e638af398579b34f2d5b609696a678755d1ffaa | |
parent | 5648446cdaaa808b00c1a975373031016049ad85 (diff) | |
download | gcc-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.cc | 4 |
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--) { |