tests: skip C++ tests that are too demanding for some compilers
authorAkim Demaille <akim@lrde.epita.fr>
Wed, 23 Oct 2013 13:04:15 +0000 (15:04 +0200)
committerAkim Demaille <akim@lrde.epita.fr>
Thu, 24 Oct 2013 15:22:21 +0000 (17:22 +0200)
Some tests now fail when compiled with G++ 4.3 or 4.4 on MacPorts.

* tests/local.at (AT_SKIP_IF_EXCEPTION_SUPPORT_IS_POOR): New.
* tests/c++.at (Exception safety): Use it.

tests/c++.at
tests/local.at

index 39c13f8..ac68dc0 100644 (file)
@@ -655,6 +655,8 @@ AT_CLEANUP
 m4_pushdef([AT_TEST],
 [AT_SETUP([[Exception safety $1]])
 
+AT_SKIP_IF_EXCEPTION_SUPPORT_IS_POOR
+
 AT_BISON_OPTION_PUSHDEFS([%skeleton "lalr1.cc" $1])
 
 AT_DATA_GRAMMAR([[input.yy]],
index ee00e00..72c0d52 100644 (file)
@@ -875,6 +875,49 @@ AT_PARSER_CHECK([./c-and-cxx])
 ])
 
 
+# AT_SKIP_IF_EXCEPTION_SUPPORT_IS_POOR
+# ------------------------------------
+# Check that we can expect exceptions to be handled properly.
+# GCC 4.3 and 4.4 fail https://trac.macports.org/ticket/40853.
+m4_define([AT_SKIP_IF_EXCEPTION_SUPPORT_IS_POOR],
+[AT_DATA_SOURCE([exception.cc],
+[[#include <iostream>
+#include <stdexcept>
+
+void foo()
+{
+  try
+    {
+      throw std::runtime_error("foo");
+    }
+  catch (...)
+    {
+      std::cerr << "Inner caught" << std::endl;
+      throw;
+    }
+}
+
+int main()
+{
+  try
+    {
+      foo();
+    }
+  catch (...)
+    {
+      std::cerr << "Outer caught" << std::endl;
+      return 0;
+    }
+  return 1;
+}
+]])
+AT_COMPILE_CXX([exception])
+# The "empty" quadrigraph is to protect from cfg.mk's
+# sc_at_parser_check.
+AT_CHECK([@&t@./exception || exit 77], [0], [], [ignore])
+])
+
+
 ## ---------------------------- ##
 ## Running a generated parser.  ##
 ## ---------------------------- ##