last patch was against the wrong revision.

http://reviews.llvm.org/D5611

Files:
  examples/PrintFunctionNames/CMakeLists.txt
  examples/PrintFunctionNames/PrintFunctionNames.cpp
  include/clang/Frontend/CompilerInstance.h
  lib/Frontend/ASTUnit.cpp
  lib/Frontend/CompilerInstance.cpp
  lib/FrontendTool/ExecuteCompilerInvocation.cpp
  tools/libclang/libclang.exports
Index: examples/PrintFunctionNames/CMakeLists.txt
===================================================================
--- examples/PrintFunctionNames/CMakeLists.txt
+++ examples/PrintFunctionNames/CMakeLists.txt
@@ -10,6 +10,7 @@
 endif()
 
 add_llvm_loadable_module(PrintFunctionNames PrintFunctionNames.cpp)
+target_link_libraries(PrintFunctionNames libclang)
 
 if(LLVM_ENABLE_PLUGINS AND (WIN32 OR CYGWIN))
   target_link_libraries(PrintFunctionNames ${cmake_2_8_12_PRIVATE}
Index: examples/PrintFunctionNames/PrintFunctionNames.cpp
===================================================================
--- examples/PrintFunctionNames/PrintFunctionNames.cpp
+++ examples/PrintFunctionNames/PrintFunctionNames.cpp
@@ -23,26 +23,36 @@
 
 class PrintFunctionsConsumer : public ASTConsumer {
 public:
+  PrintFunctionsConsumer(const CompilerInstance &_CI) : CI(_CI) {}
+
   virtual bool HandleTopLevelDecl(DeclGroupRef DG) {
+    DiagnosticsEngine &DE = CI.getDiagnostics();
     for (DeclGroupRef::iterator i = DG.begin(), e = DG.end(); i != e; ++i) {
       const Decl *D = *i;
-      if (const NamedDecl *ND = dyn_cast<NamedDecl>(D))
+      if (const NamedDecl *ND = dyn_cast<NamedDecl>(D)) {
         llvm::errs() << "top-level-decl: \"" << ND->getNameAsString() << "\"\n";
+        unsigned DiagID = DE.getCustomDiagID(DiagnosticsEngine::Error,
+                                             "functions are bad '%0'");
+        DE.Report(ND->getLocStart(), DiagID) << ND->getNameAsString();
+      }
     }
 
     return true;
   }
+
+private:
+  const CompilerInstance &CI;
 };
 
 class PrintFunctionNamesAction : public PluginASTAction {
 protected:
   std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI,
                                                  llvm::StringRef) {
-    return llvm::make_unique<PrintFunctionsConsumer>();
+    return llvm::make_unique<PrintFunctionsConsumer>(CI);
   }
 
   bool ParseArgs(const CompilerInstance &CI,
-                 const std::vector<std::string>& args) {
+                 const std::vector<std::string> &args) {
     for (unsigned i = 0, e = args.size(); i != e; ++i) {
       llvm::errs() << "PrintFunctionNames arg = " << args[i] << "\n";
 
@@ -60,13 +70,11 @@
 
     return true;
   }
-  void PrintHelp(llvm::raw_ostream& ros) {
+  void PrintHelp(llvm::raw_ostream &ros) {
     ros << "Help for PrintFunctionNames plugin goes here\n";
   }
-
 };
-
 }
 
 static FrontendPluginRegistry::Add<PrintFunctionNamesAction>
-X("print-fns", "print function names");
+    X("print-fns", "print function names");
Index: include/clang/Frontend/CompilerInstance.h
===================================================================
--- include/clang/Frontend/CompilerInstance.h
+++ include/clang/Frontend/CompilerInstance.h
@@ -709,6 +709,9 @@
   void addDependencyCollector(std::shared_ptr<DependencyCollector> Listener) {
     DependencyCollectors.push_back(std::move(Listener));
   }
+
+  /// load plugins that were added by -load
+  void loadPlugins();
 };
 
 } // end namespace clang
