Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

1.7.2: LTO exposes a lot of -Wmaybe-uninitialized issues #6734

Open
kloczek opened this issue Feb 10, 2024 · 5 comments
Open

1.7.2: LTO exposes a lot of -Wmaybe-uninitialized issues #6734

kloczek opened this issue Feb 10, 2024 · 5 comments

Comments

@kloczek
Copy link
Contributor

kloczek commented Feb 10, 2024

First just summary build time warning stats

[tkloczko@pers-jacek SPECS]$ rpmbuild -ba libgit2.spec 2>&1 | grep -- \\[-W | sed 's/.*\[//; s/\]//' | sort | uniq -c | sort -nr
     62 -Wmaybe-uninitialized
      1 -Wuse-after-free
      1 -Wstringop-overread
      1 -Wdangling-pointer=
      1 -Warray-parameter=
extracted stderr with all warnings
deps/ntlmclient/unicode_builtin.c: In function ‘unicode_builtin_encoding_convert’:
deps/ntlmclient/unicode_builtin.c:380:37: warning: pointer ‘out_19’ may be used after ‘realloc’ [-Wuse-after-free]
  380 |                 out_len = out_start - out;
      |                           ~~~~~~~~~~^~~~~
deps/ntlmclient/unicode_builtin.c:375:32: note: call to ‘realloc’ here
  375 |                 if ((new_out = realloc(out, out_size)) == NULL) {
      |                                ^~~~~~~~~~~~~~~~~~~~~~
src/util/futils.c:224:23: warning: argument 3 of type ‘unsigned char[32]’ with mismatched bound [-Warray-parameter=]
  224 |         unsigned char checksum[GIT_HASH_SHA256_SIZE],
      |         ~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from src/util/futils.c:8:
src/util/futils.h:28:23: note: previously declared as ‘unsigned char[20]’
   28 |         unsigned char checksum[GIT_HASH_SHA1_SIZE],
      |         ~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
At top level:
cc1: note: unrecognized command-line option ‘-Wno-documentation-deprecated-sync’ may have been intended to silence earlier diagnostics
cc1: note: unrecognized command-line option ‘-Wno-documentation-deprecated-sync’ may have been intended to silence earlier diagnostics
src/libgit2/transports/httpclient.c: In function ‘git_http_client_read_body’:
src/libgit2/transports/httpclient.c:1461:29: warning: storing the address of local variable ‘parser_context’ in ‘client_17(D)->parser.data’ [-Wdangling-pointer=]
 1461 |         client->parser.data = &parser_context;
      |         ~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
src/libgit2/transports/httpclient.c:1441:29: note: ‘parser_context’ declared here
 1441 |         http_parser_context parser_context = {0};
      |                             ^~~~~~~~~~~~~~
src/libgit2/transports/httpclient.c:1437:26: note: ‘client’ declared here
 1437 |         git_http_client *client,
      |         ~~~~~~~~~~~~~~~~~^~~~~~
At top level:
cc1: note: unrecognized command-line option ‘-Wno-documentation-deprecated-sync’ may have been intended to silence earlier diagnostics
In function ‘git_regexp_match’,
    inlined from ‘git_config_backend_foreach_match’ at src/libgit2/config.c:532:17:
src/util/regexp.c:37:22: warning: ‘regex’ may be used uninitialized [-Wmaybe-uninitialized]
   37 |         if ((error = pcre_exec(*r, NULL, string, (int) strlen(string), 0, 0, NULL, 0)) < 0)
      |                      ^
src/libgit2/config.c: In function ‘git_config_backend_foreach_match’:
src/libgit2/config.c:516:20: note: ‘regex’ was declared here
  516 |         git_regexp regex;
      |                    ^
In function ‘git_fs_path_owner_is’,
    inlined from ‘validate_ownership_path’ at src/libgit2/repository.c:631:11,
    inlined from ‘validate_ownership’ at src/libgit2/repository.c:671:16,
    inlined from ‘git_repository_open_ext’ at src/libgit2/repository.c:1124:15:
src/util/fs_path.c:1990:45: warning: ‘sudo_uid’ may be used uninitialized [-Wmaybe-uninitialized]
 1990 |             sudo_uid_lookup(&sudo_uid) == 0 &&
      |                                             ^
src/util/fs_path.c: In function ‘git_repository_open_ext’:
src/util/fs_path.c:1959:21: note: ‘sudo_uid’ was declared here
 1959 |         uid_t euid, sudo_uid;
      |                     ^
In function ‘handle_next’,
    inlined from ‘test_dirent__diriter_with_fullname’ at tests/util/dirent.c:270:3:
tests/util/dirent.c:253:9: warning: ‘filename’ may be used uninitialized [-Wmaybe-uninitialized]
  253 |         cl_assert_equal_s(fullpath+4, filename);
      |         ^
tests/util/dirent.c: In function ‘test_dirent__diriter_with_fullname’:
tests/util/dirent.c:246:32: note: ‘filename’ was declared here
  246 |         const char *fullpath, *filename;
      |                                ^
In function ‘reflog_parse’,
    inlined from ‘refdb_reflog_fs__read’ at src/libgit2/refdb_fs.c:2090:15:
src/libgit2/refdb_fs.c:1968:20: warning: ‘c’ may be used uninitialized [-Wmaybe-uninitialized]
 1968 |                 if (c == '\t') {
      |                    ^
src/libgit2/refdb_fs.c: In function ‘refdb_reflog_fs__read’:
src/libgit2/refdb_fs.c:1949:22: note: ‘c’ was declared here
 1949 |                 char c;
      |                      ^
tests/util/strtol.c: In function ‘assert_l32_parses’:
tests/util/strtol.c:7:9: warning: ‘i’ may be used uninitialized [-Wmaybe-uninitialized]
    7 |         cl_assert_equal_i(i, expected);
      |         ^
tests/util/strtol.c:5:17: note: ‘i’ was declared here
    5 |         int32_t i;
      |                 ^
tests/util/strtol.c: In function ‘test_strtol__buffer_length_truncates’:
tests/util/strtol.c:97:9: warning: ‘i32’ may be used uninitialized [-Wmaybe-uninitialized]
   97 |         cl_assert_equal_i(i32, 1);
      |         ^
tests/util/strtol.c:93:17: note: ‘i32’ was declared here
   93 |         int32_t i32;
      |                 ^
In function ‘reflog_parse’,
    inlined from ‘refdb_reflog_fs__read’ at src/libgit2/refdb_fs.c:2090:15:
src/libgit2/refdb_fs.c:1968:20: warning: ‘c’ may be used uninitialized [-Wmaybe-uninitialized]
 1968 |                 if (c == '\t') {
      |                    ^
src/libgit2/refdb_fs.c: In function ‘refdb_reflog_fs__read’:
src/libgit2/refdb_fs.c:1949:22: note: ‘c’ was declared here
 1949 |                 char c;
      |                      ^
In function ‘git_fs_path_owner_is’,
    inlined from ‘validate_ownership_path’ at src/libgit2/repository.c:631:11,
    inlined from ‘validate_ownership’ at src/libgit2/repository.c:671:16,
    inlined from ‘git_repository_open_ext’ at src/libgit2/repository.c:1124:15:
src/util/fs_path.c:1990:45: warning: ‘sudo_uid’ may be used uninitialized [-Wmaybe-uninitialized]
 1990 |             sudo_uid_lookup(&sudo_uid) == 0 &&
      |                                             ^
src/util/fs_path.c: In function ‘git_repository_open_ext’:
src/util/fs_path.c:1959:21: note: ‘sudo_uid’ was declared here
 1959 |         uid_t euid, sudo_uid;
      |                     ^
src/libgit2/config.c: In function ‘git_config_get_multivar_foreach.constprop’:
src/libgit2/config.c:1000:23: warning: ‘iter’ may be used uninitialized [-Wmaybe-uninitialized]
 1000 |         while ((err = iter->next(&entry, iter)) == 0) {
      |                       ^
src/libgit2/config.c:993:30: note: ‘iter’ was declared here
  993 |         git_config_iterator *iter;
      |                              ^
tests/libgit2/status/worktree.c: In function ‘test_status_worktree__at_head_parent’:
tests/libgit2/status/worktree.c:1351:23: warning: ‘parent_tree’ may be used uninitialized [-Wmaybe-uninitialized]
 1351 |         opts.baseline = parent_tree;
      |                       ^
tests/libgit2/status/worktree.c:1337:19: note: ‘parent_tree’ was declared here
 1337 |         git_tree *parent_tree;
      |                   ^
In function ‘clar__assert’,
    inlined from ‘check_tree_entry’ at tests/libgit2/iterator/tree.c:270:2:
tests/clar/clar.c:708:12: warning: ‘te’ may be used uninitialized [-Wmaybe-uninitialized]
  708 |         if (condition)
      |            ^
tests/libgit2/iterator/tree.c: In function ‘check_tree_entry’:
tests/libgit2/iterator/tree.c:266:31: note: ‘te’ was declared here
  266 |         const git_tree_entry *te;
      |                               ^
tests/libgit2/iterator/tree.c: In function ‘check_tree_range’:
tests/libgit2/iterator/tree.c:371:9: warning: ‘head’ may be used uninitialized [-Wmaybe-uninitialized]
  371 |         cl_git_pass(git_iterator_for_tree(&i, head, &i_opts));
      |         ^
tests/libgit2/iterator/tree.c:360:19: note: ‘head’ was declared here
  360 |         git_tree *head;
      |                   ^
tests/libgit2/iterator/tree.c: In function ‘test_iterator_tree__icase_0’:
tests/libgit2/iterator/tree.c:418:9: warning: ‘head’ may be used uninitialized [-Wmaybe-uninitialized]
  418 |         cl_git_pass(git_iterator_for_tree(&i, head, NULL));
      |         ^
tests/libgit2/iterator/tree.c:411:19: note: ‘head’ was declared here
  411 |         git_tree *head;
      |                   ^
tests/libgit2/iterator/tree.c: In function ‘test_iterator_tree__icase_1’:
tests/libgit2/iterator/tree.c:454:9: warning: ‘head’ may be used uninitialized [-Wmaybe-uninitialized]
  454 |         cl_git_pass(git_iterator_for_tree(&i, head, &i_opts));
      |         ^
tests/libgit2/iterator/tree.c:442:19: note: ‘head’ was declared here
  442 |         git_tree *head;
      |                   ^
tests/libgit2/iterator/tree.c: In function ‘test_iterator_tree__icase_2’:
tests/libgit2/iterator/tree.c:596:9: warning: ‘head’ may be used uninitialized [-Wmaybe-uninitialized]
  596 |         cl_git_pass(git_iterator_for_tree(&i, head, NULL));
      |         ^
tests/libgit2/iterator/tree.c:545:19: note: ‘head’ was declared here
  545 |         git_tree *head;
      |                   ^
tests/libgit2/index/read_index.c: In function ‘test_index_read_index__initialize’:
tests/libgit2/index/read_index.c:19:9: warning: ‘head_ref’ may be used uninitialized [-Wmaybe-uninitialized]
   19 |         git_reference_free(head_ref);
      |         ^
tests/libgit2/index/read_index.c:12:24: note: ‘head_ref’ was declared here
   12 |         git_reference *head_ref;
      |                        ^
tests/libgit2/index/read_index.c:16:9: warning: ‘head’ may be used uninitialized [-Wmaybe-uninitialized]
   16 |         cl_git_pass(git_reset(_repo, head, GIT_RESET_HARD, NULL));
      |         ^
tests/libgit2/index/read_index.c:11:21: note: ‘head’ was declared here
   11 |         git_object *head;
      |                     ^
In function ‘reflog_parse’,
    inlined from ‘refdb_reflog_fs__read’ at src/libgit2/refdb_fs.c:2090:15:
src/libgit2/refdb_fs.c:1968:20: warning: ‘c’ may be used uninitialized [-Wmaybe-uninitialized]
 1968 |                 if (c == '\t') {
      |                    ^
src/libgit2/refdb_fs.c: In function ‘refdb_reflog_fs__read’:
src/libgit2/refdb_fs.c:1949:22: note: ‘c’ was declared here
 1949 |                 char c;
      |                      ^
In function ‘git_describe_format’,
    inlined from ‘assert_describe_workdir’ at tests/libgit2/describe/describe_helpers.c:38:2:
src/libgit2/describe.c:862:9: warning: ‘result’ may be used uninitialized [-Wmaybe-uninitialized]
  862 |         GIT_BUF_WRAP_PRIVATE(out, git_describe__format, result, given);
      |         ^
tests/libgit2/describe/describe_helpers.c: In function ‘assert_describe_workdir’:
tests/libgit2/describe/describe_helpers.c:35:30: note: ‘result’ was declared here
   35 |         git_describe_result *result;
      |                              ^
tests/libgit2/index/read_index.c: In function ‘test_index_read_index__handles_conflicts’:
tests/libgit2/index/read_index.c:199:9: warning: ‘conflict_iterator’ may be used uninitialized [-Wmaybe-uninitialized]
  199 |         cl_git_pass(git_index_conflict_next(
      |         ^
tests/libgit2/index/read_index.c:172:38: note: ‘conflict_iterator’ was declared here
  172 |         git_index_conflict_iterator *conflict_iterator;
      |                                      ^
tests/libgit2/index/tests.c: In function ‘test_index_tests__can_iterate’:
tests/libgit2/index/tests.c:1114:17: warning: ‘entry’ may be used uninitialized [-Wmaybe-uninitialized]
 1114 |                 cl_assert_equal_i(entry->file_size, test_entries[i].file_size);
      |                 ^
tests/libgit2/index/tests.c:1092:32: note: ‘entry’ was declared here
 1092 |         const git_index_entry *entry;
      |                                ^
tests/libgit2/apply/apply_helpers.c: In function ‘validate_workdir_unchanged’:
tests/libgit2/apply/apply_helpers.c:122:9: warning: ‘head’ may be used uninitialized [-Wmaybe-uninitialized]
  122 |         cl_git_pass(git_iterator_for_tree(&head_iterator, head, NULL));
      |         ^
tests/libgit2/apply/apply_helpers.c:112:19: note: ‘head’ was declared here
  112 |         git_tree *head;
      |                   ^
tests/libgit2/object/validate.c: In function ‘test_object_validate__cannot_parse_sha256_as_sha1’:
tests/libgit2/object/validate.c:75:9: warning: ‘valid’ may be used uninitialized [-Wmaybe-uninitialized]
   75 |         cl_assert_equal_i(0, valid);
      |         ^
tests/libgit2/object/validate.c:72:13: note: ‘valid’ was declared here
   72 |         int valid;
      |             ^
tests/libgit2/object/validate.c: In function ‘test_object_validate__invalid_sha1’:
tests/libgit2/object/validate.c:86:9: warning: ‘valid’ may be used uninitialized [-Wmaybe-uninitialized]
   86 |         cl_assert_equal_i(0, valid);
      |         ^
tests/libgit2/object/validate.c:83:13: note: ‘valid’ was declared here
   83 |         int valid;
      |             ^
tests/libgit2/index/conflicts.c: In function ‘test_index_conflicts__iterate’:
tests/libgit2/index/conflicts.c:224:9: warning: ‘iterator’ may be used uninitialized [-Wmaybe-uninitialized]
  224 |         cl_git_pass(git_index_conflict_next(&conflict_entry[0], &conflict_entry[1], &conflict_entry[2], iterator));
      |         ^
tests/libgit2/index/conflicts.c:218:38: note: ‘iterator’ was declared here
  218 |         git_index_conflict_iterator *iterator;
      |                                      ^
tests/libgit2/diff/workdir.c: In function ‘test_diff_workdir__larger_hunks’:
tests/libgit2/diff/workdir.c:1066:47: warning: ‘num_l’ may be used uninitialized [-Wmaybe-uninitialized]
 1066 |                                 for (l = 0; l < num_l; ++l) {
      |                                               ^
tests/libgit2/diff/workdir.c:1026:42: note: ‘num_l’ was declared here
 1026 |         size_t i, d, num_d, h, num_h, l, num_l;
      |                                          ^
tests/libgit2/win32/forbidden.c: In function ‘test_win32_forbidden__can_diff_tree_to_index’:
tests/libgit2/win32/forbidden.c:98:9: warning: ‘tree’ may be used uninitialized [-Wmaybe-uninitialized]
   98 |         cl_git_pass(git_diff_tree_to_index(&diff, repo, tree, NULL, NULL));
      |         ^
tests/libgit2/win32/forbidden.c:95:19: note: ‘tree’ was declared here
   95 |         git_tree *tree;
      |                   ^
tests/libgit2/win32/forbidden.c: In function ‘test_win32_forbidden__can_diff_tree_to_tree’:
tests/libgit2/win32/forbidden.c:110:9: warning: ‘tree’ may be used uninitialized [-Wmaybe-uninitialized]
  110 |         cl_git_pass(git_diff_tree_to_tree(&diff, repo, tree, tree, NULL));
      |         ^
tests/libgit2/win32/forbidden.c:107:19: note: ‘tree’ was declared here
  107 |         git_tree *tree;
      |                   ^
In function ‘git_object_free’,
    inlined from ‘git_commit_free’ at src/libgit2/object_api.c:33:2,
    inlined from ‘test_win32_forbidden__can_diff_index_to_workdir’ at tests/libgit2/win32/forbidden.c:134:2:
src/libgit2/object.c:290:12: warning: ‘tree’ may be used uninitialized [-Wmaybe-uninitialized]
  290 |         if (object == NULL)
      |            ^
tests/libgit2/win32/forbidden.c: In function ‘test_win32_forbidden__can_diff_index_to_workdir’:
tests/libgit2/win32/forbidden.c:121:19: note: ‘tree’ was declared here
  121 |         git_tree *tree;
      |                   ^
tests/libgit2/diff/workdir.c: In function ‘test_diff_workdir__cannot_diff_against_a_bare_repository’:
tests/libgit2/diff/workdir.c:1186:9: warning: ‘tree’ may be used uninitialized [-Wmaybe-uninitialized]
 1186 |         cl_assert_equal_i(
      |         ^
tests/libgit2/diff/workdir.c:1177:19: note: ‘tree’ was declared here
 1177 |         git_tree *tree;
      |                   ^
tests/libgit2/submodule/escape.c: In function ‘test_submodule_escape__from_gitdir’:
tests/libgit2/submodule/escape.c:62:9: warning: ‘sm_location’ may be used uninitialized [-Wmaybe-uninitialized]
   62 |         cl_assert_equal_i(GIT_SUBMODULE_STATUS_IN_INDEX | GIT_SUBMODULE_STATUS_IN_HEAD, sm_location);
      |         ^
tests/libgit2/submodule/escape.c:37:22: note: ‘sm_location’ declared here
   37 |         unsigned int sm_location;
      |                      ^
tests/libgit2/iterator/index.c: In function ‘test_iterator_index__range_icase’:
tests/libgit2/iterator/index.c:258:9: warning: ‘head’ may be used uninitialized [-Wmaybe-uninitialized]
  258 |         cl_git_pass(git_index_read_tree(index, head));
      |         ^
tests/libgit2/iterator/index.c:251:19: note: ‘head’ was declared here
  251 |         git_tree *head;
      |                   ^
tests/libgit2/submodule/escape.c: In function ‘test_submodule_escape__from_gitdir_windows’:
tests/libgit2/submodule/escape.c:96:9: warning: ‘sm_location’ may be used uninitialized [-Wmaybe-uninitialized]
   96 |         cl_assert_equal_i(GIT_SUBMODULE_STATUS_IN_INDEX | GIT_SUBMODULE_STATUS_IN_HEAD, sm_location);
      |         ^
tests/libgit2/submodule/escape.c:71:22: note: ‘sm_location’ declared here
   71 |         unsigned int sm_location;
      |                      ^
In function ‘git_odb_add_backend’,
    inlined from ‘test_odb_backend_mempack__initialize’ at tests/libgit2/odb/backend/mempack.c:18:2:
src/libgit2/odb.c:618:16: warning: ‘backend’ may be used uninitialized [-Wmaybe-uninitialized]
  618 |         return add_backend_internal(odb, backend, priority, false, 0);
      |                ^
tests/libgit2/odb/backend/mempack.c: In function ‘test_odb_backend_mempack__initialize’:
tests/libgit2/odb/backend/mempack.c:14:26: note: ‘backend’ was declared here
   14 |         git_odb_backend *backend;
      |                          ^
tests/libgit2/odb/backend/multiple.c: In function ‘test_odb_backend_multiple__initialize’:
tests/libgit2/odb/backend/multiple.c:33:22: warning: ‘backend’ may be used uninitialized [-Wmaybe-uninitialized]
   33 |         _fake_filled = (fake_backend *)backend;
      |                      ^
tests/libgit2/odb/backend/multiple.c:25:26: note: ‘backend’ was declared here
   25 |         git_odb_backend *backend;
      |                          ^
tests/libgit2/message/trailer.c: In function ‘assert_trailers’:
tests/libgit2/message/trailer.c:5:35: warning: ‘arr.trailers’ may be used uninitialized [-Wmaybe-uninitialized]
    5 |         git_message_trailer_array arr;
      |                                   ^
tests/libgit2/message/trailer.c:12:19: warning: ‘arr.count’ may be used uninitialized [-Wmaybe-uninitialized]
   12 |         for(i=0; i<arr.count; i++) {
      |                   ^
tests/libgit2/message/trailer.c:5:35: note: ‘arr.count’ was declared here
    5 |         git_message_trailer_array arr;
      |                                   ^
In function ‘git__free’,
    inlined from ‘git_message_trailer_array_free’ at src/libgit2/trailer.c:428:2,
    inlined from ‘assert_trailers’ at tests/libgit2/message/trailer.c:19:2:
src/util/alloc.h:39:9: warning: ‘arr._trailer_block’ may be used uninitialized [-Wmaybe-uninitialized]
   39 |         git__allocator.gfree(ptr);
      |         ^
tests/libgit2/message/trailer.c: In function ‘assert_trailers’:
tests/libgit2/message/trailer.c:5:35: note: ‘arr._trailer_block’ was declared here
    5 |         git_message_trailer_array arr;
      |                                   ^
In function ‘git_odb_add_backend’,
    inlined from ‘setup_backend’ at tests/libgit2/odb/backend/simple.c:19:2:
src/libgit2/odb.c:618:16: warning: ‘backend’ may be used uninitialized [-Wmaybe-uninitialized]
  618 |         return add_backend_internal(odb, backend, priority, false, 0);
      |                ^
tests/libgit2/odb/backend/simple.c: In function ‘setup_backend’:
tests/libgit2/odb/backend/simple.c:14:26: note: ‘backend’ was declared here
   14 |         git_odb_backend *backend;
      |                          ^
In function ‘git_submodule_owner’,
    inlined from ‘test_submodule_lookup__can_be_dupped’ at tests/libgit2/submodule/lookup.c:71:2:
src/libgit2/submodule.c:1063:25: warning: ‘sm_duplicate’ may be used uninitialized [-Wmaybe-uninitialized]
 1063 |         return submodule->repo;
      |                         ^
tests/libgit2/submodule/lookup.c: In function ‘test_submodule_lookup__can_be_dupped’:
tests/libgit2/submodule/lookup.c:49:24: note: ‘sm_duplicate’ was declared here
   49 |         git_submodule *sm_duplicate;
      |                        ^
In function ‘git_atomic__swap’,
    inlined from ‘set_refdb’ at src/libgit2/repository.c:114:15,
    inlined from ‘git_repository_set_refdb’ at src/libgit2/repository.c:1567:2,
    inlined from ‘test_odb_backend_nobackend__initialize’ at tests/libgit2/odb/backend/nobackend.c:21:2:
src/util/thread.h:184:9: warning: ‘refdb’ may be used uninitialized [-Wmaybe-uninitialized]
  184 |         __atomic_exchange(ptr, &newval, &foundval, __ATOMIC_SEQ_CST);
      |         ^
tests/libgit2/odb/backend/nobackend.c: In function ‘test_odb_backend_nobackend__initialize’:
tests/libgit2/odb/backend/nobackend.c:12:20: note: ‘refdb’ was declared here
   12 |         git_refdb *refdb;
      |                    ^
In function ‘git_fs_path_owner_is’,
    inlined from ‘validate_ownership_path’ at src/libgit2/repository.c:631:11,
    inlined from ‘validate_ownership’ at src/libgit2/repository.c:671:16,
    inlined from ‘git_repository_open_ext’ at src/libgit2/repository.c:1124:15:
src/util/fs_path.c:1990:45: warning: ‘sudo_uid’ may be used uninitialized [-Wmaybe-uninitialized]
 1990 |             sudo_uid_lookup(&sudo_uid) == 0 &&
      |                                             ^
src/util/fs_path.c: In function ‘git_repository_open_ext’:
src/util/fs_path.c:1959:21: note: ‘sudo_uid’ was declared here
 1959 |         uid_t euid, sudo_uid;
      |                     ^
tests/libgit2/worktree/worktree.c: In function ‘test_worktree_worktree__init’:
tests/libgit2/worktree/worktree.c:216:9: warning: ‘branch’ may be used uninitialized [-Wmaybe-uninitialized]
  216 |         git_reference_free(branch);
      |         ^
tests/libgit2/worktree/worktree.c:203:24: note: ‘branch’ declared here
  203 |         git_reference *branch;
      |                        ^
In function ‘git_iterator_for_workdir’,
    inlined from ‘test_iterator_workdir__bounded_submodules’ at tests/libgit2/iterator/workdir.c:1207:3:
src/libgit2/iterator.h:147:16: warning: ‘head’ may be used uninitialized [-Wmaybe-uninitialized]
  147 |         return git_iterator_for_workdir_ext(out, repo, NULL, index, tree, options);
      |                ^
tests/libgit2/iterator/workdir.c: In function ‘test_iterator_workdir__bounded_submodules’:
tests/libgit2/iterator/workdir.c:1187:19: note: ‘head’ was declared here
 1187 |         git_tree *head;
      |                   ^
In function ‘git_object_free’,
    inlined from ‘git_commit_free’ at src/libgit2/object_api.c:33:2,
    inlined from ‘test_checkout_index__initialize’ at tests/libgit2/checkout/index.c:23:2:
src/libgit2/object.c:290:12: warning: ‘tree’ may be used uninitialized [-Wmaybe-uninitialized]
  290 |         if (object == NULL)
      |            ^
tests/libgit2/checkout/index.c: In function ‘test_checkout_index__initialize’:
tests/libgit2/checkout/index.c:16:19: note: ‘tree’ was declared here
   16 |         git_tree *tree;
      |                   ^
In function ‘git_reference_iterator_new’,
    inlined from ‘test_refs_iterator__empty’ at tests/libgit2/refs/iterator.c:134:2:
src/libgit2/refs.c:752:13: warning: ‘empty’ may be used uninitialized [-Wmaybe-uninitialized]
  752 |         if (git_repository_refdb__weakptr(&refdb, repo) < 0)
      |             ^
tests/libgit2/refs/iterator.c: In function ‘test_refs_iterator__empty’:
tests/libgit2/refs/iterator.c:129:25: note: ‘empty’ was declared here
  129 |         git_repository *empty;
      |                         ^
In function ‘memcpy’,
    inlined from ‘git_oid_raw_cpy’ at src/libgit2/oid.h:202:2,
    inlined from ‘git_oid_cpy’ at src/libgit2/oid.c:240:9,
    inlined from ‘dup_reflog’ at src/libgit2/transaction.c:264:3,
    inlined from ‘git_transaction_set_reflog’ at src/libgit2/transaction.c:290:15,
    inlined from ‘git_stash_drop’ at src/libgit2/stash.c:1252:15:
/usr/include/bits/string_fortified.h:29:10: warning: ‘__builtin_memcpy’ reading 20 bytes from a region of size 0 [-Wstringop-overread]
   29 |   return __builtin___memcpy_chk (__dest, __src, __len,
      |          ^
In function ‘git_stash_drop’:
lto1: note: source object is likely at address zero
tests/libgit2/worktree/worktree.c: In function ‘test_worktree_worktree__add_locked’:
tests/libgit2/worktree/worktree.c:241:9: warning: ‘branch’ may be used uninitialized [-Wmaybe-uninitialized]
  241 |         git_reference_free(branch);
      |         ^
tests/libgit2/worktree/worktree.c:224:24: note: ‘branch’ declared here
  224 |         git_reference *branch;
      |                        ^
tests/libgit2/diff/index.c: In function ‘test_diff_index__to_index’:
tests/libgit2/diff/index.c:291:9: warning: ‘diff’ may be used uninitialized [-Wmaybe-uninitialized]
  291 |         cl_git_pass(git_diff_foreach(
      |         ^
tests/libgit2/diff/index.c:279:19: note: ‘diff’ was declared here
  279 |         git_diff *diff;
      |                   ^
In function ‘git_grafts_get’,
    inlined from ‘test_grafts_shallow__shallow_oids’ at tests/libgit2/grafts/shallow.c:55:2:
src/libgit2/grafts.c:241:21: warning: ‘grafts’ may be used uninitialized [-Wmaybe-uninitialized]
  241 |         if ((*out = git_oidmap_get(grafts->commits, oid)) == NULL)
      |                     ^
tests/libgit2/grafts/shallow.c: In function ‘test_grafts_shallow__shallow_oids’:
tests/libgit2/grafts/shallow.c:49:21: note: ‘grafts’ was declared here
   49 |         git_grafts *grafts;
      |                     ^
tests/libgit2/diff/submodules.c: In function ‘test_diff_submodules__dirty_submodule_2’:
tests/libgit2/diff/submodules.c:157:17: warning: ‘head’ may be used uninitialized [-Wmaybe-uninitialized]
  157 |                 cl_git_pass(git_diff_tree_to_index(&diff2, g_repo, head, NULL, &opts));
      |                 ^
tests/libgit2/diff/submodules.c:154:27: note: ‘head’ was declared here
  154 |                 git_tree *head;
      |                           ^
tests/libgit2/diff/submodules.c: In function ‘test_diff_submodules__submod2_head_to_index’:
tests/libgit2/diff/submodules.c:222:9: warning: ‘head’ may be used uninitialized [-Wmaybe-uninitialized]
  222 |         cl_git_pass(git_diff_tree_to_index(&diff, g_repo, head, NULL, &opts));
      |         ^
tests/libgit2/diff/submodules.c:207:19: note: ‘head’ was declared here
  207 |         git_tree *head;
      |                   ^
tests/libgit2/grafts/shallow.c: In function ‘test_grafts_shallow__errors_on_borked’:
tests/libgit2/grafts/shallow.c:94:9: warning: ‘grafts’ may be used uninitialized [-Wmaybe-uninitialized]
   94 |         cl_git_fail(git_grafts_refresh(grafts));
      |         ^
tests/libgit2/grafts/shallow.c:88:21: note: ‘grafts’ was declared here
   88 |         git_grafts *grafts;
      |                     ^
In function ‘git_grafts_get’,
    inlined from ‘test_grafts_shallow__cache_clearing’ at tests/libgit2/grafts/shallow.c:69:2:
src/libgit2/grafts.c:241:21: warning: ‘grafts’ may be used uninitialized [-Wmaybe-uninitialized]
  241 |         if ((*out = git_oidmap_get(grafts->commits, oid)) == NULL)
      |                     ^
tests/libgit2/grafts/shallow.c: In function ‘test_grafts_shallow__cache_clearing’:
tests/libgit2/grafts/shallow.c:61:21: note: ‘grafts’ was declared here
   61 |         git_grafts *grafts;
      |                     ^
In function ‘merge_preference’,
    inlined from ‘git_merge_analysis_for_ref’ at src/libgit2/merge.c:3265:15,
    inlined from ‘analysis_from_branch’ at tests/libgit2/merge/analysis.c:74:2:
src/libgit2/merge.c:3236:9: warning: ‘config’ may be used uninitialized [-Wmaybe-uninitialized]
 3236 |         git_config_free(config);
      |         ^
src/libgit2/merge.c: In function ‘analysis_from_branch’:
src/libgit2/merge.c:3209:21: note: ‘config’ declared here
 3209 |         git_config *config;
      |                     ^
In function ‘git_object_id’,
    inlined from ‘git_commit_id’ at src/libgit2/object_api.c:38:9,
    inlined from ‘test_graph_ahead_behind__returns_correct_result’ at tests/libgit2/graph/ahead_behind.c:43:2:
src/libgit2/object.c:298:9: warning: ‘other’ may be used uninitialized [-Wmaybe-uninitialized]
  298 |         GIT_ASSERT_ARG_WITH_RETVAL(obj, NULL);
      |         ^
tests/libgit2/graph/ahead_behind.c: In function ‘test_graph_ahead_behind__returns_correct_result’:
tests/libgit2/graph/ahead_behind.c:30:21: note: ‘other’ was declared here
   30 |         git_commit *other;
      |                     ^
tests/libgit2/diff/patch.c: In function ‘test_diff_patch__hunks_have_correct_line_numbers’:
tests/libgit2/diff/patch.c:288:9: warning: ‘head’ may be used uninitialized [-Wmaybe-uninitialized]
  288 |         cl_git_pass(git_diff_tree_to_workdir(&diff, g_repo, head, &opt));
      |         ^
tests/libgit2/diff/patch.c:262:19: note: ‘head’ was declared here
  262 |         git_tree *head;
      |                   ^
In function ‘git_config_next’,
    inlined from ‘test_config_read__iterator’ at tests/libgit2/config/read.c:366:16:
src/libgit2/config.c:1117:16: warning: ‘iter’ may be used uninitialized [-Wmaybe-uninitialized]
 1117 |         return iter->next(entry, iter);
      |                ^
tests/libgit2/config/read.c: In function ‘test_config_read__iterator’:
tests/libgit2/config/read.c:353:30: note: ‘iter’ was declared here
  353 |         git_config_iterator *iter;
      |                              ^
tests/libgit2/rebase/inmemory.c: In function ‘test_rebase_inmemory__can_resolve_conflicts’:
tests/libgit2/rebase/inmemory.c:91:9: warning: ‘rebase_index’ may be used uninitialized [-Wmaybe-uninitialized]
   91 |         cl_assert(git_index_has_conflicts(rebase_index));
      |         ^
tests/libgit2/rebase/inmemory.c:61:20: note: ‘rebase_index’ was declared here
   61 |         git_index *rebase_index, *repo_index;
      |                    ^
tests/libgit2/apply/apply_helpers.c: In function ‘validate_index_unchanged’:
tests/libgit2/apply/apply_helpers.c:95:9: warning: ‘head’ may be used uninitialized [-Wmaybe-uninitialized]
   95 |         cl_git_pass(git_iterator_for_tree(&head_iterator, head, NULL));
      |         ^
tests/libgit2/apply/apply_helpers.c:88:19: note: ‘head’ was declared here
   88 |         git_tree *head;
      |                   ^
In function ‘git_object_id’,
    inlined from ‘git_commit_id’ at src/libgit2/object_api.c:38:9,
    inlined from ‘test_graph_descendant_of__returns_correct_result’ at tests/libgit2/graph/descendant_of.c:34:2:
src/libgit2/object.c:298:9: warning: ‘other’ may be used uninitialized [-Wmaybe-uninitialized]
  298 |         GIT_ASSERT_ARG_WITH_RETVAL(obj, NULL);
      |         ^
tests/libgit2/graph/descendant_of.c: In function ‘test_graph_descendant_of__returns_correct_result’:
tests/libgit2/graph/descendant_of.c:27:21: note: ‘other’ was declared here
   27 |         git_commit *other;
      |                     ^
tests/libgit2/diff/tree.c: In function ‘test_diff_tree__larger_hunks’:
tests/libgit2/diff/tree.c:283:39: warning: ‘num_l’ may be used uninitialized [-Wmaybe-uninitialized]
  283 |                         for (l = 0; l < num_l; ++l) {
      |                                       ^
tests/libgit2/diff/tree.c:259:39: note: ‘num_l’ was declared here
  259 |         size_t d, num_d, h, num_h, l, num_l;
      |                                       ^
In function ‘git_regexp_match’,
    inlined from ‘git_config_backend_foreach_match’ at src/libgit2/config.c:532:17:
src/util/regexp.c:37:22: warning: ‘regex’ may be used uninitialized [-Wmaybe-uninitialized]
   37 |         if ((error = pcre_exec(*r, NULL, string, (int) strlen(string), 0, 0, NULL, 0)) < 0)
      |                      ^
src/libgit2/config.c: In function ‘git_config_backend_foreach_match’:
src/libgit2/config.c:516:20: note: ‘regex’ was declared here
  516 |         git_regexp regex;
      |                    ^
@kloczek kloczek changed the title 1.7.2: LTO exposes a lot -Wmaybe-uninitialized issues 1.7.2: LTO exposes a lot of -Wmaybe-uninitialized issues Feb 10, 2024
@ethomson
Copy link
Member

It would be interesting to re-run this against main - just looking at the report, some of these have definitely be fixed.

What are the full CFLAGS that you built with?

@kloczek
Copy link
Contributor Author

kloczek commented Feb 20, 2024

[tkloczko@pers-jacek SPECS]$ rpm -E %set_build_flags

ASMFLAGS="-m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -O2 -g -grecord-gcc-switches -pipe -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -fdata-sections -ffunction-sections -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -flto=auto -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -Wall -Werror=format-security";
CFLAGS="-m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -O2 -g -grecord-gcc-switches -pipe -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -fdata-sections -ffunction-sections -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -flto=auto -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -Wall -Werror=format-security";
CXXFLAGS="-m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -O2 -g -grecord-gcc-switches -pipe -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -fdata-sections -ffunction-sections -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -flto=auto -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -Wall -Werror=format-security";
FFLAGS="-m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -O2 -g -grecord-gcc-switches -pipe -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -fdata-sections -ffunction-sections -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -flto=auto -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -Wall -Werror=format-security -I/usr/lib64/gfortran/modules";
FCFLAGS="-m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -O2 -g -grecord-gcc-switches -pipe -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -fdata-sections -ffunction-sections -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -flto=auto -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -Wall -Werror=format-security -I/usr/lib64/gfortran/modules";
LDFLAGS="-specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -Wl,--gc-sections -Wl,--as-needed -Wl,--build-id=sha1 -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -Wl,-z,pack-relative-relocs -flto=auto -fuse-linker-plugin";
RUSTFLAGS="-C codegen-units=1 -C debuginfo=2 -C opt-level=2 -C link-arg=-Wl,--as-needed -C link-arg=-Wl,--build-id=sha1 -C link-arg=-Wl,-z,now -C link-arg=-specs=/usr/lib/rpm/redhat/redhat-hardened-ld -C link-arg=-Wl,-z,pack-relative-relocs -C link-arg=-Wl,-z,relro -C link-arg=-flto=auto --cap-lints=warn" ;
VALAFLAGS="-g" ;
CC="/usr/bin/gcc"; CXX="/usr/bin/g++"; FC="/usr/bin/gfortran";
AR="/usr/bin/gcc-ar"; NM="/usr/bin/gcc-nm"; RANLIB="/usr/bin/gcc-ranlib";
export ASMFLAGS CFLAGS CXXFLAGS FFLAGS FCFLAGS LDFLAGS VALAFLAGS CC CXX FC AR NM RANLIB RUSTFLAGS VALAFLAGS;

@ethomson
Copy link
Member

Oy. There's just a lot of false positives here. Here's an example:

In function ‘git_config_next’,
    inlined from ‘test_config_read__iterator’ at /home/tkloczko/rpmbuild/BUILD/libgit2-115db540cfb633c2a618aa60757454839047eadf/tests/libgit2/config/read.c:366:16:
/home/tkloczko/rpmbuild/BUILD/libgit2-115db540cfb633c2a618aa60757454839047eadf/src/libgit2/config.c:1171:16: warning: ‘iter’ may be used uninitialized [-Wmaybe-uninitialized]
 1171 |         return iter->next(entry, iter);
      |                ^
/home/tkloczko/rpmbuild/BUILD/libgit2-115db540cfb633c2a618aa60757454839047eadf/tests/libgit2/config/read.c: In function ‘test_config_read__iterator’:
/home/tkloczko/rpmbuild/BUILD/libgit2-115db540cfb633c2a618aa60757454839047eadf/tests/libgit2/config/read.c:353:30: note: ‘iter’ was declared here
  353 |         git_config_iterator *iter;
      |         

Could iter be uninitialized? No. git_config_iterator_new always returns 0, except in an out of memory situation, in which case the GIT_ERROR_CHECK_ALLOC returns -1. There's no possibility that tier is uninitialized.

I assume that the problem here is that clar eventually longjmps out on a failure, and that's confusing the SCA. :sigh:

@ethomson
Copy link
Member

@kloczek tell me a little bit more - because I've made some assumptions.

Are you packaging libgit2 as part of a distribution? (Possibly Red Hat?)

How painful is this for you? Is there some rule that you need to be warning free with these compiler flags? Or is it more of an annoyance? Or are you just reporting potential problems?

@kloczek
Copy link
Contributor Author

kloczek commented Mar 20, 2024

@kloczek tell me a little bit more - because I've made some assumptions.

I'm injecting all necessary warni/otomisation/linker flags over env variables.
GNU autotool, meson, cmake, qmake, waf, scon and even plain make are able to use exactly the same env variables.
Here it is my set of such universal env variables to handle C, C++, Fortran, vala, rust, asm allowing me to switch beteen gcc and clang and use different likers as well (binutils ls or gold or mold)

[tkloczko@pers-jacek SPECS]$ rpm -E %set_build_flags

ASMFLAGS="-m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -O2 -g -grecord-gcc-switches -pipe -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -fdata-sections -ffunction-sections -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -flto=auto -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -Wall -Werror=format-security";
CFLAGS="-m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -O2 -g -grecord-gcc-switches -pipe -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -fdata-sections -ffunction-sections -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -flto=auto -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -Wall -Werror=format-security";
CXXFLAGS="-m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -O2 -g -grecord-gcc-switches -pipe -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -fdata-sections -ffunction-sections -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -flto=auto -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -Wall -Werror=format-security";
FFLAGS="-m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -O2 -g -grecord-gcc-switches -pipe -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -fdata-sections -ffunction-sections -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -flto=auto -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -Wall -Werror=format-security -I/usr/lib64/gfortran/modules";
FCFLAGS="-m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -O2 -g -grecord-gcc-switches -pipe -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -fdata-sections -ffunction-sections -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -flto=auto -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -Wall -Werror=format-security -I/usr/lib64/gfortran/modules";
LDFLAGS="-specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -Wl,--gc-sections -Wl,--as-needed -Wl,--build-id=sha1 -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -Wl,-z,pack-relative-relocs -flto=auto -fuse-linker-plugin";
RUSTFLAGS="-C codegen-units=1 -C debuginfo=2 -C opt-level=2 -C link-arg=-Wl,--as-needed -C link-arg=-Wl,--build-id=sha1 -C link-arg=-Wl,-z,now -C link-arg=-specs=/usr/lib/rpm/redhat/redhat-hardened-ld -C link-arg=-Wl,-z,pack-relative-relocs -C link-arg=-Wl,-z,relro -C link-arg=-flto=auto --cap-lints=warn" ;
VALAFLAGS="-g" ;
CC="/usr/bin/gcc"; CXX="/usr/bin/g++"; FC="/usr/bin/gfortran";
AR="/usr/bin/gcc-ar"; NM="/usr/bin/gcc-nm"; RANLIB="/usr/bin/gcc-ranlib"; LD=/usr/lib/ld.bfd
export ASMFLAGS CFLAGS CXXFLAGS FFLAGS FCFLAGS LDFLAGS VALAFLAGS CC CXX FC AR NM RANLIB LD RUSTFLAGS VALAFLAGS;

Above is for gcc and LTO and standard binutils bdf linker.
That set is similar to what is used by Fedora/RH but there are some differences and more degrees of freedom compare to what is used by Fedora/RH.

Are you packaging libgit2 as part of a distribution? (Possibly Red Hat?)

Nope MyOwnOne ™️ .. temporary name is G2V 😋 (and probably it will be announced under that name at some point when everything will be ready to present publicly).

How painful is this for you? Is there some rule that you need to be warning free with these compiler flags? Or is it more of an annoyance? Or are you just reporting potential problems?

I'm sucking a lot of data placed in per build metrics. All metrics are stored/presented/monitored using zabbix (zabbix is typically used to monitor IT infrastructures so typical high level monitored object is host .. and I'm using that object to monitor single package 😋 ).
From that angle I'm able to monitor as metrics for example types and number of compile time warnings (with individual counters per warning type) and observe any changes in those metrics between builds obviously. On top of those metrics are added triggers which are able to raise alarm if anything in those metrics values goes wrong.
So with use proper tooling to grasp all that it is not kind of RocketScience™️ to control all of that.
Feel free to ask more if it is important for you 😄

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants