git-compat-util: st_add4: work around gcc 4.2.x compiler crash
authorEric Sunshine <sunshine@sunshineco.com>
Mon, 21 Mar 2016 04:35:57 +0000 (00:35 -0400)
committerJunio C Hamano <gitster@pobox.com>
Mon, 21 Mar 2016 16:18:07 +0000 (09:18 -0700)
Although changes by 5b442c4 (tree-diff: catch integer overflow in
combine_diff_path allocation, 2016-02-19) are perfectly valid, they
unfortunately trigger an internal compiler error in gcc 4.2.x:

combine-diff.c: In function 'diff_tree_combined':
combine-diff.c:1391: internal compiler error: Segmentation fault: 11

Experimentation reveals that changing st_add4()'s argument evaluation
order is sufficient to sidestep this problem.

Although st_add3() does not trigger the compiler bug, for style
consistency, change its argument evaluation order to match.

Signed-off-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
git-compat-util.h
index 061e33c7749dc496e1f5e78aabdfd4c6f1e82736..6d304613ff1faa8b65567438227376ad383ead30 100644 (file)
@@ -713,8 +713,8 @@ static inline size_t st_add(size_t a, size_t b)
                    (uintmax_t)a, (uintmax_t)b);
        return a + b;
 }
-#define st_add3(a,b,c)   st_add((a),st_add((b),(c)))
-#define st_add4(a,b,c,d) st_add((a),st_add3((b),(c),(d)))
+#define st_add3(a,b,c)   st_add(st_add((a),(b)),(c))
+#define st_add4(a,b,c,d) st_add(st_add3((a),(b),(c)),(d))
 
 static inline size_t st_mult(size_t a, size_t b)
 {