[llvm] r288087 - Put ABI breaking test in Error checking behind LLVM_ENABLE_ABI_BREAKING_CHECKS

Mehdi Amini via llvm-commits llvm-commits at lists.llvm.org
Mon Nov 28 14:57:12 PST 2016


Author: mehdi_amini
Date: Mon Nov 28 16:57:11 2016
New Revision: 288087

URL: http://llvm.org/viewvc/llvm-project?rev=288087&view=rev
Log:
Put ABI breaking test in Error checking behind LLVM_ENABLE_ABI_BREAKING_CHECKS

This macro is supposed to be the one controlling the compatibility
of ABI breaks induced when enabling or disabling assertions in LLVM.

The macro is enabled by default in assertions build, so this commit
won't disable the tests.

Differential Revision: https://reviews.llvm.org/D26700

Modified:
    llvm/trunk/include/llvm/Support/Error.h

Modified: llvm/trunk/include/llvm/Support/Error.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/Error.h?rev=288087&r1=288086&r2=288087&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Support/Error.h (original)
+++ llvm/trunk/include/llvm/Support/Error.h Mon Nov 28 16:57:11 2016
@@ -224,7 +224,7 @@ public:
 
 private:
   void assertIsChecked() {
-#ifndef NDEBUG
+#if LLVM_ENABLE_ABI_BREAKING_CHECKS
     if (!getChecked() || getPtr()) {
       dbgs() << "Program aborted due to an unhandled Error:\n";
       if (getPtr())
@@ -245,7 +245,7 @@ private:
   }
 
   void setPtr(ErrorInfoBase *EI) {
-#ifndef NDEBUG
+#if LLVM_ENABLE_ABI_BREAKING_CHECKS
     Payload = reinterpret_cast<ErrorInfoBase*>(
                 (reinterpret_cast<uintptr_t>(EI) &
                  ~static_cast<uintptr_t>(0x1)) |
@@ -256,7 +256,7 @@ private:
   }
 
   bool getChecked() const {
-#ifndef NDEBUG
+#if LLVM_ENABLE_ABI_BREAKING_CHECKS
     return (reinterpret_cast<uintptr_t>(Payload) & 0x1) == 0;
 #else
     return true;
@@ -637,17 +637,11 @@ private:
 public:
   /// Create an Expected<T> error value from the given Error.
   Expected(Error Err)
-      : HasError(true),
-#ifndef NDEBUG
+      : HasError(true)
+#if LLVM_ENABLE_ABI_BREAKING_CHECKS
         // Expected is unchecked upon construction in Debug builds.
-        Unchecked(true)
-#else
-        // Expected's unchecked flag is set to false in Release builds. This
-        // allows Expected values constructed in a Release build library to be
-        // consumed by a Debug build application.
-        Unchecked(false)
+        , Unchecked(true)
 #endif
-
   {
     assert(Err && "Cannot create Expected<T> from Error success value.");
     new (getErrorStorage()) error_type(Err.takePayload());
@@ -664,15 +658,10 @@ public:
   Expected(OtherT &&Val,
            typename std::enable_if<std::is_convertible<OtherT, T>::value>::type
                * = nullptr)
-      : HasError(false),
-#ifndef NDEBUG
+      : HasError(false)
+#if LLVM_ENABLE_ABI_BREAKING_CHECKS
         // Expected is unchecked upon construction in Debug builds.
-        Unchecked(true)
-#else
-        // Expected's 'unchecked' flag is set to false in Release builds. This
-        // allows Expected values constructed in a Release build library to be
-        // consumed by a Debug build application.
-        Unchecked(false)
+        , Unchecked(true)
 #endif
   {
     new (getStorage()) storage_type(std::forward<OtherT>(Val));
@@ -717,7 +706,7 @@ public:
 
   /// \brief Return false if there is an error.
   explicit operator bool() {
-#ifndef NDEBUG
+#if LLVM_ENABLE_ABI_BREAKING_CHECKS
     Unchecked = HasError;
 #endif
     return !HasError;
@@ -745,7 +734,7 @@ public:
   /// only be safely destructed. No further calls (beside the destructor) should
   /// be made on the Expected<T> vaule.
   Error takeError() {
-#ifndef NDEBUG
+#if LLVM_ENABLE_ABI_BREAKING_CHECKS
     Unchecked = false;
 #endif
     return HasError ? Error(std::move(*getErrorStorage())) : Error::success();
@@ -788,8 +777,10 @@ private:
 
   template <class OtherT> void moveConstruct(Expected<OtherT> &&Other) {
     HasError = Other.HasError;
+#if LLVM_ENABLE_ABI_BREAKING_CHECKS
     Unchecked = true;
     Other.Unchecked = false;
+#endif
 
     if (!HasError)
       new (getStorage()) storage_type(std::move(*Other.getStorage()));
@@ -831,7 +822,7 @@ private:
   }
 
   void assertIsChecked() {
-#ifndef NDEBUG
+#if LLVM_ENABLE_ABI_BREAKING_CHECKS
     if (Unchecked) {
       dbgs() << "Expected<T> must be checked before access or destruction.\n";
       if (HasError) {
@@ -851,7 +842,9 @@ private:
     AlignedCharArrayUnion<error_type> ErrorStorage;
   };
   bool HasError : 1;
+#if LLVM_ENABLE_ABI_BREAKING_CHECKS
   bool Unchecked : 1;
+#endif
 };
 
 /// This class wraps a std::error_code in a Error.




More information about the llvm-commits mailing list