[PATCH] D24562: [libcxx] Recover no-exceptions XFAILs

Asiri Rathnayake via cfe-commits cfe-commits at lists.llvm.org
Wed Sep 14 06:59:15 PDT 2016


rmaprath created this revision.
rmaprath added reviewers: EricWF, mclow.lists.
rmaprath added a subscriber: cfe-commits.

When we added support for the no-exceptions build of `libc++`, all the tests that used exceptions got a blanket XFAIL for the no-exceptions variety.

Previously, we tried to fix-up these tests with an elaborate setjmp/longjmp hackery (see D14653), which was rejected on the grounds of being too complicated / obtrusive.

The current patch is a representative fix that does the most obvious thing instead: use pre-processor macros to exclude just the bits of the test that use exceptions. Unlike in the previous patch, this means we are not trying to associate / verify a particular behaviour of the no-exceptions library with respect to exceptional situations (like calling abort). Here we simply save the parts of the test that has nothing to do with exceptions, I think this is a fair compromise.

We could also split the test file into two; one that uses exceptions and one that does not, though I can't think of any added benefits of that approach.

If this patch is approved I'll go ahead and update the rest of the tests (~150) to follow the same.

https://reviews.llvm.org/D24562

Files:
  test/std/re/re.alg/re.alg.search/grep.pass.cpp

Index: test/std/re/re.alg/re.alg.search/grep.pass.cpp
===================================================================
--- test/std/re/re.alg/re.alg.search/grep.pass.cpp
+++ test/std/re/re.alg/re.alg.search/grep.pass.cpp
@@ -7,7 +7,6 @@
 //
 //===----------------------------------------------------------------------===//
 
-// XFAIL: libcpp-no-exceptions
 // <regex>
 
 // template <class BidirectionalIterator, class Allocator, class charT, class traits>
@@ -23,6 +22,7 @@
 #include "test_macros.h"
 #include "test_iterators.h"
 
+#ifndef TEST_HAS_NO_EXCEPTIONS
 extern "C" void LLVMFuzzerTestOneInput(const char *data)
 {
     size_t size = strlen(data);
@@ -47,6 +47,7 @@
     LLVMFuzzerTestOneInput(R"XX(Õ)_%()()((\8'_%()_%()_%()_%(()_%()_%()_%(.t;)()¥f()_%()(.)_%;)()!¥f(((()()XX");
 #endif
 }
+#endif
 
 int main()
 {
@@ -82,5 +83,7 @@
         assert(m.position(0) == 0);
         assert(m.str(0) == "");
     }
+#ifndef TEST_HAS_NO_EXCEPTIONS
     fuzz_tests();
+#endif
 }


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D24562.71347.patch
Type: text/x-patch
Size: 1003 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20160914/48413233/attachment.bin>


More information about the cfe-commits mailing list