[PATCH] D31178: [libcxxabi] Fix exception address alignment test for EHABI
Phabricator via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Tue Apr 4 07:16:26 PDT 2017
This revision was automatically updated to reflect the committed changes.
Closed by commit rL299435: Fix exception address alignment test for EHABI (authored by asiri).
Changed prior to commit:
https://reviews.llvm.org/D31178?vs=94074&id=94075#toc
Repository:
rL LLVM
https://reviews.llvm.org/D31178
Files:
libcxxabi/trunk/CMakeLists.txt
libcxxabi/trunk/test/libcxxabi/test/config.py
libcxxabi/trunk/test/lit.site.cfg.in
libcxxabi/trunk/test/test_exception_address_alignment.pass.cpp
Index: libcxxabi/trunk/test/lit.site.cfg.in
===================================================================
--- libcxxabi/trunk/test/lit.site.cfg.in
+++ libcxxabi/trunk/test/lit.site.cfg.in
@@ -6,6 +6,7 @@
config.abi_library_path = "@LIBCXXABI_LIBRARY_DIR@"
config.libcxx_src_root = "@LIBCXXABI_LIBCXX_PATH@"
config.cxx_headers = "@LIBCXXABI_LIBCXX_INCLUDES@"
+config.libunwind_headers = "@LIBCXXABI_LIBUNWIND_INCLUDES_INTERNAL@"
config.cxx_library_root = "@LIBCXXABI_LIBCXX_LIBRARY_PATH@"
config.llvm_unwinder = "@LIBCXXABI_USE_LLVM_UNWINDER@"
config.enable_threads = "@LIBCXXABI_ENABLE_THREADS@"
Index: libcxxabi/trunk/test/test_exception_address_alignment.pass.cpp
===================================================================
--- libcxxabi/trunk/test/test_exception_address_alignment.pass.cpp
+++ libcxxabi/trunk/test/test_exception_address_alignment.pass.cpp
@@ -15,16 +15,25 @@
// working around this failure.
// XFAIL: darwin && libcxxabi-has-system-unwinder
-// Test that the address of the exception object is properly aligned to the
-// largest supported alignment for the system.
+// Test that the address of the exception object is properly aligned as required
+// by the relevant ABI
#include <cstdint>
#include <cassert>
#include <unwind.h>
struct __attribute__((aligned)) AlignedType {};
-static_assert(alignof(AlignedType) == alignof(_Unwind_Exception),
+
+// EHABI : 8-byte aligned
+// Itanium: Largest supported alignment for the system
+#if defined(_LIBUNWIND_ARM_EHABI)
+# define EXPECTED_ALIGNMENT 8
+#else
+# define EXPECTED_ALIGNMENT alignof(AlignedType)
+#endif
+
+static_assert(alignof(_Unwind_Exception) == EXPECTED_ALIGNMENT,
"_Unwind_Exception is incorrectly aligned. This test is expected to fail");
struct MinAligned { };
@@ -35,7 +44,7 @@
try {
throw MinAligned{};
} catch (MinAligned const& ref) {
- assert(reinterpret_cast<uintptr_t>(&ref) % alignof(AlignedType) == 0);
+ assert(reinterpret_cast<uintptr_t>(&ref) % EXPECTED_ALIGNMENT == 0);
}
}
}
Index: libcxxabi/trunk/test/libcxxabi/test/config.py
===================================================================
--- libcxxabi/trunk/test/libcxxabi/test/config.py
+++ libcxxabi/trunk/test/libcxxabi/test/config.py
@@ -84,6 +84,13 @@
% libcxxabi_headers)
self.cxx.compile_flags += ['-I' + libcxxabi_headers]
+ libunwind_headers = self.get_lit_conf('libunwind_headers', None)
+ if self.get_lit_bool('llvm_unwinder', False) and libunwind_headers:
+ if not os.path.isdir(libunwind_headers):
+ self.lit_config.fatal("libunwind_headers='%s' is not a directory."
+ % libunwind_headers)
+ self.cxx.compile_flags += ['-I' + libunwind_headers]
+
def configure_compile_flags_exceptions(self):
pass
Index: libcxxabi/trunk/CMakeLists.txt
===================================================================
--- libcxxabi/trunk/CMakeLists.txt
+++ libcxxabi/trunk/CMakeLists.txt
@@ -502,9 +502,14 @@
set(LIBCXXABI_LIBUNWIND_SOURCES "")
endif()
- if (NOT LIBCXXABI_LIBUNWIND_INCLUDES_INTERNAL STREQUAL "LIBCXXABI_LIBUNWIND_INCLUDES_INTERNAL-NOTFOUND")
+ if (LIBCXXABI_LIBUNWIND_INCLUDES_INTERNAL STREQUAL "LIBCXXABI_LIBUNWIND_INCLUDES_INTERNAL-NOTFOUND")
+ set(LIBCXXABI_LIBUNWIND_INCLUDES_INTERNAL "")
+ endif()
+
+ if (NOT LIBCXXABI_LIBUNWIND_INCLUDES_INTERNAL STREQUAL "")
include_directories("${LIBCXXABI_LIBUNWIND_INCLUDES_INTERNAL}")
endif()
+
if (NOT LIBCXXABI_LIBUNWIND_SOURCES STREQUAL "")
include_directories("${LIBCXXABI_LIBUNWIND_SOURCES}")
endif()
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D31178.94075.patch
Type: text/x-patch
Size: 3759 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20170404/53e37551/attachment-0001.bin>
More information about the cfe-commits
mailing list