[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] trunk r114622: * lisp.h (eassume): New macro.
From: |
Paul Eggert |
Subject: |
[Emacs-diffs] trunk r114622: * lisp.h (eassume): New macro. |
Date: |
Fri, 11 Oct 2013 06:32:40 +0000 |
User-agent: |
Bazaar (2.6b2) |
------------------------------------------------------------
revno: 114622
revision-id: address@hidden
parent: address@hidden
committer: Paul Eggert <address@hidden>
branch nick: trunk
timestamp: Thu 2013-10-10 23:32:29 -0700
message:
* lisp.h (eassume): New macro.
Also, include <verify.h>, for 'assume'.
* alloc.c (bool_vector_payload_bytes, Fmake_bool_vector)
(vroundup, vector_nbytes):
* data.c (bool_vector_spare_mask, bool_vector_binop_driver)
(Fbool_vector_not, Fbool_vector_count_matches)
(Fbool_vector_count_matches_at):
Use eassume, not eassert.
* casetab.c (set_identity, shuffle):
* composite.c (composition_gstring_put_cache):
* dispnew.c (update_frame_1):
* ftfont.c (ftfont_shape_by_flt):
* image.c (gif_load):
* intervals.c (offset_intervals):
* macfont.m (macfont_shape):
Remove calls to 'assume' that are no longer needed, because
--enable-gcc-warnings no longer generates bogus warnings
when these calls are removed.
modified:
src/ChangeLog changelog-20091113204419-o5vbwnq5f7feedwu-1438
src/alloc.c alloc.c-20091113204419-o5vbwnq5f7feedwu-252
src/casetab.c casetab.c-20091113204419-o5vbwnq5f7feedwu-155
src/composite.c
composite.c-20091113204419-o5vbwnq5f7feedwu-1728
src/data.c data.c-20091113204419-o5vbwnq5f7feedwu-251
src/dispnew.c dispnew.c-20091113204419-o5vbwnq5f7feedwu-258
src/ftfont.c ftfont.c-20091113204419-o5vbwnq5f7feedwu-8542
src/image.c image.c-20091113204419-o5vbwnq5f7feedwu-2969
src/intervals.c intervals.c-20091113204419-o5vbwnq5f7feedwu-519
src/lisp.h lisp.h-20091113204419-o5vbwnq5f7feedwu-253
src/macfont.m macfont.m-20130915173740-04lgloz0557bz98l-2
=== modified file 'src/ChangeLog'
--- a/src/ChangeLog 2013-10-11 03:55:26 +0000
+++ b/src/ChangeLog 2013-10-11 06:32:29 +0000
@@ -1,3 +1,24 @@
+2013-10-11 Paul Eggert <address@hidden>
+
+ * lisp.h (eassume): New macro.
+ Also, include <verify.h>, for 'assume'.
+ * alloc.c (bool_vector_payload_bytes, Fmake_bool_vector)
+ (vroundup, vector_nbytes):
+ * data.c (bool_vector_spare_mask, bool_vector_binop_driver)
+ (Fbool_vector_not, Fbool_vector_count_matches)
+ (Fbool_vector_count_matches_at):
+ Use eassume, not eassert.
+ * casetab.c (set_identity, shuffle):
+ * composite.c (composition_gstring_put_cache):
+ * dispnew.c (update_frame_1):
+ * ftfont.c (ftfont_shape_by_flt):
+ * image.c (gif_load):
+ * intervals.c (offset_intervals):
+ * macfont.m (macfont_shape):
+ Remove calls to 'assume' that are no longer needed, because
+ --enable-gcc-warnings no longer generates bogus warnings
+ when these calls are removed.
+
2013-10-11 Dmitry Antipov <address@hidden>
* xdisp.c (deep_copy_glyph_row): Remove unused locals.
=== modified file 'src/alloc.c'
--- a/src/alloc.c 2013-10-08 17:49:20 +0000
+++ b/src/alloc.c 2013-10-11 06:32:29 +0000
@@ -2027,7 +2027,7 @@
ptrdiff_t exact_needed_bytes;
ptrdiff_t needed_bytes;
- eassert (nr_bits >= 0);
+ eassume (nr_bits >= 0);
exact_needed_bytes = ROUNDUP ((size_t) nr_bits, CHAR_BIT) / CHAR_BIT;
needed_bytes = ROUNDUP ((size_t) nr_bits, BITS_PER_BITS_WORD) / CHAR_BIT;
@@ -2064,8 +2064,8 @@
total_payload_bytes = bool_vector_payload_bytes
(XFASTINT (length), &exact_payload_bytes);
- eassert (exact_payload_bytes <= total_payload_bytes);
- eassert (0 <= exact_payload_bytes);
+ eassume (exact_payload_bytes <= total_payload_bytes);
+ eassume (0 <= exact_payload_bytes);
needed_elements = ROUNDUP ((size_t) ((bool_header_size - header_size)
+ total_payload_bytes),
@@ -2622,7 +2622,7 @@
/* Round up X to nearest mult-of-ROUNDUP_SIZE --- use at compile time. */
#define vroundup_ct(x) ROUNDUP ((size_t) (x), roundup_size)
/* Round up X to nearest mult-of-ROUNDUP_SIZE --- use at runtime. */
-#define vroundup(x) (assume ((x) >= 0), vroundup_ct (x))
+#define vroundup(x) (eassume ((x) >= 0), vroundup_ct (x))
/* Rounding helps to maintain alignment constraints if USE_LSB_TAG. */
@@ -2820,7 +2820,7 @@
ptrdiff_t payload_bytes =
bool_vector_payload_bytes (bv->size, NULL);
- eassert (payload_bytes >= 0);
+ eassume (payload_bytes >= 0);
size = bool_header_size + ROUNDUP (payload_bytes, word_size);
}
else
=== modified file 'src/casetab.c'
--- a/src/casetab.c 2013-09-22 09:31:55 +0000
+++ b/src/casetab.c 2013-10-11 06:32:29 +0000
@@ -205,7 +205,6 @@
from = to = XINT (c);
to++;
- assume (to <= MAX_CHAR + 1);
for (; from < to; from++)
CHAR_TABLE_SET (table, from, make_number (from));
}
@@ -232,7 +231,6 @@
from = to = XINT (c);
to++;
- assume (to <= MAX_CHAR + 1);
for (; from < to; from++)
{
Lisp_Object tem = Faref (table, elt);
=== modified file 'src/composite.c'
--- a/src/composite.c 2013-09-24 06:43:20 +0000
+++ b/src/composite.c 2013-10-11 06:32:29 +0000
@@ -674,7 +674,6 @@
len = j;
}
- assume (len <= TYPE_MAXIMUM (ptrdiff_t) - 2);
copy = Fmake_vector (make_number (len + 2), Qnil);
LGSTRING_SET_HEADER (copy, Fcopy_sequence (header));
for (i = 0; i < len; i++)
=== modified file 'src/data.c'
--- a/src/data.c 2013-10-08 04:25:33 +0000
+++ b/src/data.c 2013-10-11 06:32:29 +0000
@@ -2969,7 +2969,7 @@
static bits_word
bool_vector_spare_mask (ptrdiff_t nr_bits)
{
- eassert (nr_bits > 0);
+ eassume (nr_bits > 0);
return (((bits_word) 1) << (nr_bits % BITS_PER_BITS_WORD)) - 1;
}
@@ -3019,7 +3019,7 @@
nr_bits = min (nr_bits, XBOOL_VECTOR (dest)->size);
}
- eassert (nr_bits >= 0);
+ eassume (nr_bits >= 0);
nr_words = ROUNDUP (nr_bits, BITS_PER_BITS_WORD) / BITS_PER_BITS_WORD;
adata = (bits_word *) XBOOL_VECTOR (dest)->data;
@@ -3185,7 +3185,7 @@
bdata = (bits_word *) XBOOL_VECTOR (b)->data;
adata = (bits_word *) XBOOL_VECTOR (a)->data;
- eassert (nr_bits >= 0);
+ eassume (nr_bits >= 0);
for (i = 0; i < nr_bits / BITS_PER_BITS_WORD; i++)
bdata[i] = ~adata[i];
@@ -3220,7 +3220,7 @@
match = NILP (b) ? -1 : 0;
adata = (bits_word *) XBOOL_VECTOR (a)->data;
- eassert (nr_bits >= 0);
+ eassume (nr_bits >= 0);
for (i = 0; i < nr_bits / BITS_PER_BITS_WORD; ++i)
count += popcount_bits_word (adata[i] ^ match);
@@ -3262,7 +3262,7 @@
adata = (bits_word *) XBOOL_VECTOR (a)->data;
- assume (nr_bits >= 0);
+ eassume (nr_bits >= 0);
nr_words = ROUNDUP (nr_bits, BITS_PER_BITS_WORD) / BITS_PER_BITS_WORD;
pos = XFASTINT (i) / BITS_PER_BITS_WORD;
=== modified file 'src/dispnew.c'
--- a/src/dispnew.c 2013-10-08 20:04:40 +0000
+++ b/src/dispnew.c 2013-10-11 06:32:29 +0000
@@ -4480,7 +4480,6 @@
}
}
- assume (0 <= FRAME_LINES (f));
pause_p = 0 < i && i < FRAME_LINES (f) - 1;
/* Now just clean up termcap drivers and set cursor, etc. */
=== modified file 'src/ftfont.c'
--- a/src/ftfont.c 2013-09-22 09:31:55 +0000
+++ b/src/ftfont.c 2013-10-11 06:32:29 +0000
@@ -2425,7 +2425,6 @@
}
len = i;
- assume (len <= STRING_BYTES_BOUND);
if (with_variation_selector)
{
=== modified file 'src/image.c'
--- a/src/image.c 2013-10-10 19:15:33 +0000
+++ b/src/image.c 2013-10-11 06:32:29 +0000
@@ -7571,10 +7571,7 @@
y++, row += interlace_increment[pass])
{
while (subimg_height <= row)
- {
- assume (pass < 3);
- row = interlace_start[++pass];
- }
+ row = interlace_start[++pass];
for (x = 0; x < subimg_width; x++)
{
=== modified file 'src/intervals.c'
--- a/src/intervals.c 2013-10-09 17:56:58 +0000
+++ b/src/intervals.c 2013-10-11 06:32:29 +0000
@@ -1404,10 +1404,7 @@
adjust_intervals_for_insertion (buffer_intervals (buffer),
start, length);
else
- {
- assume (- TYPE_MAXIMUM (ptrdiff_t) <= length);
- adjust_intervals_for_deletion (buffer, start, -length);
- }
+ adjust_intervals_for_deletion (buffer, start, -length);
}
/* Merge interval I with its lexicographic successor. The resulting
=== modified file 'src/lisp.h'
--- a/src/lisp.h 2013-10-09 17:52:38 +0000
+++ b/src/lisp.h 2013-10-11 06:32:29 +0000
@@ -31,6 +31,7 @@
#include <limits.h>
#include <intprops.h>
+#include <verify.h>
INLINE_HEADER_BEGIN
@@ -113,28 +114,48 @@
/* Extra internal type checking? */
-/* Define an Emacs version of 'assert (COND)'. COND should be free of
- side effects; it may be evaluated zero or more times. */
+/* Define Emacs versions of <assert.h>'s 'assert (COND)' and <verify.h>'s
+ 'assume (COND)'. COND should be free of side effects, as it may or
+ may not be evaluated.
+
+ 'eassert (COND)' checks COND at runtime if ENABLE_CHECKING is
+ defined and suppress_checking is false, and does nothing otherwise.
+ Emacs dies if COND is checked and is false. The suppress_checking
+ variable is initialized to 0 in alloc.c. Set it to 1 using a
+ debugger to temporarily disable aborting on detected internal
+ inconsistencies or error conditions.
+
+ In some cases, a good compiler may be able to optimize away the
+ eassert macro even if ENABLE_CHECKING is true, e.g., if XSTRING (x)
+ uses eassert to test STRINGP (x), but a particular use of XSTRING
+ is invoked only after testing that STRINGP (x) is true, making the
+ test redundant.
+
+ eassume is like eassert except that it also causes the compiler to
+ assume that COND is true afterwards, regardless of whether runtime
+ checking is enabled. This can improve performance in some cases,
+ though it can degrade performance in others. It's often suboptimal
+ for COND to call external functions or access volatile storage. */
+
#ifndef ENABLE_CHECKING
# define eassert(cond) ((void) (0 && (cond))) /* Check that COND compiles. */
+# define eassume(cond) assume (cond)
#else /* ENABLE_CHECKING */
extern _Noreturn void die (const char *, const char *, int);
-/* The suppress_checking variable is initialized to 0 in alloc.c. Set
- it to 1 using a debugger to temporarily disable aborting on
- detected internal inconsistencies or error conditions.
-
- In some cases, a good compiler may be able to optimize away the
- eassert macro altogether, e.g., if XSTRING (x) uses eassert to test
- STRINGP (x), but a particular use of XSTRING is invoked only after
- testing that STRINGP (x) is true, making the test redundant. */
extern bool suppress_checking EXTERNALLY_VISIBLE;
# define eassert(cond) \
(suppress_checking || (cond) \
? (void) 0 \
: die (# cond, __FILE__, __LINE__))
+# define eassume(cond) \
+ (suppress_checking \
+ ? assume (cond) \
+ : (cond) \
+ ? (void) 0 \
+ : die (# cond, __FILE__, __LINE__))
#endif /* ENABLE_CHECKING */
=== modified file 'src/macfont.m'
--- a/src/macfont.m 2013-10-02 18:52:34 +0000
+++ b/src/macfont.m 2013-10-11 06:32:29 +0000
@@ -2817,7 +2817,6 @@
}
len = i;
- assume (len <= TYPE_MAXIMUM (EMACS_INT) - 2);
if (INT_MAX / 2 < len)
memory_full (SIZE_MAX);
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] trunk r114622: * lisp.h (eassume): New macro.,
Paul Eggert <=