summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Martín Nieto <cmn@dwim.me>2014-07-25 08:25:41 +0200
committerCarlos Martín Nieto <cmn@dwim.me>2014-07-25 08:25:41 +0200
commitb62a6a13b2f9a40e6ea4bf7bc2a9255429fb0bd6 (patch)
tree431e3c8db1bf31788e22f3a50497b32f5a64e233
parent9746b36cf9a86ba50a666bbc8cc97a37221cb954 (diff)
downloadlibgit2-cmn/revwalk-no-prealloc.tar.gz
array: mark the array to grow as volatilecmn/revwalk-no-prealloc
This works around strict aliasing rules letting some versions of GCC (particularly on RHEL 6) thinking that they can skip updating the size of the array when calculating the next element's offset.
-rw-r--r--src/array.h2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/array.h b/src/array.h
index f8a48722a..af9eafa43 100644
--- a/src/array.h
+++ b/src/array.h
@@ -44,7 +44,7 @@ typedef git_array_t(char) git_array_generic_t;
/* use a generic array for growth so this can return the new item */
GIT_INLINE(void *) git_array_grow(void *_a, size_t item_size)
{
- git_array_generic_t *a = _a;
+ volatile git_array_generic_t *a = _a;
uint32_t new_size = (a->size < 8) ? 8 : a->asize * 3 / 2;
char *new_array = git__realloc(a->ptr, new_size * item_size);
if (!new_array) {