From: Nick Lewycky Date: Fri, 12 Aug 2011 01:14:22 +0000 (+0000) Subject: The diagtool registration system tries to use a global variable from a method X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=83f06e8223291cd8dabe94d0cbfd0553121d5a44;p=clang The diagtool registration system tries to use a global variable from a method called on another global variable. Use ManagedStatic to ensure that the global we register with actually exists when we need it. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@137406 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/tools/diagtool/DiagTool.cpp b/tools/diagtool/DiagTool.cpp index 1e3f4ef637..36e72a2ded 100644 --- a/tools/diagtool/DiagTool.cpp +++ b/tools/diagtool/DiagTool.cpp @@ -64,5 +64,5 @@ void DiagTools::printCommands(llvm::raw_ostream &out) { } namespace diagtool { - DiagTools diagTools; + llvm::ManagedStatic diagTools; } diff --git a/tools/diagtool/DiagTool.h b/tools/diagtool/DiagTool.h index 5e5e11f2e2..dcb6ac7c76 100644 --- a/tools/diagtool/DiagTool.h +++ b/tools/diagtool/DiagTool.h @@ -16,6 +16,7 @@ #include "llvm/ADT/StringRef.h" #include "llvm/Support/raw_ostream.h" +#include "llvm/Support/ManagedStatic.h" #include @@ -45,12 +46,12 @@ public: void printCommands(llvm::raw_ostream &out); }; -extern DiagTools diagTools; - +extern llvm::ManagedStatic diagTools; + template class RegisterDiagTool { public: - RegisterDiagTool() { diagTools.registerTool(new DIAGTOOL()); } + RegisterDiagTool() { diagTools->registerTool(new DIAGTOOL()); } }; } // end diagtool namespace diff --git a/tools/diagtool/ListWarnings.cpp b/tools/diagtool/ListWarnings.cpp index 70be1c4531..e286f8d37d 100644 --- a/tools/diagtool/ListWarnings.cpp +++ b/tools/diagtool/ListWarnings.cpp @@ -50,7 +50,7 @@ int ListWarnings::run(unsigned int argc, char **argv, llvm::raw_ostream &out) { llvm::IntrusiveRefCntPtr Diags(new DiagnosticIDs); Diagnostic D(Diags); - std::vector Flagged, Unflagged;; + std::vector Flagged, Unflagged; llvm::StringMap > flagHistogram; for (DiagnosticIDs::diag_iterator di = DiagnosticIDs::diags_begin(), diff --git a/tools/diagtool/diagtool_main.cpp b/tools/diagtool/diagtool_main.cpp index 66a73e947a..e34f0dc06c 100644 --- a/tools/diagtool/diagtool_main.cpp +++ b/tools/diagtool/diagtool_main.cpp @@ -17,10 +17,10 @@ using namespace diagtool; int main(int argc, char *argv[]) { if (argc > 1) - if (DiagTool *tool = diagTools.getTool(argv[1])) + if (DiagTool *tool = diagTools->getTool(argv[1])) return tool->run(argc - 1, &argv[2], llvm::errs()); llvm::errs() << "usage: diagtool []\n\n"; - diagTools.printCommands(llvm::errs()); + diagTools->printCommands(llvm::errs()); return 1; }