diff options
author | Gael Guennebaud <g.gael@free.fr> | 2013-02-25 19:17:13 +0100 |
---|---|---|
committer | Gael Guennebaud <g.gael@free.fr> | 2013-02-25 19:17:13 +0100 |
commit | b6dc2613acbb4659988eb3237225bb0974d85d52 (patch) | |
tree | 1a4dc56ed1b476002d394745d63859e344777ed2 | |
parent | 12a1313b09bcfdddc2cda311d6cb29b2accc2763 (diff) |
Fix bug #552: disable EIGEN_GLIBC_MALLOC_ALREADY_ALIGNED when compiling with -fsanitize=address, and allow users to manually tell whether EIGEN_MALLOC_ALREADY_ALIGNED.
-rw-r--r-- | Eigen/src/Core/util/Memory.h | 8 | ||||
-rw-r--r-- | doc/PreprocessorDirectives.dox | 5 |
2 files changed, 11 insertions, 2 deletions
diff --git a/Eigen/src/Core/util/Memory.h b/Eigen/src/Core/util/Memory.h index de6e8b271..2a1a20fac 100644 --- a/Eigen/src/Core/util/Memory.h +++ b/Eigen/src/Core/util/Memory.h @@ -19,6 +19,10 @@ #ifndef EIGEN_MEMORY_H #define EIGEN_MEMORY_H +#ifndef EIGEN_MALLOC_ALREADY_ALIGNED + +// Try to determine automatically if malloc is already aligned. + // On 64-bit systems, glibc's malloc returns 16-byte-aligned pointers, see: // http://www.gnu.org/s/libc/manual/html_node/Aligned-Memory-Blocks.html // This is true at least since glibc 2.8. @@ -27,7 +31,7 @@ // page 114, "[The] LP64 model [...] is used by all 64-bit UNIX ports" so it's indeed // quite safe, at least within the context of glibc, to equate 64-bit with LP64. #if defined(__GLIBC__) && ((__GLIBC__>=2 && __GLIBC_MINOR__ >= 8) || __GLIBC__>2) \ - && defined(__LP64__) + && defined(__LP64__) && ! defined( __SANITIZE_ADDRESS__ ) #define EIGEN_GLIBC_MALLOC_ALREADY_ALIGNED 1 #else #define EIGEN_GLIBC_MALLOC_ALREADY_ALIGNED 0 @@ -52,6 +56,8 @@ #define EIGEN_MALLOC_ALREADY_ALIGNED 0 #endif +#endif + #if ((defined __QNXNTO__) || (defined _GNU_SOURCE) || ((defined _XOPEN_SOURCE) && (_XOPEN_SOURCE >= 600))) \ && (defined _POSIX_ADVISORY_INFO) && (_POSIX_ADVISORY_INFO > 0) #define EIGEN_HAS_POSIX_MEMALIGN 1 diff --git a/doc/PreprocessorDirectives.dox b/doc/PreprocessorDirectives.dox index f731b5628..eedd5524a 100644 --- a/doc/PreprocessorDirectives.dox +++ b/doc/PreprocessorDirectives.dox @@ -30,7 +30,7 @@ are doing. initialized to zero, as are new entries in matrices and arrays after resizing. Not defined by default. - \b EIGEN_INITIALIZE_MATRICES_BY_NAN - if defined, all entries of newly constructed matrices and arrays are initialized to NaN, as are new entries in matrices and arrays after resizing. This option is especially - useful for debugging purpose, though a memory tool like <a href="http://valgrind.org/">valgring</a> is + useful for debugging purpose, though a memory tool like <a href="http://valgrind.org/">valgrind</a> is preferable. Not defined by default. - \b EIGEN_NO_AUTOMATIC_RESIZING - if defined, the matrices (or arrays) on both sides of an assignment <tt>a = b</tt> have to be of the same size; otherwise, %Eigen automatically resizes \c a so that it is of @@ -55,6 +55,9 @@ run time. However, these assertions do cost time and can thus be turned off. \section TopicPreprocessorDirectivesPerformance Alignment, vectorization and performance tweaking + - \b EIGEN_MALLOC_ALREADY_ALIGNED - Can be set to 0 or 1 to tell whether default system malloc already + returns aligned buffers. In not defined, then this information is automatically deduced from the compiler + and system preprocessor tokens. - \b EIGEN_DONT_ALIGN - disables alignment completely. %Eigen will not try to align its objects and does not expect that any objects passed to it are aligned. This will turn off vectorization. Not defined by default. - \b EIGEN_DONT_ALIGN_STATICALLY - disables alignment of arrays on the stack. Not defined by default, unless |