From 1597da4c05501ae592d1eabe86a8466337a76ded Mon Sep 17 00:00:00 2001 From: Daniel Dunbar Date: Sun, 6 Dec 2009 09:56:30 +0000 Subject: [PATCH] Document that CompilerInvocation::createDiagnostics keeps a reference to the DiagnosticOptions, and update callers to make sure they don't pass in a temporary. llvm-svn: 90704 --- clang/examples/wpa/clang-wpa.cpp | 3 ++- clang/include/clang/Frontend/CompilerInstance.h | 6 +++++- clang/tools/CIndex/CIndex.cpp | 3 ++- clang/tools/index-test/index-test.cpp | 3 ++- 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/clang/examples/wpa/clang-wpa.cpp b/clang/examples/wpa/clang-wpa.cpp index cca7907ba097..ae789fa9ae3c 100644 --- a/clang/examples/wpa/clang-wpa.cpp +++ b/clang/examples/wpa/clang-wpa.cpp @@ -33,8 +33,9 @@ int main(int argc, char **argv) { if (InputFilenames.empty()) return 0; + DiagnosticOptions DiagOpts; llvm::OwningPtr Diags( - CompilerInstance::createDiagnostics(DiagnosticOptions(), argc, argv)); + CompilerInstance::createDiagnostics(DiagOpts, argc, argv)); for (unsigned i = 0, e = InputFilenames.size(); i != e; ++i) { const std::string &InFile = InputFilenames[i]; diff --git a/clang/include/clang/Frontend/CompilerInstance.h b/clang/include/clang/Frontend/CompilerInstance.h index 27153b63c839..18ec429db7e8 100644 --- a/clang/include/clang/Frontend/CompilerInstance.h +++ b/clang/include/clang/Frontend/CompilerInstance.h @@ -419,9 +419,13 @@ public: /// logging information. /// /// Note that this creates an unowned DiagnosticClient, if using directly the - /// caller is responsible for releaseing the returned Diagnostic's client + /// caller is responsible for releasing the returned Diagnostic's client /// eventually. /// + /// \param Opts - The diagnostic options; note that the created text + /// diagnostic object contains a reference to these options and its lifetime + /// must extend past that of the diagnostic engine. + /// /// \return The new object on success, or null on failure. static Diagnostic *createDiagnostics(const DiagnosticOptions &Opts, int Argc, char **Argv); diff --git a/clang/tools/CIndex/CIndex.cpp b/clang/tools/CIndex/CIndex.cpp index 9259818e0eca..5e8e02df1a92 100644 --- a/clang/tools/CIndex/CIndex.cpp +++ b/clang/tools/CIndex/CIndex.cpp @@ -292,6 +292,7 @@ public: }; class CIndexer : public Indexer { + DiagnosticOptions DiagOpts; IgnoreDiagnosticsClient IgnoreDiagClient; llvm::OwningPtr TextDiags; Diagnostic IgnoreDiags; @@ -308,7 +309,7 @@ public: OnlyLocalDecls(false), DisplayDiagnostics(false) { TextDiags.reset( - CompilerInstance::createDiagnostics(DiagnosticOptions(), 0, 0)); + CompilerInstance::createDiagnostics(DiagOpts, 0, 0)); } virtual ~CIndexer() { delete &getProgram(); } diff --git a/clang/tools/index-test/index-test.cpp b/clang/tools/index-test/index-test.cpp index d13b2d492645..0b1971f797c4 100644 --- a/clang/tools/index-test/index-test.cpp +++ b/clang/tools/index-test/index-test.cpp @@ -238,8 +238,9 @@ int main(int argc, char **argv) { Indexer Idxer(Prog); llvm::SmallVector TUnits; + DiagnosticOptions DiagOpts; llvm::OwningPtr Diags( - CompilerInstance::createDiagnostics(DiagnosticOptions(), argc, argv)); + CompilerInstance::createDiagnostics(DiagOpts, argc, argv)); // If no input was specified, read from stdin. if (InputFilenames.empty())