mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-11-24 06:10:12 +00:00
ADT: Allow IntrusiveRefCntPtr construction from std::unique_ptr, NFC
Allow a `std::unique_ptr` to be moved into the an `IntrusiveRefCntPtr`, and remove a couple of now-unnecessary `release()` calls. Differential Revision: https://reviews.llvm.org/D92888
This commit is contained in:
parent
64e7685368
commit
5207f19d10
@ -87,8 +87,7 @@ RealThreadsafeFS::viewImpl() const {
|
||||
// Avoid using memory-mapped files.
|
||||
// FIXME: Try to use a similar approach in Sema instead of relying on
|
||||
// propagation of the 'isVolatile' flag through all layers.
|
||||
return new VolatileFileSystem(
|
||||
llvm::vfs::createPhysicalFileSystem().release());
|
||||
return new VolatileFileSystem(llvm::vfs::createPhysicalFileSystem());
|
||||
}
|
||||
} // namespace clangd
|
||||
} // namespace clang
|
||||
|
@ -124,7 +124,7 @@ llvm::Error AllTUsToolExecutor::execute(
|
||||
// Each thread gets an indepent copy of a VFS to allow different
|
||||
// concurrent working directories.
|
||||
IntrusiveRefCntPtr<llvm::vfs::FileSystem> FS =
|
||||
llvm::vfs::createPhysicalFileSystem().release();
|
||||
llvm::vfs::createPhysicalFileSystem();
|
||||
ClangTool Tool(Compilations, {Path},
|
||||
std::make_shared<PCHContainerOperations>(), FS);
|
||||
Tool.appendArgumentsAdjuster(Action.second);
|
||||
|
@ -154,7 +154,7 @@ DependencyScanningWorker::DependencyScanningWorker(
|
||||
: Format(Service.getFormat()) {
|
||||
DiagOpts = new DiagnosticOptions();
|
||||
PCHContainerOps = std::make_shared<PCHContainerOperations>();
|
||||
RealFS = llvm::vfs::createPhysicalFileSystem().release();
|
||||
RealFS = llvm::vfs::createPhysicalFileSystem();
|
||||
if (Service.canSkipExcludedPPRanges())
|
||||
PPSkipMappings =
|
||||
std::make_unique<ExcludedPreprocessorDirectiveSkipMapping>();
|
||||
|
@ -58,6 +58,7 @@
|
||||
#include <atomic>
|
||||
#include <cassert>
|
||||
#include <cstddef>
|
||||
#include <memory>
|
||||
|
||||
namespace llvm {
|
||||
|
||||
@ -175,6 +176,11 @@ public:
|
||||
S.Obj = nullptr;
|
||||
}
|
||||
|
||||
template <class X>
|
||||
IntrusiveRefCntPtr(std::unique_ptr<X> S) : Obj(S.release()) {
|
||||
retain();
|
||||
}
|
||||
|
||||
template <class X>
|
||||
IntrusiveRefCntPtr(const IntrusiveRefCntPtr<X> &S) : Obj(S.get()) {
|
||||
retain();
|
||||
|
@ -42,6 +42,17 @@ TYPED_TEST(IntrusiveRefCntPtrTest, RefCountedBaseCopyDoesNotLeak) {
|
||||
EXPECT_EQ(0, NumInstances);
|
||||
}
|
||||
|
||||
TYPED_TEST(IntrusiveRefCntPtrTest, InteropsWithUniquePtr) {
|
||||
EXPECT_EQ(0, NumInstances);
|
||||
{
|
||||
auto S1 = std::make_unique<TypeParam>();
|
||||
IntrusiveRefCntPtr<TypeParam> R1 = std::move(S1);
|
||||
EXPECT_EQ(1, NumInstances);
|
||||
EXPECT_EQ(S1, nullptr);
|
||||
}
|
||||
EXPECT_EQ(0, NumInstances);
|
||||
}
|
||||
|
||||
struct InterceptRefCounted : public RefCountedBase<InterceptRefCounted> {
|
||||
InterceptRefCounted(bool *Released, bool *Retained)
|
||||
: Released(Released), Retained(Retained) {}
|
||||
|
Loading…
Reference in New Issue
Block a user