[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
emacs-27 6a4ed89: Fix replace-buffer-contents undefined behavior
From: |
Paul Eggert |
Subject: |
emacs-27 6a4ed89: Fix replace-buffer-contents undefined behavior |
Date: |
Thu, 25 Mar 2021 11:14:14 -0400 (EDT) |
branch: emacs-27
commit 6a4ed891d84b1ca1e4d68a6de9dd374f1fadd971
Author: Paul Eggert <eggert@cs.ucla.edu>
Commit: Paul Eggert <eggert@cs.ucla.edu>
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).
---
src/editfns.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/src/editfns.c b/src/editfns.c
index 621e351..cd9633d 100644
--- a/src/editfns.c
+++ b/src/editfns.c
@@ -2053,6 +2053,8 @@ nil. */)
code. */
ptrdiff_t del_bytes = (size_t) size_a / CHAR_BIT + 1;
ptrdiff_t ins_bytes = (size_t) size_b / CHAR_BIT + 1;
+ unsigned char *deletions = SAFE_ALLOCA (del_bytes);
+ unsigned char *insertions = SAFE_ALLOCA (ins_bytes);
struct context ctx = {
.buffer_a = a,
.buffer_b = b,
@@ -2060,8 +2062,8 @@ nil. */)
.beg_b = min_b,
.a_unibyte = BUF_ZV (a) == BUF_ZV_BYTE (a),
.b_unibyte = BUF_ZV (b) == BUF_ZV_BYTE (b),
- .deletions = SAFE_ALLOCA (del_bytes),
- .insertions = SAFE_ALLOCA (ins_bytes),
+ .deletions = deletions,
+ .insertions = insertions,
.fdiag = buffer + size_b + 1,
.bdiag = buffer + diags + size_b + 1,
.heuristic = true,
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- emacs-27 6a4ed89: Fix replace-buffer-contents undefined behavior,
Paul Eggert <=