From: Justin Lebar Date: Thu, 29 Dec 2016 19:59:26 +0000 (+0000) Subject: [ADT] Delete RefCountedBaseVPTR. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a7c050e2d7075d551e72d78286a5f05083dc64b0;p=clang [ADT] Delete RefCountedBaseVPTR. Summary: This class is unnecessary. Its comment indicated that it was a compile error to allocate an instance of a class that inherits from RefCountedBaseVPTR on the stack. This may have been true at one point, but it's not today. Moreover you really do not want to allocate *any* refcounted object on the stack, vptrs or not, so if we did have a way to prevent these objects from being stack-allocated, we'd want to apply it to regular RefCountedBase too, obviating the need for a separate RefCountedBaseVPTR class. It seems that the main way RefCountedBaseVPTR provides safety is by making its subclass's destructor virtual. This may have been helpful at one point, but these days clang will emit an error if you define a class with virtual functions that inherits from RefCountedBase but doesn't have a virtual destructor. Reviewers: compnerd, dblaikie Subscribers: cfe-commits, klimek, llvm-commits, mgorny Differential Revision: https://reviews.llvm.org/D28162 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@290717 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/ASTMatchers/Dynamic/VariantValue.h b/include/clang/ASTMatchers/Dynamic/VariantValue.h index 5296eddc61..9f694d0ce4 100644 --- a/include/clang/ASTMatchers/Dynamic/VariantValue.h +++ b/include/clang/ASTMatchers/Dynamic/VariantValue.h @@ -119,9 +119,9 @@ class VariantMatcher { /// \brief Payload interface to be specialized by each matcher type. /// /// It follows a similar interface as VariantMatcher itself. - class Payload : public RefCountedBaseVPTR { + class Payload : public RefCountedBase { public: - ~Payload() override; + virtual ~Payload(); virtual llvm::Optional getSingleMatcher() const = 0; virtual std::string getTypeAsString() const = 0; virtual llvm::Optional diff --git a/include/clang/Basic/LLVM.h b/include/clang/Basic/LLVM.h index def72a49a1..f32ab5e11b 100644 --- a/include/clang/Basic/LLVM.h +++ b/include/clang/Basic/LLVM.h @@ -43,7 +43,6 @@ namespace llvm { template class IntrusiveRefCntPtr; template struct IntrusiveRefCntPtrInfo; template class RefCountedBase; - class RefCountedBaseVPTR; class raw_ostream; class raw_pwrite_stream; @@ -76,7 +75,6 @@ namespace clang { using llvm::IntrusiveRefCntPtr; using llvm::IntrusiveRefCntPtrInfo; using llvm::RefCountedBase; - using llvm::RefCountedBaseVPTR; using llvm::raw_ostream; using llvm::raw_pwrite_stream; diff --git a/include/clang/StaticAnalyzer/Core/BugReporter/PathDiagnostic.h b/include/clang/StaticAnalyzer/Core/BugReporter/PathDiagnostic.h index 1cc3cae9d9..efe809fb19 100644 --- a/include/clang/StaticAnalyzer/Core/BugReporter/PathDiagnostic.h +++ b/include/clang/StaticAnalyzer/Core/BugReporter/PathDiagnostic.h @@ -334,7 +334,7 @@ public: // Path "pieces" for path-sensitive diagnostics. //===----------------------------------------------------------------------===// -class PathDiagnosticPiece : public RefCountedBaseVPTR { +class PathDiagnosticPiece : public RefCountedBase { public: enum Kind { ControlFlow, Event, Macro, Call, Note }; enum DisplayHint { Above, Below }; @@ -366,7 +366,7 @@ protected: PathDiagnosticPiece(Kind k, DisplayHint hint = Below); public: - ~PathDiagnosticPiece() override; + virtual ~PathDiagnosticPiece(); StringRef getString() const { return str; }