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

Reply via email to