Add HB_NDEBUG

API changes:
- If NDEBUG is defined, define HB_NDEBUG
- Disable costlier sanity checks if HB_NDEBUG is defined.

In 1.2.3 introduced some code to disable costly sanity checks if
NDEBUG is defined.  NDEBUG, however, disables all assert()s as
well.  With HB_NDEBUG, one can disable costlier checks but keep
assert()s.

I'll probably add a way to define HB_NDEBUG automatically in
release tarballs.  But for now, production systems that do NOT
define NDEBUG, are encouraged to define HB_NDEBUG for our build.
This commit is contained in:
Behdad Esfahbod 2016-02-25 13:56:47 +09:00
parent 75568b0a7f
commit 91dd115652
4 changed files with 14 additions and 5 deletions

View File

@ -130,7 +130,7 @@ pkgconfig_DATA = harfbuzz.pc
EXTRA_DIST += harfbuzz.pc.in
FUZZING_CPPFLAGS= \
-DNDEBUG \
-DHB_NDEBUG \
-DHB_MAX_NESTING_LEVEL=3 \
-DHB_SANITIZE_MAX_EDITS=3 \
-DHB_BUFFER_MAX_EXPANSION_FACTOR=3 \

View File

@ -124,7 +124,7 @@ struct hb_buffer_t {
void *message_data;
hb_destroy_func_t message_destroy;
#ifndef NDEBUG
#ifndef HB_NDEBUG
/* Internal debugging. */
/* These reflect current allocations of the bytes in glyph_info_t's var1 and var2. */
uint8_t allocated_var_bytes[8];
@ -260,7 +260,7 @@ struct hb_buffer_t {
#define HB_BUFFER_XALLOCATE_VAR(b, func, var, owner) \
b->func (offsetof (hb_glyph_info_t, var) - offsetof(hb_glyph_info_t, var1), \
sizeof (b->info[0].var), owner)
#ifndef NDEBUG
#ifndef HB_NDEBUG
#define HB_BUFFER_ALLOCATE_VAR(b, var) \
HB_BUFFER_XALLOCATE_VAR (b, allocate_var, var (), #var)
#define HB_BUFFER_DEALLOCATE_VAR(b, var) \

View File

@ -661,7 +661,7 @@ hb_buffer_t::guess_segment_properties (void)
}
#ifndef NDEBUG
#ifndef HB_NDEBUG
static inline void
dump_var_allocation (const hb_buffer_t *buffer)
{
@ -729,7 +729,7 @@ void hb_buffer_t::deallocate_var_all (void)
memset (allocated_var_bytes, 0, sizeof (allocated_var_bytes));
memset (allocated_var_owner, 0, sizeof (allocated_var_owner));
}
#endif /* NDEBUG */
#endif /* HB_NDEBUG */
/* Public API */

View File

@ -611,6 +611,15 @@ static inline unsigned char TOLOWER (unsigned char c)
/* Debug */
/* HB_NDEBUG disables some sanity checks that are very safe to disable and
* should be disabled in production systems. If NDEBUG is defined, enable
* HB_NDEBUG; but if it's desirable that normal assert()s (which are very
* light-weight) to be enabled, then HB_DEBUG can be defined to disable
* the costlier checks. */
#ifdef NDEBUG
#define HB_NDEBUG
#endif
#ifndef HB_DEBUG
#define HB_DEBUG 0
#endif