mity / acutest

Simple header-only C/C++ unit testing facility.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Sign conversion warnings when compiling with -Wsign-conversion under clang

xor-gate opened this issue · comments

I have copied latest master into my project, but I have very strict compiler flags. Here is the output:

/Users/jerry/go/src/github.com/xor-gate/eresp/tests/acutest.h:206:16: warning: implicit conversion changes signedness: 'int' to 'size_t'
      (aka 'unsigned long') [-Wsign-conversion]
        return printf("%s", buffer);
        ~~~~~~ ^~~~~~~~~~~~~~~~~~~~
/Users/jerry/go/src/github.com/xor-gate/eresp/tests/acutest.h:221:13: warning: implicit conversion changes signedness: 'int' to 'size_t'
      (aka 'unsigned long') [-Wsign-conversion]
        n = printf("%s", buffer);
          ~ ^~~~~~~~~~~~~~~~~~~~
/Users/jerry/go/src/github.com/xor-gate/eresp/tests/acutest.h:300:18: warning: implicit conversion changes signedness: 'int' to 'unsigned long'
      [-Wsign-conversion]
            n += printf("%s:%d: Check ", file, line);
              ~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/Users/jerry/go/src/github.com/xor-gate/eresp/tests/acutest.h:304:14: warning: implicit conversion changes signedness: 'int' to 'unsigned long'
      [-Wsign-conversion]
        n += vprintf(fmt, args);
          ~~ ^~~~~~~~~~~~~~~~~~
/Users/jerry/go/src/github.com/xor-gate/eresp/tests/acutest.h:732:77: warning: implicit conversion changes signedness: 'int' to 'unsigned long'
      [-Wsign-conversion]
    tests__ = (const struct test__**) malloc(sizeof(const struct test__*) * test_list_size__);
                                                                          ~ ^~~~~~~~~~~~~~~~
/Users/jerry/go/src/github.com/xor-gate/eresp/tests/acutest.h:733:50: warning: implicit conversion changes signedness: 'int' to 'unsigned long'
      [-Wsign-conversion]
    test_flags__ = (char*) malloc(sizeof(char) * test_list_size__);
                                               ~ ^~~~~~~~~~~~~~~~
/Users/jerry/go/src/github.com/xor-gate/eresp/tests/acutest.h:738:52: warning: implicit conversion changes signedness: 'int' to 'unsigned long'
      [-Wsign-conversion]
    memset((void*) test_flags__, 0, sizeof(char) * test_list_size__);
                                                 ~ ^~~~~~~~~~~~~~~~
/usr/include/secure/_string.h:77:38: note: expanded from macro 'memset'
  __builtin___memset_chk (dest, val, len, __darwin_obsz0 (dest))
                                     ^~~
/Users/jerry/go/src/github.com/xor-gate/eresp/tests/reader.c:34:9: warning: missing field 'func' initializer [-Wmissing-field-initializers]
    { 0 }
        ^

For the last test list entry create a macro to have all fields initialized instead of incorrect {0}:

#define TEST_LIST_END {NULL, NULL}

I don't have clang available anywhere in my reach right now. I fixed what gcc can see with -Wextra and -Wsign-conversion in the commit 704359e. If gcc missed something what clang can see, feel free to make PR.

About the {0}, I see adding some TEST_LIST_END macro as superfluous and I cannot see any benefit in having it. You may use { NULL, NULL} directly. It is IMO clear from the TEST_LIST description how such super-correct end record looks like.

You can enable clang for travis like this https://github.com/xor-gate/stlink2/blob/master/.travis.yml#L23-L24, dont forget to add clang to the installed packages like this: https://github.com/xor-gate/stlink2/blob/master/.travis.yml#L10-L13

Should be fixed by 21845db.