py023 opened a new issue, #28965: URL: https://github.com/apache/doris/issues/28965
### Search before asking - [X] I had searched in the [issues](https://github.com/apache/doris/issues?q=is%3Aissue) and found no similar issues. ### Version master b2d16856b4d3f6262f7f4477f6275a7f34dc73f9 (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. ```txt /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/common/hash_table/hash_table.h:643:40: error: 'rhs' used after it was moved [bugprone-use-after-move,-warnings-as-errors] Allocator::operator=(std::move(rhs)); ^ /codebase/apache/doris/be/src/vec/common/hash_table/hash_table.h:642:15: note: move occurred here Hash::operator=(std::move(rhs)); ^ /codebase/apache/doris/be/src/vec/common/hash_table/hash_table.h:644:42: error: 'rhs' used after it was moved [bugprone-use-after-move,-warnings-as-errors] Cell::State::operator=(std::move(rhs)); ^ /codebase/apache/doris/be/src/vec/common/hash_table/hash_table.h:643:20: note: move occurred here Allocator::operator=(std::move(rhs)); ^ /codebase/apache/doris/be/src/vec/common/hash_table/hash_table.h:645:84: error: 'rhs' used after it was moved [bugprone-use-after-move,-warnings-as-errors] ZeroValueStorage<Cell::need_zero_value_storage, Cell>::operator=(std::move(rhs)); ^ /codebase/apache/doris/be/src/vec/common/hash_table/hash_table.h:644:22: note: move occurred here Cell::State::operator=(std::move(rhs)); ^ /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/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/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/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/vec/common/hash_table/hash_table.h:643:40: error: 'rhs' used after it was moved [bugprone-use-after-move,-warnings-as-errors] Allocator::operator=(std::move(rhs)); ^ /codebase/apache/doris/be/src/vec/common/hash_table/hash_table.h:642:15: note: move occurred here Hash::operator=(std::move(rhs)); ^ /codebase/apache/doris/be/src/vec/common/hash_table/hash_table.h:644:42: error: 'rhs' used after it was moved [bugprone-use-after-move,-warnings-as-errors] Cell::State::operator=(std::move(rhs)); ^ /codebase/apache/doris/be/src/vec/common/hash_table/hash_table.h:643:20: note: move occurred here Allocator::operator=(std::move(rhs)); ^ /codebase/apache/doris/be/src/vec/common/hash_table/hash_table.h:645:84: error: 'rhs' used after it was moved [bugprone-use-after-move,-warnings-as-errors] ZeroValueStorage<Cell::need_zero_value_storage, Cell>::operator=(std::move(rhs)); ^ /codebase/apache/doris/be/src/vec/common/hash_table/hash_table.h:644:22: note: move occurred here Cell::State::operator=(std::move(rhs)); ^ /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), ^ /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/hash_table/hash_table.h:643:40: error: 'rhs' used after it was moved [bugprone-use-after-move,-warnings-as-errors] Allocator::operator=(std::move(rhs)); ^ /codebase/apache/doris/be/src/vec/common/hash_table/hash_table.h:642:15: note: move occurred here Hash::operator=(std::move(rhs)); ^ /codebase/apache/doris/be/src/vec/common/hash_table/hash_table.h:644:42: error: 'rhs' used after it was moved [bugprone-use-after-move,-warnings-as-errors] Cell::State::operator=(std::move(rhs)); ^ /codebase/apache/doris/be/src/vec/common/hash_table/hash_table.h:643:20: note: move occurred here Allocator::operator=(std::move(rhs)); ^ /codebase/apache/doris/be/src/vec/common/hash_table/hash_table.h:645:84: error: 'rhs' used after it was moved [bugprone-use-after-move,-warnings-as-errors] ZeroValueStorage<Cell::need_zero_value_storage, Cell>::operator=(std::move(rhs)); ^ /codebase/apache/doris/be/src/vec/common/hash_table/hash_table.h:644:22: note: move occurred here Cell::State::operator=(std::move(rhs)); ^ /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/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/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) { ^ * /usr/local/ldb_toolchain/bin/../usr/include/x86_64-linux-gnu/bits/waitflags.h:57:3: note: previous definition is here } idtype_t; ^ /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/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/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/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); ^ ``` ## bugprone-bool-pointer-implicit-conversion This looks used incorrectly. ```txt /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? - [X] Yes I am willing to submit a PR! ### Code of Conduct - [X] I agree to follow this project's [Code of Conduct](https://www.apache.org/foundation/policies/conduct) -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org