Replace CHECK in Range.h by throw std::out_of_range
authorMaxime Boucher <maxime@fb.com>
Sun, 12 May 2013 04:33:07 +0000 (21:33 -0700)
committerSara Golemon <sgolemon@fb.com>
Mon, 20 May 2013 18:01:27 +0000 (11:01 -0700)
Summary:
Calling CHECK() in folly will force the program to abort in case of a failure.
On the other hand, for range checking, the standard library throws std::out_of_range for many functions.

Thus it could be a good idea to throw the same exception in folly so that errors can be handled using try {} catch (...) {} blocks.

Test Plan:
from fbcode, type:
fbconfig -r folly; fbmake opt -j32; fbmake runtests_opt -j 32

What other tests should I run?

Reviewed By: tudorb@fb.com

FB internal diff: D808204

folly/Range.h

index 04ea64ef74147f6584b7189ac1cdb3e3c97b213d..592aead5cf9bd6f0bc205b390d84d0bd361f486c 100644 (file)
@@ -322,14 +322,14 @@ public:
   }
 
   void advance(size_type n) {
-    if (n > size()) {
+    if (UNLIKELY(n > size())) {
       throw std::out_of_range("index out of range");
     }
     b_ += n;
   }
 
   void subtract(size_type n) {
-    if (n > size()) {
+    if (UNLIKELY(n > size())) {
       throw std::out_of_range("index out of range");
     }
     e_ -= n;
@@ -347,7 +347,7 @@ public:
 
   Range subpiece(size_type first,
                  size_type length = std::string::npos) const {
-    if (first > size()) {
+    if (UNLIKELY(first > size())) {
       throw std::out_of_range("index out of range");
     }
     return Range(b_ + first,