summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
authorMehdi Amini <mehdi.amini@apple.com>2016-11-28 22:57:11 +0000
committerMehdi Amini <mehdi.amini@apple.com>2016-11-28 22:57:11 +0000
commitc87de4249ddc9f090dc28796e6e5127aba1acfcd (patch)
tree1962ea3977b0e4adb0a8d162693d631c0984503f /llvm
parent4ffec859ebef5ac0e302c913ec71824d38db441e (diff)
downloadbcm5719-llvm-c87de4249ddc9f090dc28796e6e5127aba1acfcd.tar.gz
bcm5719-llvm-c87de4249ddc9f090dc28796e6e5127aba1acfcd.zip
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 llvm-svn: 288087
Diffstat (limited to 'llvm')
-rw-r--r--llvm/include/llvm/Support/Error.h39
1 files changed, 16 insertions, 23 deletions
diff --git a/llvm/include/llvm/Support/Error.h b/llvm/include/llvm/Support/Error.h
index 01ee0354337..22588c299d0 100644
--- a/llvm/include/llvm/Support/Error.h
+++ b/llvm/include/llvm/Support/Error.h
@@ -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.
OpenPOWER on IntegriCloud