Description: Allow Kokkos to build on 32-bit and 64-bit architectures
 On 32-bit architectures, long ints are four bytes in size and
 long long ints are eight bytes in size.  On 64-bit architectures,
 both long ints and long long ints are eight bytes in size.
 This patch changes long to long long in some places (no change for
 64-bit architectures).
Bug-Debian: https://bugs.debian.org/835406
Author: Graham Inggs <ginggs@debian.org>
Last-Update: 2016-12-08
--- a/packages/kokkos/core/src/Kokkos_Core_fwd.hpp
+++ b/packages/kokkos/core/src/Kokkos_Core_fwd.hpp
@@ -54,8 +54,8 @@
 //----------------------------------------------------------------------------
 // Have assumed a 64bit build (8byte pointers) throughout the code base.
 
-static_assert( sizeof(void*) == 8
-             , "Kokkos assumes 64-bit build; i.e., 8-byte pointers" );
+//static_assert( sizeof(void*) == 8
+//             , "Kokkos assumes 64-bit build; i.e., 8-byte pointers" );
 
 //----------------------------------------------------------------------------
 
--- a/packages/kokkos/core/src/impl/Kokkos_Atomic_Compare_Exchange_Strong.hpp
+++ b/packages/kokkos/core/src/impl/Kokkos_Atomic_Compare_Exchange_Strong.hpp
@@ -173,22 +173,22 @@
 inline
 T atomic_compare_exchange( volatile T * const dest, const T & compare,
   typename Kokkos::Impl::enable_if< sizeof(T) != sizeof(int) &&
-                                    sizeof(T) == sizeof(long) , const T & >::type val )
+                                    sizeof(T) == sizeof(long long) , const T & >::type val )
 {
 #ifdef KOKKOS_HAVE_CXX11
   union U {
-    long i ;
+    long long i ;
     T t ;
     KOKKOS_INLINE_FUNCTION U() {};
   } tmp ;
 #else
   union U {
-    long i ;
+    long long i ;
     T t ;
   } tmp ;
 #endif
 
-  tmp.i = __sync_val_compare_and_swap( (long*) dest , *((long*)&compare) , *((long*)&val) );
+  tmp.i = __sync_val_compare_and_swap( (long long*) dest , *((long long*)&compare) , *((long long*)&val) );
   return tmp.t ;
 }
 
--- a/packages/kokkos/core/src/impl/Kokkos_Atomic_Exchange.hpp
+++ b/packages/kokkos/core/src/impl/Kokkos_Atomic_Exchange.hpp
@@ -168,10 +168,10 @@
 template< typename T >
 inline
 T atomic_exchange( volatile T * const dest ,
-  typename Kokkos::Impl::enable_if< sizeof(T) == sizeof(int) || sizeof(T) == sizeof(long)
+  typename Kokkos::Impl::enable_if< sizeof(T) == sizeof(int) || sizeof(T) == sizeof(long long)
                                   , const T & >::type val )
 {
-  typedef typename Kokkos::Impl::if_c< sizeof(T) == sizeof(int) , int , long >::type type ;
+  typedef typename Kokkos::Impl::if_c< sizeof(T) == sizeof(int) , int , long long >::type type ;
 
   const type v = *((type*)&val); // Extract to be sure the value doesn't change
 
@@ -258,10 +258,10 @@
 template< typename T >
 inline
 void atomic_assign( volatile T * const dest ,
-  typename Kokkos::Impl::enable_if< sizeof(T) == sizeof(int) || sizeof(T) == sizeof(long)
+  typename Kokkos::Impl::enable_if< sizeof(T) == sizeof(int) || sizeof(T) == sizeof(long long)
                                   , const T & >::type val )
 {
-  typedef typename Kokkos::Impl::if_c< sizeof(T) == sizeof(int) , int , long >::type type ;
+  typedef typename Kokkos::Impl::if_c< sizeof(T) == sizeof(int) , int , long long >::type type ;
 
   const type v = *((type*)&val); // Extract to be sure the value doesn't change
 
--- a/packages/kokkos/core/src/impl/Kokkos_Atomic_Fetch_Add.hpp
+++ b/packages/kokkos/core/src/impl/Kokkos_Atomic_Fetch_Add.hpp
@@ -234,17 +234,17 @@
 inline
 T atomic_fetch_add( volatile T * const dest ,
   typename Kokkos::Impl::enable_if< sizeof(T) != sizeof(int) &&
-                                    sizeof(T) == sizeof(long) , const T >::type val )
+                                    sizeof(T) == sizeof(long long) , const T >::type val )
 {
 #ifdef KOKKOS_HAVE_CXX11
   union U {
-    long i ;
+    long long i ;
     T t ;
     inline U() {};
   } assume , oldval , newval ;
 #else
   union U {
-    long i ;
+    long long i ;
     T t ;
   } assume , oldval , newval ;
 #endif
@@ -254,7 +254,7 @@
   do {
     assume.i = oldval.i ;
     newval.t = assume.t + val ;
-    oldval.i = __sync_val_compare_and_swap( (long*) dest , assume.i , newval.i );
+    oldval.i = __sync_val_compare_and_swap( (long long*) dest , assume.i , newval.i );
   } while ( assume.i != oldval.i );
 
   return oldval.t ;
--- a/packages/kokkos/core/src/impl/Kokkos_Atomic_Fetch_Sub.hpp
+++ b/packages/kokkos/core/src/impl/Kokkos_Atomic_Fetch_Sub.hpp
@@ -175,16 +175,16 @@
 inline
 T atomic_fetch_sub( volatile T * const dest ,
   typename Kokkos::Impl::enable_if< sizeof(T) != sizeof(int) &&
-                                    sizeof(T) == sizeof(long) , const T >::type val )
+                                    sizeof(T) == sizeof(long long) , const T >::type val )
 {
-  union { long i ; T t ; } assume , oldval , newval ;
+  union { long long i ; T t ; } assume , oldval , newval ;
 
   oldval.t = *dest ;
 
   do {
     assume.i = oldval.i ;
     newval.t = assume.t - val ;
-    oldval.i = __sync_val_compare_and_swap( (long*) dest , assume.i , newval.i );
+    oldval.i = __sync_val_compare_and_swap( (long long*) dest , assume.i , newval.i );
   } while ( assume.i != oldval.i );
 
   return oldval.t ;
--- a/packages/kokkos/core/src/impl/Kokkos_TaskQueue.hpp
+++ b/packages/kokkos/core/src/impl/Kokkos_TaskQueue.hpp
@@ -380,7 +380,7 @@
 {
 private:
 
-  static_assert( sizeof(TaskBase<ExecSpace,void,void>) == 48 , "" );
+//  static_assert( sizeof(TaskBase<ExecSpace,void,void>) == 48 , "" );
 
   TaskBase( TaskBase && ) = delete ;
   TaskBase( const TaskBase & ) = delete ;
