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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions