Skip to content

Commit

Permalink
travis-ci: fix LTO and clang
Browse files Browse the repository at this point in the history
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 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:

    f9e28ce ('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
  • Loading branch information
avtikhon authored and Totktonada committed May 20, 2019
1 parent 549140b commit e55396c
Show file tree
Hide file tree
Showing 9 changed files with 42 additions and 13 deletions.
7 changes: 5 additions & 2 deletions .travis.mk
Expand Up @@ -2,7 +2,7 @@
# Travis CI rules
#

DOCKER_IMAGE:=packpack/packpack:debian-stretch
DOCKER_IMAGE?=packpack/packpack:debian-stretch

all: package

Expand All @@ -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_,,$@)

Expand All @@ -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}
Expand Down
10 changes: 8 additions & 2 deletions .travis.yml
Expand Up @@ -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)"
Expand Down
2 changes: 1 addition & 1 deletion src/box/memtx_rtree.c
Expand Up @@ -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)
Expand Down
12 changes: 7 additions & 5 deletions src/box/sql/vdbeapi.c
Expand Up @@ -206,31 +206,33 @@ 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;
}

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;
}

sql_int64
sql_value_int64(sql_value * pVal)
{
int64_t i;
int64_t i = 0;
sqlVdbeIntValue((Mem *) pVal, &i);
return i;
}
Expand Down
2 changes: 1 addition & 1 deletion src/box/tuple_update.c
Expand Up @@ -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) {
Expand Down
3 changes: 2 additions & 1 deletion src/httpc.c
Expand Up @@ -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
Expand Down
10 changes: 10 additions & 0 deletions src/lib/http_parser/http_parser.c
Expand Up @@ -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
*/
Expand Down
8 changes: 7 additions & 1 deletion src/lib/http_parser/http_parser.h
Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions src/lua/httpc.c
Expand Up @@ -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),
Expand Down

0 comments on commit e55396c

Please sign in to comment.