Menu

False positive: [knownConditionTrueFalse] on member iterator dereference

2022-11-24
2022-11-25
  • Duncan Palmer

    Duncan Palmer - 2022-11-24

    The following generates a false positive knownConditionTrueFalse;

    struct Task
    {
        int  state() const;
        void poll_for_run_complete();
    };
    
    struct TaskList
    {   
        std::vector<Task*>::iterator active_task_;
    
        void do_something()
        {   
            auto current_active_task_state = (*active_task_)->state();
            (*active_task_)->poll_for_run_complete();
            auto new_active_task_state = (*active_task_)->state();
    
            // Generates [knownConditionTrueFalse] style warning
            if (current_active_task_state == new_active_task_state)
                return;
        }
    }   
    

    If the iterator is dereferenced before use, there is no warning generated;

    Task *task = *active_task;
    
    auto current_active_task_state = task->state();
    // etc ...
    

    If active_task_ is passed to do_something(), rather than being a member, no warning is generated.

     

    Last edit: Duncan Palmer 2022-11-24
  • CHR

    CHR - 2022-11-25

    Thanks for reporting, ticket is here: https://trac.cppcheck.net/ticket/11404

     

Log in to post a comment.

Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.