`DIR-15-8-1`: move assignment self-assignment false positive

Offen
#889 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Anfängerfreundlichkeit
35/100
Issue-Typ
Bug
Klarheit
Größtenteils klar
Aktivitätsstatus
Veraltet
Tech-Stack
cpp
Bereich
devtools

Rechercherichtung

Beginnen Sie mit cpp/misra/src/rules/DIR-15-8-1/CopyAndMoveAssignmentsShallHandleSelfAssignment.ql und führen Sie die Regel gegen das bereitgestellte main.cpp-Beispiel aus, um die Warnung beim Move-Assignment-Operator zu reproduzieren. Überprüfen Sie die Behandlung von Self-Assignment durch Move-and-Swap in der Regel und verifizieren Sie anschließend, dass dieses gültige Muster nicht mehr gemeldet wird, während die beabsichtigten Verstöße gegen DIR-15-8-1 weiterhin erkannt werden.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

Difficulty-Medium false positive/false negative Impact-Medium
Affected rules
  • DIR-15-8-1
Description

Using the "move-and-swap idiom" proposed in the directive's example as a solution to address potential issues with self-assignment leads to an alert.

Example
#include <utility>

class resource_manager {
  public:
    resource_manager() = default;
    ~resource_manager() = default;
    resource_manager(resource_manager const&) = delete;
    resource_manager(resource_manager&&) = default;
    resource_manager& operator=(resource_manager const&) = delete;
    resource_manager& operator=(resource_manager&& other) & noexcept {
        resource_manager temp{std::move(other)};
        std::swap(resource_, temp.resource_);
        return *this;
    }
  private:
    using resource = int;
    resource resource_;
};

int main() {}

I am getting a

"DIR-15-8-1: User-provided copy assignment operators and move assignment operators shall handle self-assignment","User-provided copy assignment operators and move assignment operators shall handle self-assignment.","error","User defined copy or user defined move does not handle self-assignment correctly.","/main.cpp","10","23","10","31"

when analyzing with cpp/misra/src/rules/DIR-15-8-1/CopyAndMoveAssignmentsShallHandleSelfAssignment.ql.

Vorherrschende Sprache
CodeQL
Sterne
227
Forks
82
Ø Merge
6 T. 7 Std.
Gemergte PRs (30 T.)
9

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus github/codeql-coding-standards

Alle Issues in github/codeql-coding-standards

Ähnliche Issues

Weitere Issues zu DevTools

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.