Use non-intrusive refcounting for LangOptions

This type is only refcounted in a couple of places so making ownership explicit
improves clarity.

llvm-svn: 212387
This commit is contained in:
Alp Toker 2014-07-06 05:26:07 +00:00
parent 74437975c4
commit 269d840e40
4 changed files with 6 additions and 8 deletions

View File

@ -19,7 +19,6 @@
#include "clang/Basic/LLVM.h"
#include "clang/Basic/ObjCRuntime.h"
#include "clang/Basic/Visibility.h"
#include "llvm/ADT/IntrusiveRefCntPtr.h"
#include <string>
namespace clang {
@ -53,7 +52,7 @@ protected:
/// \brief Keeps track of the various options that can be
/// enabled, which controls the dialect of C or C++ that is accepted.
class LangOptions : public RefCountedBase<LangOptions>, public LangOptionsBase {
class LangOptions : public LangOptionsBase {
public:
typedef clang::Visibility Visibility;

View File

@ -83,7 +83,7 @@ public:
};
private:
IntrusiveRefCntPtr<LangOptions> LangOpts;
std::shared_ptr<LangOptions> LangOpts;
IntrusiveRefCntPtr<DiagnosticsEngine> Diagnostics;
IntrusiveRefCntPtr<FileManager> FileMgr;
IntrusiveRefCntPtr<SourceManager> SourceMgr;

View File

@ -52,9 +52,9 @@ bool ParseDiagnosticArgs(DiagnosticOptions &Opts, llvm::opt::ArgList &Args,
class CompilerInvocationBase : public RefCountedBase<CompilerInvocation> {
void operator=(const CompilerInvocationBase &) LLVM_DELETED_FUNCTION;
protected:
public:
/// Options controlling the language variant.
IntrusiveRefCntPtr<LangOptions> LangOpts;
std::shared_ptr<LangOptions> LangOpts;
/// Options controlling the target.
IntrusiveRefCntPtr<TargetOptions> TargetOpts;
@ -68,7 +68,6 @@ protected:
/// Options controlling the preprocessor (aside from \#include handling).
IntrusiveRefCntPtr<PreprocessorOptions> PreprocessorOpts;
public:
CompilerInvocationBase();
~CompilerInvocationBase();

View File

@ -1087,7 +1087,7 @@ bool ASTUnit::Parse(llvm::MemoryBuffer *OverrideMainBuffer) {
"IR inputs not support here!");
// Configure the various subsystems.
LangOpts = &Clang->getLangOpts();
LangOpts = Clang->getInvocation().LangOpts;
FileSystemOpts = Clang->getFileSystemOpts();
IntrusiveRefCntPtr<vfs::FileSystem> VFS =
createVFSFromCompilerInvocation(Clang->getInvocation(), getDiagnostics());
@ -1709,7 +1709,7 @@ void ASTUnit::transferASTDataFromCompilerInstance(CompilerInstance &CI) {
// Steal the created target, context, and preprocessor if they have been
// created.
assert(CI.hasInvocation() && "missing invocation");
LangOpts = CI.getInvocation().getLangOpts();
LangOpts = CI.getInvocation().LangOpts;
TheSema.reset(CI.takeSema());
Consumer.reset(CI.takeASTConsumer());
if (CI.hasASTContext())