mirror of
https://github.com/xomboverlord/ldc.git
synced 2026-01-14 20:03:14 +01:00
Changed array slice copying to call a runtime function when assertions or array bound checks are enabled instead of just doing a memcpy. This makes sure an exception is thrown if the copy is invalid (ie. different lengths or overlap). Fixes ticket #283 . Rebuilding the runtime is necessary.
This commit is contained in:
@@ -156,3 +156,14 @@ size_t _d_array_cast_len(size_t len, size_t elemsz, size_t newelemsz)
|
||||
}
|
||||
return (len*elemsz)/newelemsz;
|
||||
}
|
||||
|
||||
// slice copy when assertions are enabled
|
||||
void _d_array_slice_copy(void* dst, size_t dstlen, void* src, size_t srclen)
|
||||
{
|
||||
if (dstlen != srclen)
|
||||
throw new Exception("lengths don't match for array copy");
|
||||
else if (dst+dstlen <= src || src+srclen <= dst)
|
||||
llvm_memcpy(dst, src, dstlen, 0);
|
||||
else
|
||||
throw new Exception("overlapping array copy");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user