* [tarantool-patches] [PATCH v2] travis-ci: fix LTO and clang
@ 2019-05-17 13:25 Alexander V. Tikhonov
2019-05-20 15:08 ` [tarantool-patches] " Alexander Turenko
0 siblings, 1 reply; 2+ messages in thread
From: Alexander V. Tikhonov @ 2019-05-17 13:25 UTC (permalink / raw)
To: Alexander Turenko; +Cc: Alexander V. Tikhonov, tarantool-patches
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
^ permalink raw reply [flat|nested] 2+ messages in thread
* [tarantool-patches] Re: [PATCH v2] travis-ci: fix LTO and clang
2019-05-17 13:25 [tarantool-patches] [PATCH v2] travis-ci: fix LTO and clang Alexander V. Tikhonov
@ 2019-05-20 15:08 ` Alexander Turenko
0 siblings, 0 replies; 2+ messages in thread
From: Alexander Turenko @ 2019-05-20 15:08 UTC (permalink / raw)
To: Alexander V. Tikhonov; +Cc: tarantool-patches
Pushed to master, 2.1 and 1.10.
1.10 has no LTO targets, but I saved CMAKE_EXTRA_PARAMS to keep
CI related files as similar as possible and because we possibly will
need it for GitLab CI targets.
I fixed minor points here and there, see below.
WBR, Alexander Turenko.
On Fri, May 17, 2019 at 04:25:49PM +0300, Alexander V. Tikhonov wrote:
> 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
were postponed? Fixed.
> run cross-compilation at the moment, for more info check:
>
> https://docs.travis-ci.com/user/languages/cpp/#choosing-compilers-to-test-against
>
> @@ -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;
We use tab symbol for indentation in C sources. Fixed.
> 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);
Added a whitespace to indent '(long) curl_verbose' on the same column
with 'req->curl_request.easy'.
> }
>
> void
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2019-05-20 15:08 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-05-17 13:25 [tarantool-patches] [PATCH v2] travis-ci: fix LTO and clang Alexander V. Tikhonov
2019-05-20 15:08 ` [tarantool-patches] " Alexander Turenko
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox