Author: asiri Date: Thu May 26 16:45:54 2016 New Revision: 270925 URL: http://llvm.org/viewvc/llvm-project?rev=270925&view=rev Log: Fix gcc libunwind build.
r270692 seems to have broken gcc builds of libunwind. This is because statements like: static_assert(check_fit<Registers_or1k, unw_context_t>::does_fit, "or1k registers do not fit into unw_context_t"); Do not work when static_assert is a macro taking two parameters, the extra comma separating the template parameters confuses the pre-processor. The fix is to change those statements to: static_assert((check_fit<Registers_or1k, unw_context_t>::does_fit), "or1k registers do not fit into unw_context_t"); Also fixed a gcc warning about a trivial un-intended narrowing. Differential revision: http://reviews.llvm.org/D20119 Modified: libunwind/trunk/src/Registers.hpp libunwind/trunk/src/UnwindCursor.hpp libunwind/trunk/src/config.h Modified: libunwind/trunk/src/Registers.hpp URL: http://llvm.org/viewvc/llvm-project/libunwind/trunk/src/Registers.hpp?rev=270925&r1=270924&r2=270925&view=diff ============================================================================== --- libunwind/trunk/src/Registers.hpp (original) +++ libunwind/trunk/src/Registers.hpp Thu May 26 16:45:54 2016 @@ -87,7 +87,7 @@ private: }; inline Registers_x86::Registers_x86(const void *registers) { - static_assert(check_fit<Registers_x86, unw_context_t>::does_fit, + static_assert((check_fit<Registers_x86, unw_context_t>::does_fit), "x86 registers do not fit into unw_context_t"); memcpy(&_registers, registers, sizeof(_registers)); } @@ -281,7 +281,7 @@ private: }; inline Registers_x86_64::Registers_x86_64(const void *registers) { - static_assert(check_fit<Registers_x86_64, unw_context_t>::does_fit, + static_assert((check_fit<Registers_x86_64, unw_context_t>::does_fit), "x86_64 registers do not fit into unw_context_t"); memcpy(&_registers, registers, sizeof(_registers)); } @@ -548,7 +548,7 @@ private: }; inline Registers_ppc::Registers_ppc(const void *registers) { - static_assert(check_fit<Registers_ppc, unw_context_t>::does_fit, + static_assert((check_fit<Registers_ppc, unw_context_t>::does_fit), "ppc registers do not fit into unw_context_t"); memcpy(&_registers, static_cast<const uint8_t *>(registers), sizeof(_registers)); @@ -1078,7 +1078,7 @@ private: }; inline Registers_arm64::Registers_arm64(const void *registers) { - static_assert(check_fit<Registers_arm64, unw_context_t>::does_fit, + static_assert((check_fit<Registers_arm64, unw_context_t>::does_fit), "arm64 registers do not fit into unw_context_t"); memcpy(&_registers, registers, sizeof(_registers)); static_assert(sizeof(GPRs) == 0x110, @@ -1404,7 +1404,7 @@ inline Registers_arm::Registers_arm(cons _saved_vfp_d16_d31(false), _saved_iwmmx(false), _saved_iwmmx_control(false) { - static_assert(check_fit<Registers_arm, unw_context_t>::does_fit, + static_assert((check_fit<Registers_arm, unw_context_t>::does_fit), "arm registers do not fit into unw_context_t"); // See unw_getcontext() note about data. memcpy(&_registers, registers, sizeof(_registers)); @@ -1758,7 +1758,7 @@ private: }; inline Registers_or1k::Registers_or1k(const void *registers) { - static_assert(check_fit<Registers_or1k, unw_context_t>::does_fit, + static_assert((check_fit<Registers_or1k, unw_context_t>::does_fit), "or1k registers do not fit into unw_context_t"); memcpy(&_registers, static_cast<const uint8_t *>(registers), sizeof(_registers)); Modified: libunwind/trunk/src/UnwindCursor.hpp URL: http://llvm.org/viewvc/llvm-project/libunwind/trunk/src/UnwindCursor.hpp?rev=270925&r1=270924&r2=270925&view=diff ============================================================================== --- libunwind/trunk/src/UnwindCursor.hpp (original) +++ libunwind/trunk/src/UnwindCursor.hpp Thu May 26 16:45:54 2016 @@ -603,7 +603,7 @@ template <typename A, typename R> UnwindCursor<A, R>::UnwindCursor(unw_context_t *context, A &as) : _addressSpace(as), _registers(context), _unwindInfoMissing(false), _isSignalFrame(false) { - static_assert(check_fit<UnwindCursor<A, R>, unw_cursor_t>::does_fit, + static_assert((check_fit<UnwindCursor<A, R>, unw_cursor_t>::does_fit), "UnwindCursor<> does not fit in unw_cursor_t"); memset(&_info, 0, sizeof(_info)); } Modified: libunwind/trunk/src/config.h URL: http://llvm.org/viewvc/llvm-project/libunwind/trunk/src/config.h?rev=270925&r1=270924&r2=270925&view=diff ============================================================================== --- libunwind/trunk/src/config.h (original) +++ libunwind/trunk/src/config.h Thu May 26 16:45:54 2016 @@ -131,7 +131,7 @@ template <typename _Type, typename _Mem> struct check_fit { template <typename T> struct blk_count { - static const uint32_t count = + static const uint64_t count = (sizeof(T) + sizeof(uint64_t) - 1) / sizeof(uint64_t); }; static const bool does_fit = _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits