[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
Tue Nov 29 11:33:08 PST 2016


> On Nov 29, 2016, at 11:31 AM, David Blaikie <dblaikie at gmail.com> wrote:
> 
> 
> On Mon, Nov 28, 2016 at 3:07 PM Mehdi Amini via llvm-commits <llvm-commits at lists.llvm.org <mailto:llvm-commits at lists.llvm.org>> wrote:
> 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 <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.
> 
> This doesn't seem to work for my build setup. I'm using the CMake Debug configuration which doesn't define NDEBUG - though I don't have LLVM_ENABLE_ASSERTIONS set.
> 
> So I get the test cases, but not the ABI_BREAKING_CHECKS defined.
> 
> It would seem best to set the tests off the same feature that enables/disables the ABI_BREAKING_CHECKS (well, I guess it needs to be both breaking checks and NDEBUG as it is already - if either's disabled, the tests won't work).

Which test is broken for you?

— 
Mehdi


>  
> 
> Differential Revision: https://reviews.llvm.org/D26700 <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 <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.
> 
> 
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org <mailto:llvm-commits at lists.llvm.org>
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits <http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20161129/3d213f82/attachment.html>


More information about the llvm-commits mailing list