martong created this revision. martong added reviewers: vsavchenko, NoQ, steakhal. Herald added subscribers: manas, ASDenysPetrov, gamesh411, dkrupp, donat.nagy, Szelethus, mikhail.ramalho, a.sidorin, rnkovacs, szepet, baloghadamsoftware, xazax.hun, whisperity. Herald added a reviewer: Szelethus. martong requested review of this revision. Herald added a project: clang. Herald added a subscriber: cfe-commits.
Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D106370 Files: clang/lib/StaticAnalyzer/Core/RangeConstraintManager.cpp Index: clang/lib/StaticAnalyzer/Core/RangeConstraintManager.cpp =================================================================== --- clang/lib/StaticAnalyzer/Core/RangeConstraintManager.cpp +++ clang/lib/StaticAnalyzer/Core/RangeConstraintManager.cpp @@ -559,8 +559,20 @@ /// Return a set of class members for the given state. LLVM_NODISCARD inline SymbolSet getClassMembers(ProgramStateRef State) const; + /// Return true if the current class is trivial in the given state. + // A class is trivial if and only if there is not any member relations stored + // to it in State/ClassMembers. + // An equivalence class with one member might seem as it does not hold any + // meaningful information, i.e. that is a tautology. However, during the + // removal of dead symbols we do not remove classes with one member for + // resource and performance reasons. Consequently, a class with one member is + // not necessarily trivial. It could happen that we have a class with two + // members and then during the removal of dead symbols we remove one of its + // members. In this case, the class is still non-trivial (it still has the + // mappings in ClassMembers), even though it has only one member. LLVM_NODISCARD inline bool isTrivial(ProgramStateRef State) const; + /// Return true if the current class is trivial and its only member is dead. LLVM_NODISCARD inline bool isTriviallyDead(ProgramStateRef State, SymbolReaper &Reaper) const;
Index: clang/lib/StaticAnalyzer/Core/RangeConstraintManager.cpp =================================================================== --- clang/lib/StaticAnalyzer/Core/RangeConstraintManager.cpp +++ clang/lib/StaticAnalyzer/Core/RangeConstraintManager.cpp @@ -559,8 +559,20 @@ /// Return a set of class members for the given state. LLVM_NODISCARD inline SymbolSet getClassMembers(ProgramStateRef State) const; + /// Return true if the current class is trivial in the given state. + // A class is trivial if and only if there is not any member relations stored + // to it in State/ClassMembers. + // An equivalence class with one member might seem as it does not hold any + // meaningful information, i.e. that is a tautology. However, during the + // removal of dead symbols we do not remove classes with one member for + // resource and performance reasons. Consequently, a class with one member is + // not necessarily trivial. It could happen that we have a class with two + // members and then during the removal of dead symbols we remove one of its + // members. In this case, the class is still non-trivial (it still has the + // mappings in ClassMembers), even though it has only one member. LLVM_NODISCARD inline bool isTrivial(ProgramStateRef State) const; + /// Return true if the current class is trivial and its only member is dead. LLVM_NODISCARD inline bool isTriviallyDead(ProgramStateRef State, SymbolReaper &Reaper) const;
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits