From 483bc62e775289e1c915ab12f17967d6418a1b88 Mon Sep 17 00:00:00 2001
From: Akim Demaille <demaille@gostai.com>
Date: Thu, 9 Feb 2012 10:34:00 +0100
Subject: [PATCH 6/7] tests: lalr1.cc: check syntax_error.

	* tests/c++.at (Syntax error as exception): New.
---
 tests/c++.at |   75 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 75 insertions(+), 0 deletions(-)

diff --git a/tests/c++.at b/tests/c++.at
index d81a1fb..36c4d99 100644
--- a/tests/c++.at
+++ b/tests/c++.at
@@ -448,3 +448,78 @@ Reducing 'a'.
 ]])
 
 AT_CLEANUP
+
+
+## --------------------------- ##
+## Syntax error as exception.  ##
+## --------------------------- ##
+
+AT_SETUP([[Syntax error as exception]])
+
+AT_DATA_GRAMMAR([[input.yy]],
+[[%skeleton "lalr1.cc"
+
+%code
+{
+  int yylex (yy::parser::semantic_type *);
+}
+
+%defines
+%define variant
+%define parse.error verbose
+%define parse.trace
+%%
+
+start:
+  thing
+| start thing
+;
+
+thing:
+  error   { std::cerr << "caught error" << std::endl; }
+| item
+;
+
+item:
+  'a'
+| 's'
+  {
+    throw yy::parser::syntax_error("invalid expression");
+  }
+
+%%
+
+int
+yylex (yy::parser::semantic_type *)
+{
+  static char const *input = "as";
+  switch (int res = *input++)
+  {
+    default:
+      return res;
+  }
+}
+
+void
+yy::parser::error (const std::string &m)
+{
+  std::cerr << "error: " << m << std::endl;
+}
+
+int
+main ()
+{
+  yy::parser parser;
+  parser.set_debug_level(!!getenv("YYDEBUG"));
+  return parser.parse ();
+}
+]])
+AT_BISON_CHECK([[-o input.cc input.yy]])
+AT_COMPILE_CXX([[input]])
+
+AT_PARSER_CHECK([[./input]], [[0]], [[]],
+[[error: invalid expression
+caught error
+]])
+
+AT_CLEANUP
-- 
1.7.9

