Open
Description
I run the following on our codebase:
clang-tidy --checks="-bugprone-sizeof-expression" ./src/libexpr-tests/nix_api_value.cc -p build/compile_commands.json --enable-check-profile
It seems to emit some warnings but no timing information
clang-tidy --checks="-bugprone-sizeof-expression" ./src/libexpr-tests/nix_api_value.cc -p build/compile_commands.json --enable-check-profile --store-check-profile=profile
1 warning generated.
../src/libexpr-tests/nix_api_value.cc:218:5: warning: Potential leak of memory pointed to by 'out_name' [clang-analyzer-unix.Malloc]
218 | ASSERT_EQ(2u, nix_get_attrs_size(ctx, value));
| ^
/nix/store/hg937h00c72z4mhdc0j6c2pialvdgcbs-gtest-1.16.0-dev/include/gtest/gtest.h:1914:31: note: expanded from macro 'ASSERT_EQ'
1914 | #define ASSERT_EQ(val1, val2) GTEST_ASSERT_EQ(val1, val2)
| ^
/nix/store/hg937h00c72z4mhdc0j6c2pialvdgcbs-gtest-1.16.0-dev/include/gtest/gtest.h:1898:3: note: expanded from macro 'GTEST_ASSERT_EQ'
1898 | ASSERT_PRED_FORMAT2(::testing::internal::EqHelper::Compare, val1, val2)
| ^
/nix/store/hg937h00c72z4mhdc0j6c2pialvdgcbs-gtest-1.16.0-dev/include/gtest/gtest_pred_impl.h:148:44: note: expanded from macro 'ASSERT_PRED_FORMAT2'
148 | GTEST_PRED_FORMAT2_(pred_format, v1, v2, GTEST_FATAL_FAILURE_)
| ^
../src/libexpr-tests/nix_api_value.cc:203:46: note: Memory is allocated
203 | const char ** out_name = (const char **) malloc(sizeof(char *));
| ^~~~~~~~~~~~~~~~~~~~~~
../src/libexpr-tests/nix_api_value.cc:218:5: note: Control jumps to 'case 0:' at line 218
218 | ASSERT_EQ(2u, nix_get_attrs_size(ctx, value));
| ^
/nix/store/hg937h00c72z4mhdc0j6c2pialvdgcbs-gtest-1.16.0-dev/include/gtest/gtest.h:1914:31: note: expanded from macro 'ASSERT_EQ'
1914 | #define ASSERT_EQ(val1, val2) GTEST_ASSERT_EQ(val1, val2)
| ^
/nix/store/hg937h00c72z4mhdc0j6c2pialvdgcbs-gtest-1.16.0-dev/include/gtest/gtest.h:1898:3: note: expanded from macro 'GTEST_ASSERT_EQ'
1898 | ASSERT_PRED_FORMAT2(::testing::internal::EqHelper::Compare, val1, val2)
| ^
/nix/store/hg937h00c72z4mhdc0j6c2pialvdgcbs-gtest-1.16.0-dev/include/gtest/gtest_pred_impl.h:148:3: note: expanded from macro 'ASSERT_PRED_FORMAT2'
148 | GTEST_PRED_FORMAT2_(pred_format, v1, v2, GTEST_FATAL_FAILURE_)
| ^
/nix/store/hg937h00c72z4mhdc0j6c2pialvdgcbs-gtest-1.16.0-dev/include/gtest/gtest_pred_impl.h:134:3: note: expanded from macro 'GTEST_PRED_FORMAT2_'
134 | GTEST_ASSERT_(pred_format(#v1, #v2, v1, v2), on_failure)
| ^
/nix/store/hg937h00c72z4mhdc0j6c2pialvdgcbs-gtest-1.16.0-dev/include/gtest/gtest_pred_impl.h:78:3: note: expanded from macro 'GTEST_ASSERT_'
78 | GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
| ^
/nix/store/hg937h00c72z4mhdc0j6c2pialvdgcbs-gtest-1.16.0-dev/include/gtest/internal/gtest-port.h:730:3: note: expanded from macro 'GTEST_AMBIGUOUS_ELSE_BLOCKER_'
730 | switch (0) \
| ^
../src/libexpr-tests/nix_api_value.cc:218:5: note: Assuming the condition is false
218 | ASSERT_EQ(2u, nix_get_attrs_size(ctx, value));
| ^
/nix/store/hg937h00c72z4mhdc0j6c2pialvdgcbs-gtest-1.16.0-dev/include/gtest/gtest.h:1914:31: note: expanded from macro 'ASSERT_EQ'
1914 | #define ASSERT_EQ(val1, val2) GTEST_ASSERT_EQ(val1, val2)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~
/nix/store/hg937h00c72z4mhdc0j6c2pialvdgcbs-gtest-1.16.0-dev/include/gtest/gtest.h:1898:3: note: expanded from macro 'GTEST_ASSERT_EQ'
1898 | ASSERT_PRED_FORMAT2(::testing::internal::EqHelper::Compare, val1, val2)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/nix/store/hg937h00c72z4mhdc0j6c2pialvdgcbs-gtest-1.16.0-dev/include/gtest/gtest_pred_impl.h:148:3: note: expanded from macro 'ASSERT_PRED_FORMAT2'
148 | GTEST_PRED_FORMAT2_(pred_format, v1, v2, GTEST_FATAL_FAILURE_)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/nix/store/hg937h00c72z4mhdc0j6c2pialvdgcbs-gtest-1.16.0-dev/include/gtest/gtest_pred_impl.h:134:3: note: expanded from macro 'GTEST_PRED_FORMAT2_'
134 | GTEST_ASSERT_(pred_format(#v1, #v2, v1, v2), on_failure)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/nix/store/hg937h00c72z4mhdc0j6c2pialvdgcbs-gtest-1.16.0-dev/include/gtest/gtest_pred_impl.h:79:40: note: expanded from macro 'GTEST_ASSERT_'
79 | if (const ::testing::AssertionResult gtest_ar = (expression)) \
| ^~~~~~~~
../src/libexpr-tests/nix_api_value.cc:218:5: note: Taking false branch
218 | ASSERT_EQ(2u, nix_get_attrs_size(ctx, value));
| ^
/nix/store/hg937h00c72z4mhdc0j6c2pialvdgcbs-gtest-1.16.0-dev/include/gtest/gtest.h:1914:31: note: expanded from macro 'ASSERT_EQ'
1914 | #define ASSERT_EQ(val1, val2) GTEST_ASSERT_EQ(val1, val2)
| ^
/nix/store/hg937h00c72z4mhdc0j6c2pialvdgcbs-gtest-1.16.0-dev/include/gtest/gtest.h:1898:3: note: expanded from macro 'GTEST_ASSERT_EQ'
1898 | ASSERT_PRED_FORMAT2(::testing::internal::EqHelper::Compare, val1, val2)
| ^
/nix/store/hg937h00c72z4mhdc0j6c2pialvdgcbs-gtest-1.16.0-dev/include/gtest/gtest_pred_impl.h:148:3: note: expanded from macro 'ASSERT_PRED_FORMAT2'
148 | GTEST_PRED_FORMAT2_(pred_format, v1, v2, GTEST_FATAL_FAILURE_)
| ^
/nix/store/hg937h00c72z4mhdc0j6c2pialvdgcbs-gtest-1.16.0-dev/include/gtest/gtest_pred_impl.h:134:3: note: expanded from macro 'GTEST_PRED_FORMAT2_'
134 | GTEST_ASSERT_(pred_format(#v1, #v2, v1, v2), on_failure)
| ^
/nix/store/hg937h00c72z4mhdc0j6c2pialvdgcbs-gtest-1.16.0-dev/include/gtest/gtest_pred_impl.h:79:3: note: expanded from macro 'GTEST_ASSERT_'
79 | if (const ::testing::AssertionResult gtest_ar = (expression)) \
| ^
../src/libexpr-tests/nix_api_value.cc:218:5: note: Potential leak of memory pointed to by 'out_name'
218 | ASSERT_EQ(2u, nix_get_attrs_size(ctx, value));
| ^
/nix/store/hg937h00c72z4mhdc0j6c2pialvdgcbs-gtest-1.16.0-dev/include/gtest/gtest.h:1914:31: note: expanded from macro 'ASSERT_EQ'
1914 | #define ASSERT_EQ(val1, val2) GTEST_ASSERT_EQ(val1, val2)
| ^
/nix/store/hg937h00c72z4mhdc0j6c2pialvdgcbs-gtest-1.16.0-dev/include/gtest/gtest.h:1898:3: note: expanded from macro 'GTEST_ASSERT_EQ'
1898 | ASSERT_PRED_FORMAT2(::testing::internal::EqHelper::Compare, val1, val2)
| ^
/nix/store/hg937h00c72z4mhdc0j6c2pialvdgcbs-gtest-1.16.0-dev/include/gtest/gtest_pred_impl.h:148:44: note: expanded from macro 'ASSERT_PRED_FORMAT2'
148 | GTEST_PRED_FORMAT2_(pred_format, v1, v2, GTEST_FATAL_FAILURE_)
| ^
I tried the prefix
option --store-check-profile=profile
but the JSON is also empty.
cat profile/20250527102426043627730-nix_api_value.cc.json
{
"file": "../src/libexpr-tests/nix_api_value.cc",
"timestamp": "2025-05-27 10:24:26.043627730",
"profile": {
}
}
I can't tell if it's a bug or a dumb user error that should also be informed.
Thank you.