Skip to content

[Bug] Multiple error reported by clang-tidy bugprone-* #28965

Description

@py023

Search before asking

  • I had searched in the issues and found no similar issues.

Version

master b2d1685 (2023-12-19).

What's Wrong?

I ran clang-tidy with several bugprone rules, some reported errors:

bugprone-use-after-move

These should cause undefined behavior.

/codebase/apache/doris/be/src/io/fs/s3_file_system.cpp:214:40: error: 'objects' used after it was moved [bugprone-use-after-move,-warnings-as-errors]
VLOG_TRACE << "delete " << objects.size()
^
/codebase/apache/doris/be/src/io/fs/s3_file_system.cpp:201:17: note: move occurred here
del.WithObjects(std::move(objects)).SetQuiet(true);
^
/codebase/apache/doris/be/src/vec/columns/column_array.cpp:98:39: error: 'nested_column' used after it was moved [bugprone-use-after-move,-warnings-as-errors]
if (!offsets_concrete->empty() && nested_column) {
^
/codebase/apache/doris/be/src/vec/columns/column_array.cpp:91:11: note: move occurred here
: data(std::move(nested_column)), offsets(std::move(offsets_column)) {
^
/codebase/apache/doris/be/src/vec/columns/column_map.cpp:56:39: error: 'keys' used after it was moved [bugprone-use-after-move,-warnings-as-errors]
if (!offsets_concrete->empty() && keys && values) {
^
/codebase/apache/doris/be/src/vec/columns/column_map.cpp:47:11: note: move occurred here
: keys_column(std::move(keys)),
^
/codebase/apache/doris/be/src/vec/columns/column_map.cpp:56:47: error: 'values' used after it was moved [bugprone-use-after-move,-warnings-as-errors]
if (!offsets_concrete->empty() && keys && values) {
^
/codebase/apache/doris/be/src/vec/columns/column_map.cpp:48:11: note: move occurred here
values_column(std::move(values)),
^
/codebase/apache/doris/be/src/agent/task_worker_pool.cpp:593:23: error: 'name' used after it was moved [bugprone-use-after-move,-warnings-as-errors]
CHECK(st.ok()) << name << ": " << st;
^
/codebase/apache/doris/be/src/agent/task_worker_pool.cpp:562:11: note: move occurred here
: _name(std::move(name)) {
/codebase/apache/doris/be/src/io/fs/s3_file_system.cpp:117:13: error: 'id' used after it was moved [bugprone-use-after-move,-warnings-as-errors]
id.c_str(), config::s3_transfer_executor_pool_size);
^
/codebase/apache/doris/be/src/io/fs/s3_file_system.cpp:104:11: note: move occurred here
: RemoteFileSystem(s3_conf.prefix, std::move(id), FileSystemType::S3),
^
/codebase/apache/doris/be/src/olap/merger.cpp:186:13: error: 'key_columns' used after it was moved [bugprone-use-after-move,-warnings-as-errors]
key_columns.end() != std::find(key_columns.begin(), key_columns.end(), i)) {
^
/codebase/apache/doris/be/src/olap/merger.cpp:182:24: note: move occurred here
column_groups->emplace_back(std::move(key_columns));
^
/codebase/apache/doris/be/src/vec/common/sort/heap_sorter.cpp:91:23: error: 'tmp_block' used after it was moved [bugprone-use-after-move,-warnings-as-errors]
size_t num_rows = tmp_block.rows();
^
/codebase/apache/doris/be/src/vec/common/sort/heap_sorter.cpp:86:29: note: move occurred here
HeapSortCursorBlockView block_view_val(std::move(tmp_block), _sort_description);
^

These are false positives

/codebase/apache/doris/be/src/olap/rowset/segment_creator.cpp:209:5: error: 'block' used after it was moved [bugprone-use-after-move,-warnings-as-errors]
block.swap(flush_block);
^
/codebase/apache/doris/be/src/olap/rowset/segment_creator.cpp:124:23: note: move occurred here
vectorized::Block flush_block(std::move(block));
^
/codebase/apache/doris/be/src/vec/exec/scan/scan_task_queue.cpp:41:53: error: 'scan_task' used after it was moved [bugprone-use-after-move,-warnings-as-errors]
VLOG_DEBUG << "try_push_back scan task " << scan_task.scanner_context->ctx_id << " "
^
/codebase/apache/doris/be/src/vec/exec/scan/scan_task_queue.cpp:40:16: note: move occurred here
if (_queue.try_put(std::move(scan_task))) {
^
/codebase/apache/doris/be/src/vec/exec/scan/new_olap_scan_node.cpp:607:31: error: 'rs_splits' used after it was moved [bugprone-use-after-move,-warnings-as-errors]
auto& split = rs_splits.emplace_back();
^
/codebase/apache/doris/be/src/vec/exec/scan/new_olap_scan_node.cpp:620:30: note: move occurred here
{std::move(rs_splits), read_source.delete_predicates}));
^
/codebase/apache/doris/be/src/vec/exec/scan/new_olap_scan_node.cpp:607:31: note: the use happens in a later loop iteration than the move
auto& split = rs_splits.emplace_back();
^
/codebase/apache/doris/be/src/vec/functions/function.cpp:74:18: error: 'result_null_map_column' used after it was moved [bugprone-use-after-move,-warnings-as-errors]
if (!result_null_map_column) {
^
/codebase/apache/doris/be/src/vec/functions/function.cpp:79:29: note: move occurred here
std::move(result_null_map_column)->assume_mutable();
^
/codebase/apache/doris/be/src/vec/functions/function.cpp:74:18: note: the use happens in a later loop iteration than the move
if (!result_null_map_column) {
^
/codebase/apache/doris/be/src/vec/exec/format/orc/vorc_reader.cpp:1915:63: error: 'dict_value_column' used after it was moved [bugprone-use-after-move,-warnings-as-errors]
{ColumnNullable::create(std::move(dict_value_column),
^
/codebase/apache/doris/be/src/vec/exec/format/orc/vorc_reader.cpp:1915:30: note: move occurred here
{ColumnNullable::create(std::move(dict_value_column),
^
/codebase/apache/doris/be/src/vec/exec/format/orc/vorc_reader.cpp:1915:63: note: the use happens in a later loop iteration than the move
{ColumnNullable::create(std::move(dict_value_column),
^
/codebase/apache/doris/be/src/vec/exec/format/parquet/vparquet_group_reader.cpp:803:63: error: 'dict_value_column' used after it was moved [bugprone-use-after-move,-warnings-as-errors]
{ColumnNullable::create(std::move(dict_value_column),
^
/codebase/apache/doris/be/src/vec/exec/format/parquet/vparquet_group_reader.cpp:803:30: note: move occurred here
{ColumnNullable::create(std::move(dict_value_column),
^
/codebase/apache/doris/be/src/vec/exec/format/parquet/vparquet_group_reader.cpp:803:63: note: the use happens in a later loop iteration than the move
{ColumnNullable::create(std::move(dict_value_column),
^

bugprone-bool-pointer-implicit-conversion

This looks used incorrectly.

/codebase/apache/doris/be/src/vec/exec/format/parquet/vparquet_column_reader.cpp:450:19: error: dubious check of 'bool *' against 'nullptr', did you mean to dereference it? [bugprone-bool-pointer-implicit-conversion,-warnings-as-errors]
if (loaded && has_dict) {
^

What You Expected?

None of these error is reported.

How to Reproduce?

run clang-tidy with bugprone-bool-pointer-implicit-conversion and bugprone-use-after-move enabled.

.clang-tidy

Checks: |
-*,
bugprone-bool-pointer-implicit-conversion,
bugprone-use-after-move

Anything Else?

No response

Are you willing to submit PR?

  • Yes I am willing to submit a PR!

Code of Conduct

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions