[libunwind] r270925 - Fix gcc libunwind build.

Asiri Rathnayake via cfe-commits cfe-commits at lists.llvm.org
Thu May 26 14:45:54 PDT 2016


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 =




More information about the cfe-commits mailing list