Skip to content

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

@py023

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

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