This bugzilla service is closed. All entries have been migrated to https://gitlab.com/libeigen/eigen
View | Details | Raw Unified | Return to bug 1409
Collapse All | Expand All

(-)a/Eigen/src/Core/util/Macros.h (+13 lines)
Lines 693-708 Link Here
693
  #if    EIGEN_MAX_CPP_VER>=11 && \
693
  #if    EIGEN_MAX_CPP_VER>=11 && \
694
       (__cplusplus >= 201103L || EIGEN_COMP_MSVC >= 1700)
694
       (__cplusplus >= 201103L || EIGEN_COMP_MSVC >= 1700)
695
    #define EIGEN_HAS_CXX11_OVERRIDE_FINAL 1
695
    #define EIGEN_HAS_CXX11_OVERRIDE_FINAL 1
696
  #else
696
  #else
697
    #define EIGEN_HAS_CXX11_OVERRIDE_FINAL 0
697
    #define EIGEN_HAS_CXX11_OVERRIDE_FINAL 0
698
  #endif
698
  #endif
699
#endif
699
#endif
700
700
701
#ifndef EIGEN_HAS_CXX17_OVERALIGN
702
#if EIGEN_MAX_CPP_VER>=17 && EIGEN_COMP_CXXVER>=17 && (                                       \
703
           (EIGEN_COMP_MSVC >= 1912)                                                    \
704
        || (EIGEN_GNUC_AT_LEAST(7,0))                                                   \
705
        || ((!defined(__apple_build_version__)) && (EIGEN_COMP_CLANG>=500))             \
706
        || (( defined(__apple_build_version__)) && (__apple_build_version__>=10000000)) \
707
      )
708
#define EIGEN_HAS_CXX17_OVERALIGN 1
709
#else
710
#define EIGEN_HAS_CXX17_OVERALIGN 0
711
#endif
712
#endif
713
701
#if defined(EIGEN_CUDACC) && EIGEN_HAS_CONSTEXPR
714
#if defined(EIGEN_CUDACC) && EIGEN_HAS_CONSTEXPR
702
  // While available already with c++11, this is useful mostly starting with c++14 and relaxed constexpr rules
715
  // While available already with c++11, this is useful mostly starting with c++14 and relaxed constexpr rules
703
  #if defined(__NVCC__)
716
  #if defined(__NVCC__)
704
    // nvcc considers constexpr functions as __host__ __device__ with the option --expt-relaxed-constexpr
717
    // nvcc considers constexpr functions as __host__ __device__ with the option --expt-relaxed-constexpr
705
    #ifdef __CUDACC_RELAXED_CONSTEXPR__
718
    #ifdef __CUDACC_RELAXED_CONSTEXPR__
706
      #define EIGEN_CONSTEXPR_ARE_DEVICE_FUNC
719
      #define EIGEN_CONSTEXPR_ARE_DEVICE_FUNC
707
    #endif
720
    #endif
708
  #elif defined(__clang__) && defined(__CUDA__) && __has_feature(cxx_relaxed_constexpr)
721
  #elif defined(__clang__) && defined(__CUDA__) && __has_feature(cxx_relaxed_constexpr)
(-)a/Eigen/src/Core/util/Memory.h (+13 lines)
Lines 784-799 template<typename T> void swap(scoped_ar Link Here
784
784
785
#endif
785
#endif
786
786
787
787
788
/*****************************************************************************
788
/*****************************************************************************
789
*** Implementation of EIGEN_MAKE_ALIGNED_OPERATOR_NEW [_IF]                ***
789
*** Implementation of EIGEN_MAKE_ALIGNED_OPERATOR_NEW [_IF]                ***
790
*****************************************************************************/
790
*****************************************************************************/
791
791
792
#if EIGEN_HAS_CXX17_OVERALIGN
793
794
// C++17 -> no need to bother about alignment anymore :)
795
796
#define EIGEN_MAKE_ALIGNED_OPERATOR_NEW_NOTHROW(NeedsToAlign)
797
#define EIGEN_MAKE_ALIGNED_OPERATOR_NEW_IF(NeedsToAlign)
798
#define EIGEN_MAKE_ALIGNED_OPERATOR_NEW
799
#define EIGEN_MAKE_ALIGNED_OPERATOR_NEW_IF_VECTORIZABLE_FIXED_SIZE(Scalar,Size)
800
801
#else
802
792
#if EIGEN_MAX_ALIGN_BYTES!=0
803
#if EIGEN_MAX_ALIGN_BYTES!=0
793
  #define EIGEN_MAKE_ALIGNED_OPERATOR_NEW_NOTHROW(NeedsToAlign) \
804
  #define EIGEN_MAKE_ALIGNED_OPERATOR_NEW_NOTHROW(NeedsToAlign) \
794
      void* operator new(std::size_t size, const std::nothrow_t&) EIGEN_NO_THROW { \
805
      void* operator new(std::size_t size, const std::nothrow_t&) EIGEN_NO_THROW { \
795
        EIGEN_TRY { return Eigen::internal::conditional_aligned_malloc<NeedsToAlign>(size); } \
806
        EIGEN_TRY { return Eigen::internal::conditional_aligned_malloc<NeedsToAlign>(size); } \
796
        EIGEN_CATCH (...) { return 0; } \
807
        EIGEN_CATCH (...) { return 0; } \
797
      }
808
      }
798
  #define EIGEN_MAKE_ALIGNED_OPERATOR_NEW_IF(NeedsToAlign) \
809
  #define EIGEN_MAKE_ALIGNED_OPERATOR_NEW_IF(NeedsToAlign) \
799
      void *operator new(std::size_t size) { \
810
      void *operator new(std::size_t size) { \
Lines 826-841 template<typename T> void swap(scoped_ar Link Here
826
#define EIGEN_MAKE_ALIGNED_OPERATOR_NEW EIGEN_MAKE_ALIGNED_OPERATOR_NEW_IF(true)
837
#define EIGEN_MAKE_ALIGNED_OPERATOR_NEW EIGEN_MAKE_ALIGNED_OPERATOR_NEW_IF(true)
827
#define EIGEN_MAKE_ALIGNED_OPERATOR_NEW_IF_VECTORIZABLE_FIXED_SIZE(Scalar,Size)                        \
838
#define EIGEN_MAKE_ALIGNED_OPERATOR_NEW_IF_VECTORIZABLE_FIXED_SIZE(Scalar,Size)                        \
828
  EIGEN_MAKE_ALIGNED_OPERATOR_NEW_IF(bool(                                                             \
839
  EIGEN_MAKE_ALIGNED_OPERATOR_NEW_IF(bool(                                                             \
829
        ((Size)!=Eigen::Dynamic) &&                                                                    \
840
        ((Size)!=Eigen::Dynamic) &&                                                                    \
830
        (((EIGEN_MAX_ALIGN_BYTES>=16) && ((sizeof(Scalar)*(Size))%(EIGEN_MAX_ALIGN_BYTES  )==0)) ||    \
841
        (((EIGEN_MAX_ALIGN_BYTES>=16) && ((sizeof(Scalar)*(Size))%(EIGEN_MAX_ALIGN_BYTES  )==0)) ||    \
831
         ((EIGEN_MAX_ALIGN_BYTES>=32) && ((sizeof(Scalar)*(Size))%(EIGEN_MAX_ALIGN_BYTES/2)==0)) ||    \
842
         ((EIGEN_MAX_ALIGN_BYTES>=32) && ((sizeof(Scalar)*(Size))%(EIGEN_MAX_ALIGN_BYTES/2)==0)) ||    \
832
         ((EIGEN_MAX_ALIGN_BYTES>=64) && ((sizeof(Scalar)*(Size))%(EIGEN_MAX_ALIGN_BYTES/4)==0))   )))
843
         ((EIGEN_MAX_ALIGN_BYTES>=64) && ((sizeof(Scalar)*(Size))%(EIGEN_MAX_ALIGN_BYTES/4)==0))   )))
833
844
845
#endif
846
834
/****************************************************************************/
847
/****************************************************************************/
835
848
836
/** \class aligned_allocator
849
/** \class aligned_allocator
837
* \ingroup Core_Module
850
* \ingroup Core_Module
838
*
851
*
839
* \brief STL compatible allocator to use with types requiring a non standrad alignment.
852
* \brief STL compatible allocator to use with types requiring a non standrad alignment.
840
*
853
*
841
* The memory is aligned as for dynamically aligned matrix/array types such as MatrixXd.
854
* The memory is aligned as for dynamically aligned matrix/array types such as MatrixXd.
(-)a/test/dynalloc.cpp (-1 / +1 lines)
Lines 102-118 template<typename T> void check_custom_n Link Here
102
  }
102
  }
103
  
103
  
104
  {
104
  {
105
    std::size_t N = internal::random<std::size_t>(1,10);
105
    std::size_t N = internal::random<std::size_t>(1,10);
106
    T* t = new T[N];
106
    T* t = new T[N];
107
    delete[] t;
107
    delete[] t;
108
  }
108
  }
109
  
109
  
110
#if EIGEN_MAX_ALIGN_BYTES>0
110
#if EIGEN_MAX_ALIGN_BYTES>0 && (!EIGEN_HAS_CXX17_OVERALIGN)
111
  {
111
  {
112
    T* t = static_cast<T *>((T::operator new)(sizeof(T)));
112
    T* t = static_cast<T *>((T::operator new)(sizeof(T)));
113
    (T::operator delete)(t, sizeof(T));
113
    (T::operator delete)(t, sizeof(T));
114
  }
114
  }
115
  
115
  
116
  {
116
  {
117
    T* t = static_cast<T *>((T::operator new)(sizeof(T)));
117
    T* t = static_cast<T *>((T::operator new)(sizeof(T)));
118
    (T::operator delete)(t);
118
    (T::operator delete)(t);

Return to bug 1409