From: "Alexander V. Tikhonov" <avtikhon@tarantool.org> To: Alexander Turenko <alexander.turenko@tarantool.org> Cc: "Alexander V. Tikhonov" <avtikhon@tarantool.org>, tarantool-patches@freelists.org Subject: [tarantool-patches] [PATCH v2] travis-ci: fix LTO and clang Date: Fri, 17 May 2019 16:25:49 +0300 [thread overview] Message-ID: <75a27a279a4f307cd2cb9a4f96cb71dcdcee9201.1558099514.git.avtikhon@tarantool.org> (raw) Made fixes: - Added CMAKE_EXTRA_PARAMS environment to docker's container runs to enable -DENABLE_LTO=ON/OFF cmake option. - Added CC/CXX environment to docker's container runs to set clang for cmake. Also the additional environment variables {CC,CXX}_FOR_BUILD were not postponed, because we didn't run cross-compilation at the moment, for more info check: https://docs.travis-ci.com/user/languages/cpp/#choosing-compilers-to-test-against - Changed LTO docker's image to 'debian-buster' due to LTO needed higher versions of packages, check for more information commit: f9e28ce4602aff3f9bb4e743b0d6167b0f8df88d ('Add LTO support') - Fixed sources to avoid of failures on builds by GCC with LTO: 1) src/box/memtx_rtree.c: In function ‘mp_decode_rect’: src/box/memtx_rtree.c:86:24: error: ‘c’ may be used uninitialized in this function [-Werror=maybe-uninitialized] rect->coords[i * 2] = c; ^ src/box/memtx_rtree.c:74:10: note: ‘c’ was declared here coord_t c; ^ 2) src/box/sql/func.c: In function ‘quoteFunc’: src/box/sql/func.c:1103:3: error: ‘b’ may be used uninitialized in this function [-Werror=maybe-uninitialized] sql_result_text(context, sql_value_boolean(argv[0]) ? ^ src/box/sql/vdbeapi.c:217:7: note: ‘b’ was declared here bool b; ^ 3) src/box/tuple_update.c: In function ‘update_read_ops’: src/box/tuple_update.c:1022:4: error: ‘field_no’ may be used uninitialized in this function [-Werror=maybe-uninitialized] diag_set(ClientError, ER_NO_SUCH_FIELD_NO, field_no); ^ src/box/tuple_update.c:1014:11: note: ‘field_no’ was declared here int32_t field_no; ^ 4) src/httpc.c: In function ‘httpc_set_verbose’: src/httpc.c:267:2: error: call to ‘_curl_easy_setopt_err_long’ declared with attribute warning: curl_easy_setopt expects a long argument for this option [-Werror] curl_easy_setopt(req->curl_request.easy, CURLOPT_VERBOSE, curl_verbose); ^ 5) src/lua/httpc.c: In function ‘luaT_httpc_request’: src/lua/httpc.c:128:64: error: ‘MEM[(int *)&parser + 20B]’ may be used uninitialized in this function [-Werror=maybe-uninitialized] lua_pushinteger(L, (parser.http_minor > 0) ? parser.http_minor: 0); ^ src/lua/httpc.c:67:21: note: ‘MEM[(int *)&parser + 20B]’ was declared here struct http_parser parser; ^ src/lua/httpc.c:124:64: error: ‘MEM[(int *)&parser + 16B]’ may be used uninitialized in this function [-Werror=maybe-uninitialized] lua_pushinteger(L, (parser.http_major > 0) ? parser.http_major: 0); ^ src/lua/httpc.c:67:21: note: ‘MEM[(int *)&parser + 16B]’ was declared here struct http_parser parser; ^ Close #4215 --- Github: https://github.com/tarantool/tarantool/compare/avtikhon/lto-build-fix Issue: https://github.com/tarantool/tarantool/issues/4215 .travis.mk | 7 +++++-- .travis.yml | 10 ++++++++-- src/box/memtx_rtree.c | 2 +- src/box/sql/vdbeapi.c | 12 +++++++----- src/box/tuple_update.c | 2 +- src/httpc.c | 3 ++- src/lib/http_parser/http_parser.c | 10 ++++++++++ src/lib/http_parser/http_parser.h | 8 +++++++- src/lua/httpc.c | 1 + 9 files changed, 42 insertions(+), 13 deletions(-) diff --git a/.travis.mk b/.travis.mk index 4ac3fc11a..55bee9980 100644 --- a/.travis.mk +++ b/.travis.mk @@ -2,7 +2,7 @@ # Travis CI rules # -DOCKER_IMAGE:=packpack/packpack:debian-stretch +DOCKER_IMAGE?=packpack/packpack:debian-stretch all: package @@ -27,6 +27,9 @@ docker_%: -e CCACHE_DIR=/cache/ccache \ -e COVERALLS_TOKEN=${COVERALLS_TOKEN} \ -e TRAVIS_JOB_ID=${TRAVIS_JOB_ID} \ + -e CMAKE_EXTRA_PARAMS=${CMAKE_EXTRA_PARAMS} \ + -e CC=${CC} \ + -e CXX=${CXX} \ ${DOCKER_IMAGE} \ make -f .travis.mk $(subst docker_,,$@) @@ -37,7 +40,7 @@ deps_ubuntu: libcurl4-openssl-dev libunwind-dev libicu-dev \ python python-pip python-setuptools python-dev \ python-msgpack python-yaml python-argparse python-six python-gevent \ - lcov ruby + lcov ruby clang llvm llvm-dev test_ubuntu: deps_ubuntu cmake . -DCMAKE_BUILD_TYPE=RelWithDebInfo -DENABLE_WERROR=ON ${CMAKE_EXTRA_PARAMS} diff --git a/.travis.yml b/.travis.yml index 18932950e..e94d02ef5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -37,10 +37,16 @@ jobs: if: branch = "master" # Special targets (only LTO for now). - name: "LTO build + test (Linux, gcc)" - env: TARGET=test CMAKE_EXTRA_PARAMS=-DENABLE_LTO=ON + env: > + TARGET=test + CMAKE_EXTRA_PARAMS=-DENABLE_LTO=ON + DOCKER_IMAGE=packpack/packpack:debian-buster if: branch = "master" - name: "LTO build + test (Linux, clang)" - env: TARGET=test CMAKE_EXTRA_PARAMS=-DENABLE_LTO=ON + env: > + TARGET=test + CMAKE_EXTRA_PARAMS=-DENABLE_LTO=ON + DOCKER_IMAGE=packpack/packpack:debian-buster if: branch = "master" compiler: clang - name: "LTO build + test (OS X Mojave 10.14)" diff --git a/src/box/memtx_rtree.c b/src/box/memtx_rtree.c index 45e8fb8e3..b91a405d7 100644 --- a/src/box/memtx_rtree.c +++ b/src/box/memtx_rtree.c @@ -71,7 +71,7 @@ static inline int mp_decode_rect(struct rtree_rect *rect, unsigned dimension, const char *mp, unsigned count, const char *what) { - coord_t c; + coord_t c = 0; if (count == dimension) { /* point */ for (unsigned i = 0; i < dimension; i++) { if (mp_decode_num(&mp, i, &c) < 0) diff --git a/src/box/sql/vdbeapi.c b/src/box/sql/vdbeapi.c index d2868567b..a256d10e8 100644 --- a/src/box/sql/vdbeapi.c +++ b/src/box/sql/vdbeapi.c @@ -206,7 +206,7 @@ sql_value_bytes(sql_value * pVal) double sql_value_double(sql_value * pVal) { - double v; + double v = 0.0; sqlVdbeRealValue((Mem *) pVal, &v); return v; } @@ -214,15 +214,17 @@ sql_value_double(sql_value * pVal) bool sql_value_boolean(sql_value *val) { - bool b; - mem_value_bool((struct Mem *) val, &b); + bool b = false; + int rc = mem_value_bool((struct Mem *) val, &b); + assert(rc == 0); + (void) rc; return b; } int sql_value_int(sql_value * pVal) { - int64_t i; + int64_t i = 0; sqlVdbeIntValue((Mem *) pVal, &i); return (int)i; } @@ -230,7 +232,7 @@ sql_value_int(sql_value * pVal) sql_int64 sql_value_int64(sql_value * pVal) { - int64_t i; + int64_t i = 0; sqlVdbeIntValue((Mem *) pVal, &i); return i; } diff --git a/src/box/tuple_update.c b/src/box/tuple_update.c index 849073258..7a203ced8 100644 --- a/src/box/tuple_update.c +++ b/src/box/tuple_update.c @@ -1011,7 +1011,7 @@ update_read_ops(struct tuple_update *update, const char *expr, "field id must be a number"); return -1; } - int32_t field_no; + int32_t field_no = 0; if (mp_read_i32(update->index_base, op, &expr, &field_no)) return -1; if (field_no - update->index_base >= 0) { diff --git a/src/httpc.c b/src/httpc.c index d8ab27ef0..84bf2413c 100644 --- a/src/httpc.c +++ b/src/httpc.c @@ -267,7 +267,8 @@ httpc_set_low_speed_limit(struct httpc_request *req, long low_speed_limit) void httpc_set_verbose(struct httpc_request *req, bool curl_verbose) { - curl_easy_setopt(req->curl_request.easy, CURLOPT_VERBOSE, curl_verbose); + curl_easy_setopt(req->curl_request.easy, CURLOPT_VERBOSE, + (long) curl_verbose); } void diff --git a/src/lib/http_parser/http_parser.c b/src/lib/http_parser/http_parser.c index b9490117e..28093b79a 100644 --- a/src/lib/http_parser/http_parser.c +++ b/src/lib/http_parser/http_parser.c @@ -40,6 +40,16 @@ * adaptation from nginx http parser module */ +void http_parser_create(struct http_parser *parser) +{ + parser->hdr_value_start = NULL; + parser->hdr_value_end = NULL; + parser->http_major = -1; + parser->http_minor = -1; + parser->hdr_name = NULL; + parser->hdr_name_idx = 0; +} + /** * Utility function used in headers parsing */ diff --git a/src/lib/http_parser/http_parser.h b/src/lib/http_parser/http_parser.h index 9d6cc0932..16c083b43 100644 --- a/src/lib/http_parser/http_parser.h +++ b/src/lib/http_parser/http_parser.h @@ -49,7 +49,13 @@ struct http_parser { int hdr_name_idx; }; -/* +/** + * @brief Initialize an http parser. + * @param parser structure to initialize + */ +void http_parser_create(struct http_parser *parser); + +/** * @brief Parse line containing http header info * @param parser object * @param bufp pointer to buffer with data diff --git a/src/lua/httpc.c b/src/lua/httpc.c index d3d80bfeb..bc8d498ba 100644 --- a/src/lua/httpc.c +++ b/src/lua/httpc.c @@ -65,6 +65,7 @@ parse_headers(lua_State *L, char *buffer, size_t len, int max_header_name_len) { struct http_parser parser; + http_parser_create(&parser); parser.hdr_name = (char *) calloc(max_header_name_len, sizeof(char)); if (parser.hdr_name == NULL) { diag_set(OutOfMemory, max_header_name_len * sizeof(char), -- 2.17.1
next reply other threads:[~2019-05-17 13:25 UTC|newest] Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-05-17 13:25 Alexander V. Tikhonov [this message] 2019-05-20 15:08 ` [tarantool-patches] " Alexander Turenko -- strict thread matches above, loose matches on Subject: below -- 2019-05-17 6:42 [tarantool-patches] " Alexander V. Tikhonov
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=75a27a279a4f307cd2cb9a4f96cb71dcdcee9201.1558099514.git.avtikhon@tarantool.org \ --to=avtikhon@tarantool.org \ --cc=alexander.turenko@tarantool.org \ --cc=tarantool-patches@freelists.org \ --subject='Re: [tarantool-patches] [PATCH v2] travis-ci: fix LTO and clang' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox