// 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
// 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);
: 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>();
#include <atomic>
#include <cassert>
#include <cstddef>
+#include <memory>
namespace llvm {
}
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();
}
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) {}