While writing some match.pd code, I was trying to figure
out why I was getting an `expected ), got (` error message
while writing an if statement with an else clause. For switch
statements, the if statements cannot have an else clause so
it would be better to have a decent error message saying that
explictly.

OK? Bootstrapped and tested on x86_64-linux-gnu.

gcc/ChangeLog:

        * genmatch.cc (parser::parse_result): For an else clause
        of an if statement inside a switch, error out explictly.
---
 gcc/genmatch.cc | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/gcc/genmatch.cc b/gcc/genmatch.cc
index a1925a747a7..03d325efdf6 100644
--- a/gcc/genmatch.cc
+++ b/gcc/genmatch.cc
@@ -4891,6 +4891,8 @@ parser::parse_result (operand *result, predicate_id 
*matcher)
                    ife->trueexpr = parse_result (result, matcher);
                  else
                    ife->trueexpr = parse_op ();
+                 if (peek ()->type == CPP_OPEN_PAREN)
+                   fatal_at (peek(), "if inside switch cannot have an else");
                  eat_token (CPP_CLOSE_PAREN);
                }
              else
-- 
2.31.1

Reply via email to