[Support] Add Error::errorForOutParameter helper.
authorLang Hames <lhames@gmail.com>
Fri, 25 Mar 2016 21:56:35 +0000 (21:56 +0000)
committerLang Hames <lhames@gmail.com>
Fri, 25 Mar 2016 21:56:35 +0000 (21:56 +0000)
This helper method creates a pre-checked Error suitable for use as an out
parameter in a constructor. This avoids the need to have the constructor
check a known-good error before assigning to it.

llvm-svn: 264467

llvm/include/llvm/Support/Error.h
llvm/unittests/Support/ErrorTest.cpp

index 3eb254c..f96e02c 100644 (file)
@@ -143,6 +143,13 @@ public:
   /// constructor, but should be preferred for readability where possible.
   static Error success() { return Error(); }
 
+  /// Create a 'pre-checked' success value suitable for use as an out-parameter.
+  static Error errorForOutParameter() {
+    Error Err;
+    (void)!!Err;
+    return Err;
+  }
+
   // Errors are not copy-constructable.
   Error(const Error &Other) = delete;
 
index 893bd68..1a0dd44 100644 (file)
@@ -105,6 +105,12 @@ TEST(Error, UncheckedSuccess) {
 }
 #endif
 
+// Test that errors to be used as out parameters are implicitly checked (
+// and thus destruct quietly).
+TEST(Error, ErrorAsOutParameter) {
+  Error E = Error::errorForOutParameter();
+}
+
 // Check that we abort on unhandled failure cases. (Force conversion to bool
 // to make sure that we don't accidentally treat checked errors as handled).
 // Test runs in debug mode only.