From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from localhost (localhost [127.0.0.1]) by turing.freelists.org (Avenir Technologies Mail Multiplex) with ESMTP id 29CF22818D for ; Fri, 17 May 2019 02:42:40 -0400 (EDT) Received: from turing.freelists.org ([127.0.0.1]) by localhost (turing.freelists.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 8D1caAux0qs3 for ; Fri, 17 May 2019 02:42:40 -0400 (EDT) Received: from smtpng3.m.smailru.net (smtpng3.m.smailru.net [94.100.177.149]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by turing.freelists.org (Avenir Technologies Mail Multiplex) with ESMTPS id 49CA42C108 for ; Fri, 17 May 2019 02:42:39 -0400 (EDT) From: "Alexander V. Tikhonov" Subject: [tarantool-patches] [PATCH v2] travis-ci: fix LTO and clang Date: Fri, 17 May 2019 09:42:34 +0300 Message-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit Sender: tarantool-patches-bounce@freelists.org Errors-to: tarantool-patches-bounce@freelists.org Reply-To: tarantool-patches@freelists.org List-Help: List-Unsubscribe: List-software: Ecartis version 1.0.0 List-Id: tarantool-patches List-Subscribe: List-Owner: List-post: List-Archive: To: Alexander Turenko Cc: "Alexander V. Tikhonov" , tarantool-patches@freelists.org 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 | 24 ++++++++++++++++-------- 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, 51 insertions(+), 16 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 6e79cf2fe..1e03c2367 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..a78ffb2f9 100644 --- a/src/box/sql/vdbeapi.c +++ b/src/box/sql/vdbeapi.c @@ -206,32 +206,40 @@ sql_value_bytes(sql_value * pVal) double sql_value_double(sql_value * pVal) { - double v; - sqlVdbeRealValue((Mem *) pVal, &v); + double v = 0.0; + int rc = sqlVdbeRealValue((Mem *) pVal, &v); + assert(rc == 0); + (void) rc; return v; } 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; - sqlVdbeIntValue((Mem *) pVal, &i); + int64_t i = 0; + int rc = sqlVdbeIntValue((Mem *) pVal, &i); + assert(rc == 0); + (void) rc; return (int)i; } sql_int64 sql_value_int64(sql_value * pVal) { - int64_t i; - sqlVdbeIntValue((Mem *) pVal, &i); + int64_t i = 0; + int rc = sqlVdbeIntValue((Mem *) pVal, &i); + assert(rc == 0); + (void) rc; 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