aboutsummaryrefslogtreecommitdiff
path: root/Carpet/CarpetLib
diff options
context:
space:
mode:
authorPeter Diener <diener@cct.lsu.edu>2013-04-29 14:25:24 -0500
committerPeter Diener <diener@cct.lsu.edu>2013-04-29 14:25:24 -0500
commitd2265e829d3e1f3f9ab19bd5b805b82c7f79942f (patch)
tree773f1f0e8ff65aed03403e08107dad1a8a0f85e1 /Carpet/CarpetLib
parent8b5e709c59ac6435721849d0f05a41f2505ce2b0 (diff)
parent8c63348a8570b61f802fd366812c74b6d5a6153e (diff)
Merge branch 'master' of carpetgit@carpetcode.org:carpet
Diffstat (limited to 'Carpet/CarpetLib')
-rw-r--r--Carpet/CarpetLib/src/mem.cc4
1 files changed, 3 insertions, 1 deletions
diff --git a/Carpet/CarpetLib/src/mem.cc b/Carpet/CarpetLib/src/mem.cc
index 89d8fb211..df374ae3e 100644
--- a/Carpet/CarpetLib/src/mem.cc
+++ b/Carpet/CarpetLib/src/mem.cc
@@ -105,6 +105,7 @@ mem (size_t const vectorlength, size_t const nelems,
size_t const max_cache_linesize = get_max_cache_linesize();
size_t const vector_size = CCTK_REAL_VEC_SIZE * sizeof(T);
size_t const alignment = align_up(max_cache_linesize, vector_size);
+ assert(alignment >= 1);
// Safety check
assert(alignment <= 1024);
// Assume optimistically that operator new returns well-aligned
@@ -123,7 +124,8 @@ mem (size_t const vectorlength, size_t const nelems,
} else {
allocate_with_alignment:
// Operator new needs manual alignment
- size_t const max_padding = alignment / sizeof(T) - 1;
+ size_t const max_padding = div_up(alignment, sizeof(T));
+ assert(ptrdiff_t(max_padding) >= 0);
storage_base_ = new T [vectorlength * nelems + max_padding];
storage_ = (T*) (size_t(storage_base_ + max_padding) & ~(alignment-1));
assert(size_t(storage_) >= size_t(storage_base_ ) and