Index: lib/Frontend/ASTUnit.cpp
===================================================================
--- lib/Frontend/ASTUnit.cpp
+++ lib/Frontend/ASTUnit.cpp
@@ -1130,6 +1130,8 @@
   llvm::CrashRecoveryContextCleanupRegistrar<TopLevelDeclTrackerAction>
     ActCleanup(Act.get());
 
+  Clang->loadPlugins();
+
   if (!Act->BeginSourceFile(*Clang.get(), Clang->getFrontendOpts().Inputs[0]))
     goto error;
 
Index: lib/Frontend/CompilerInstance.cpp
===================================================================
--- lib/Frontend/CompilerInstance.cpp
+++ lib/Frontend/CompilerInstance.cpp
@@ -45,6 +45,7 @@
 #include "llvm/Support/Signals.h"
 #include "llvm/Support/Timer.h"
 #include "llvm/Support/raw_ostream.h"
+#include "llvm/Support/DynamicLibrary.h"
 #include <sys/stat.h>
 #include <system_error>
 #include <time.h>
@@ -1619,3 +1620,16 @@
   return false;
 }
 void CompilerInstance::resetAndLeakSema() { BuryPointer(takeSema()); }
+
+void 
+CompilerInstance::loadPlugins(){
+  // Load any requested plugins.
+  for (unsigned i = 0, e = getFrontendOpts().Plugins.size(); i != e; ++i) {
+    const std::string &Path = getFrontendOpts().Plugins[i];
+    std::string Error;
+    if (llvm::sys::DynamicLibrary::LoadLibraryPermanently(Path.c_str(), &Error))
+      getDiagnostics().Report(diag::err_fe_unable_to_load_plugin)
+        << Path << Error;
+  }
+}
+
Index: lib/FrontendTool/ExecuteCompilerInvocation.cpp
===================================================================
--- lib/FrontendTool/ExecuteCompilerInvocation.cpp
+++ lib/FrontendTool/ExecuteCompilerInvocation.cpp
@@ -180,14 +180,7 @@
   }
 
   // Load any requested plugins.
-  for (unsigned i = 0,
-         e = Clang->getFrontendOpts().Plugins.size(); i != e; ++i) {
-    const std::string &Path = Clang->getFrontendOpts().Plugins[i];
-    std::string Error;
-    if (llvm::sys::DynamicLibrary::LoadLibraryPermanently(Path.c_str(), &Error))
-      Clang->getDiagnostics().Report(diag::err_fe_unable_to_load_plugin)
-        << Path << Error;
-  }
+  Clang->loadPlugins();
 
   // Honor -mllvm.
   //
Index: tools/libclang/libclang.exports
===================================================================
--- tools/libclang/libclang.exports
+++ tools/libclang/libclang.exports
@@ -301,3 +301,20 @@
 clang_VirtualFileOverlay_dispose
 clang_VirtualFileOverlay_setCaseSensitivity
 clang_VirtualFileOverlay_writeToBuffer
+_ZN5clang15PluginASTAction6anchorEv
+_ZN4llvm11raw_ostream5writeEPKcm
+_ZN4llvm4errsEv
+_ZN5clang11ASTConsumer33HandleTopLevelDeclInObjCContainerENS_12DeclGroupRefE
+_ZN5clang14FrontendActionD2Ev
+_ZN5clang13DiagnosticIDs15getCustomDiagIDENS0_5LevelEN4llvm9StringRefE
+_ZN5clang17ASTFrontendAction13ExecuteActionEv
+_ZN5clang11ASTConsumer24HandleImplicitImportDeclEPNS_10ImportDeclE
+_ZN5clang14FrontendAction22shouldEraseOutputFilesEv
+_ZNK5clang15DeclarationName11getAsStringEv
+_ZN5clang17DiagnosticsEngine21EmitCurrentDiagnosticEb
+_ZN5clang11ASTConsumer21HandleInterestingDeclENS_12DeclGroupRefE
+_ZN5clang14FrontendActionC2Ev
+_ZN4llvm8RegistryIN5clang15PluginASTActionENS_14RegistryTraitsIS2_EEE4nodeC1ERKNS_19SimpleRegistryEntryIS2_EE
+_ZTVN5clang15PluginASTActionE
+_ZTVN5clang17ASTFrontendActionE
+_ZTVN5clang11ASTConsumerE
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to