From 3b7dc27fb5497903145a52413116fad25fbaf138 Mon Sep 17 00:00:00 2001 From: Josh Haberman Date: Tue, 24 Jan 2017 10:00:28 -0800 Subject: Fixed amalgamated build and added test. --- .travis.yml | 1 + Makefile | 4 ++++ travis.sh | 12 ++++++++++++ upb/msg.c | 23 ++++++++++------------- upb/upb.c | 6 +++--- 5 files changed, 30 insertions(+), 16 deletions(-) diff --git a/.travis.yml b/.travis.yml index e43855e..053b130 100644 --- a/.travis.yml +++ b/.travis.yml @@ -21,3 +21,4 @@ env: - UPB_TRAVIS_BUILD=ndebug - UPB_TRAVIS_BUILD=coverage - UPB_TRAVIS_BUILD=genfiles + - UPB_TRAVIS_BUILD=amalgamated diff --git a/Makefile b/Makefile index 354d08c..09b71c4 100644 --- a/Makefile +++ b/Makefile @@ -534,3 +534,7 @@ amalgamate: upb.c upb.h upb.c upb.h: $(AMALGAMATE_SRCS) $(E) AMALGAMATE $@ $(Q) ./tools/amalgamate.py "" "" $^ + +amalgamated: upb.c upb.h + $(E) CC upb.c + $(Q) $(CC) -o upb.o -c upb.c $(WARNFLAGS) diff --git a/travis.sh b/travis.sh index 5c099a2..413015a 100755 --- a/travis.sh +++ b/travis.sh @@ -107,6 +107,17 @@ ndebug_script() { make test } +# Tests the amalgamated build (this ensures that the different .c files +# don't have symbols or macros that conflict with each other. +amalgamated_install() { + : +} +amalgamated_script() { + # Override of USER_CPPFLAGS removes -UNDEBUG. + export USER_CPPFLAGS="-UNDEBUG" + make amalgamated +} + # A run that executes with coverage support and uploads to coveralls.io coverage_install() { sudo apt-get update -qq @@ -145,6 +156,7 @@ if [ "$1" == "local" ]; then run_config "lua" run_config "ndebug" run_config "genfiles" + run_config "amalgamated" exit fi diff --git a/upb/msg.c b/upb/msg.c index 5fa9bc8..39e3035 100644 --- a/upb/msg.c +++ b/upb/msg.c @@ -26,7 +26,7 @@ void *upb_map_pack(const upb_map *map, void *p, size_t *ofs, size_t size); #define CHARPTR_AT(msg, ofs) ((char*)msg + ofs) #define ENCODE_MAX_NESTING 64 -#define CHECK_RETURN(x) if (!(x)) { return false; } +#define CHECK_TRUE(x) if (!(x)) { return false; } /** upb_msgval ****************************************************************/ @@ -492,7 +492,7 @@ struct upb_visitor { upb_sink *sink; }; -static upb_selector_t getsel(const upb_fielddef *f, upb_handlertype_t type) { +static upb_selector_t getsel2(const upb_fielddef *f, upb_handlertype_t type) { upb_selector_t ret; bool ok = upb_handlers_getselector(f, type, &ret); UPB_ASSERT(ok); @@ -572,34 +572,31 @@ static bool upb_visitor_visitmsg2(const upb_msg *msg, } else if (upb_fielddef_isstring(f)) { /* TODO putstr(); */ } else { - upb_selector_t sel = getsel(f, upb_handlers_getprimitivehandlertype(f)); + upb_selector_t sel = getsel2(f, upb_handlers_getprimitivehandlertype(f)); UPB_ASSERT(upb_fielddef_isprimitive(f)); switch (upb_fielddef_type(f)) { case UPB_TYPE_FLOAT: - CHECK_RETURN(upb_sink_putfloat(sink, sel, upb_msgval_getfloat(val))); + CHECK_TRUE(upb_sink_putfloat(sink, sel, upb_msgval_getfloat(val))); break; case UPB_TYPE_DOUBLE: - CHECK_RETURN( - upb_sink_putdouble(sink, sel, upb_msgval_getdouble(val))); + CHECK_TRUE(upb_sink_putdouble(sink, sel, upb_msgval_getdouble(val))); break; case UPB_TYPE_BOOL: - CHECK_RETURN(upb_sink_putbool(sink, sel, upb_msgval_getbool(val))); + CHECK_TRUE(upb_sink_putbool(sink, sel, upb_msgval_getbool(val))); break; case UPB_TYPE_ENUM: case UPB_TYPE_INT32: - CHECK_RETURN(upb_sink_putint32(sink, sel, upb_msgval_getint32(val))); + CHECK_TRUE(upb_sink_putint32(sink, sel, upb_msgval_getint32(val))); break; case UPB_TYPE_UINT32: - CHECK_RETURN( - upb_sink_putuint32(sink, sel, upb_msgval_getuint32(val))); + CHECK_TRUE(upb_sink_putuint32(sink, sel, upb_msgval_getuint32(val))); break; case UPB_TYPE_INT64: - CHECK_RETURN(upb_sink_putint64(sink, sel, upb_msgval_getint64(val))); + CHECK_TRUE(upb_sink_putint64(sink, sel, upb_msgval_getint64(val))); break; case UPB_TYPE_UINT64: - CHECK_RETURN( - upb_sink_putuint64(sink, sel, upb_msgval_getuint64(val))); + CHECK_TRUE(upb_sink_putuint64(sink, sel, upb_msgval_getuint64(val))); break; case UPB_TYPE_STRING: case UPB_TYPE_BYTES: diff --git a/upb/upb.c b/upb/upb.c index c24ac04..97f6c61 100644 --- a/upb/upb.c +++ b/upb/upb.c @@ -104,7 +104,7 @@ upb_alloc upb_alloc_global = {&upb_global_allocfunc}; /* Be conservative and choose 16 in case anyone is using SSE. */ static const size_t maxalign = 16; -static size_t align_up(size_t size) { +static size_t align_up_max(size_t size) { return ((size + maxalign - 1) / maxalign) * maxalign; } @@ -128,7 +128,7 @@ static void upb_arena_addblock(upb_arena *a, void *ptr, size_t size, block->next = a->block_head; block->size = size; - block->used = align_up(sizeof(mem_block)); + block->used = align_up_max(sizeof(mem_block)); block->owned = owned; a->block_head = block; @@ -161,7 +161,7 @@ static void *upb_arena_doalloc(upb_alloc *alloc, void *ptr, size_t oldsize, return NULL; /* We are an arena, don't need individual frees. */ } - size = align_up(size); + size = align_up_max(size); /* TODO(haberman): special-case if this is a realloc of the last alloc? */ -- cgit v1.2.3