aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPaul Eggert2021-03-21 18:08:13 -0700
committerPaul Eggert2021-03-25 08:13:12 -0700
commit6a4ed891d84b1ca1e4d68a6de9dd374f1fadd971 (patch)
tree3a950065f2e0da076faca86a6653f81d2899c69a /src
parent720a8b17f8f48f2bc7d59dc71be1d5fc35f0964b (diff)
downloademacs-6a4ed891d84b1ca1e4d68a6de9dd374f1fadd971.tar.gz
emacs-6a4ed891d84b1ca1e4d68a6de9dd374f1fadd971.zip
Fix replace-buffer-contents undefined behavior
* src/editfns.c (Freplace_buffer_contents): Avoid undefined behavior with competing side effects in parallel subexpressions. Problem reported by Apple clang version 12.0.0 (clang-1200.0.32.29).
Diffstat (limited to 'src')
-rw-r--r--src/editfns.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/editfns.c b/src/editfns.c
index 621e35171d8..cd9633d4c6a 100644
--- a/src/editfns.c
+++ b/src/editfns.c
@@ -2053,6 +2053,8 @@ nil. */)
2053 code. */ 2053 code. */
2054 ptrdiff_t del_bytes = (size_t) size_a / CHAR_BIT + 1; 2054 ptrdiff_t del_bytes = (size_t) size_a / CHAR_BIT + 1;
2055 ptrdiff_t ins_bytes = (size_t) size_b / CHAR_BIT + 1; 2055 ptrdiff_t ins_bytes = (size_t) size_b / CHAR_BIT + 1;
2056 unsigned char *deletions = SAFE_ALLOCA (del_bytes);
2057 unsigned char *insertions = SAFE_ALLOCA (ins_bytes);
2056 struct context ctx = { 2058 struct context ctx = {
2057 .buffer_a = a, 2059 .buffer_a = a,
2058 .buffer_b = b, 2060 .buffer_b = b,
@@ -2060,8 +2062,8 @@ nil. */)
2060 .beg_b = min_b, 2062 .beg_b = min_b,
2061 .a_unibyte = BUF_ZV (a) == BUF_ZV_BYTE (a), 2063 .a_unibyte = BUF_ZV (a) == BUF_ZV_BYTE (a),
2062 .b_unibyte = BUF_ZV (b) == BUF_ZV_BYTE (b), 2064 .b_unibyte = BUF_ZV (b) == BUF_ZV_BYTE (b),
2063 .deletions = SAFE_ALLOCA (del_bytes), 2065 .deletions = deletions,
2064 .insertions = SAFE_ALLOCA (ins_bytes), 2066 .insertions = insertions,
2065 .fdiag = buffer + size_b + 1, 2067 .fdiag = buffer + size_b + 1,
2066 .bdiag = buffer + diags + size_b + 1, 2068 .bdiag = buffer + diags + size_b + 1,
2067 .heuristic = true, 2069 .heuristic = true,