This revision was automatically updated to reflect the committed changes.
Closed by commit rL354283: [Reproducers] Make clang use lldb's VFS. 
(authored by JDevlieghere, committed by ).
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.

Changed prior to commit:
  https://reviews.llvm.org/D58309?vs=187116&id=187269#toc

Repository:
  rL LLVM

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D58309/new/

https://reviews.llvm.org/D58309

Files:
  lldb/trunk/include/lldb/Host/FileSystem.h
  lldb/trunk/include/lldb/Symbol/ClangASTImporter.h
  lldb/trunk/lit/Reproducer/Inputs/ModuleCapture.in
  lldb/trunk/lit/Reproducer/Modules/Inputs/Bar.h
  lldb/trunk/lit/Reproducer/Modules/Inputs/Foo.h
  lldb/trunk/lit/Reproducer/Modules/Inputs/ModuleCXX.in
  lldb/trunk/lit/Reproducer/Modules/Inputs/main.cpp
  lldb/trunk/lit/Reproducer/Modules/Inputs/module.modulemap
  lldb/trunk/lit/Reproducer/Modules/TestModuleCXX.test
  lldb/trunk/lit/Reproducer/TestClangFileRepro.test
  lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangExpressionParser.cpp
  lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangModulesDeclVendor.cpp
  lldb/trunk/source/Plugins/Language/ClangCommon/ClangHighlighter.cpp
  lldb/trunk/source/Symbol/ClangASTContext.cpp
  lldb/trunk/unittests/Language/Highlighting/HighlighterTest.cpp

Index: lldb/trunk/unittests/Language/Highlighting/HighlighterTest.cpp
===================================================================
--- lldb/trunk/unittests/Language/Highlighting/HighlighterTest.cpp
+++ lldb/trunk/unittests/Language/Highlighting/HighlighterTest.cpp
@@ -9,6 +9,7 @@
 #include "gtest/gtest.h"
 
 #include "lldb/Core/Highlighter.h"
+#include "lldb/Host/FileSystem.h"
 
 #include "Plugins/Language/CPlusPlus/CPlusPlusLanguage.h"
 #include "Plugins/Language/ObjC/ObjCLanguage.h"
@@ -27,6 +28,7 @@
 void HighlighterTest::SetUpTestCase() {
   // The HighlighterManager uses the language plugins under the hood, so we
   // have to initialize them here for our test process.
+  FileSystem::Initialize();
   CPlusPlusLanguage::Initialize();
   ObjCLanguage::Initialize();
   ObjCPlusPlusLanguage::Initialize();
@@ -36,6 +38,7 @@
   CPlusPlusLanguage::Terminate();
   ObjCLanguage::Terminate();
   ObjCPlusPlusLanguage::Terminate();
+  FileSystem::Terminate();
 }
 
 static std::string getName(lldb::LanguageType type) {
Index: lldb/trunk/source/Symbol/ClangASTContext.cpp
===================================================================
--- lldb/trunk/source/Symbol/ClangASTContext.cpp
+++ lldb/trunk/source/Symbol/ClangASTContext.cpp
@@ -911,7 +911,8 @@
 clang::FileManager *ClangASTContext::getFileManager() {
   if (m_file_manager_up == nullptr) {
     clang::FileSystemOptions file_system_options;
-    m_file_manager_up.reset(new clang::FileManager(file_system_options));
+    m_file_manager_up.reset(new clang::FileManager(
+        file_system_options, FileSystem::Instance().GetVirtualFileSystem()));
   }
   return m_file_manager_up.get();
 }
Index: lldb/trunk/source/Plugins/Language/ClangCommon/ClangHighlighter.cpp
===================================================================
--- lldb/trunk/source/Plugins/Language/ClangCommon/ClangHighlighter.cpp
+++ lldb/trunk/source/Plugins/Language/ClangCommon/ClangHighlighter.cpp
@@ -8,6 +8,7 @@
 
 #include "ClangHighlighter.h"
 
+#include "lldb/Host/FileSystem.h"
 #include "lldb/Target/Language.h"
 #include "lldb/Utility/AnsiTerminal.h"
 #include "lldb/Utility/StreamString.h"
@@ -135,7 +136,8 @@
   using namespace clang;
 
   FileSystemOptions file_opts;
-  FileManager file_mgr(file_opts);
+  FileManager file_mgr(file_opts,
+                       FileSystem::Instance().GetVirtualFileSystem());
 
   unsigned line_number = previous_lines.count('\n') + 1U;
 
Index: lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangModulesDeclVendor.cpp
===================================================================
--- lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangModulesDeclVendor.cpp
+++ lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangModulesDeclVendor.cpp
@@ -661,6 +661,8 @@
     opts.IncludeModuleFiles = true;
   }
 
+  // Make sure clang uses the same VFS as LLDB.
+  instance->setVirtualFileSystem(FileSystem::Instance().GetVirtualFileSystem());
   instance->setDiagnostics(diagnostics_engine.get());
   instance->setInvocation(invocation);
 
Index: lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangExpressionParser.cpp
===================================================================
--- lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangExpressionParser.cpp
+++ lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangExpressionParser.cpp
@@ -258,6 +258,10 @@
     opts.IncludeModuleFiles = true;
   }
 
+  // Make sure clang uses the same VFS as LLDB.
+  m_compiler->setVirtualFileSystem(
+      FileSystem::Instance().GetVirtualFileSystem());
+
   lldb::LanguageType frame_lang =
       expr.Language(); // defaults to lldb::eLanguageTypeUnknown
   bool overridden_target_opts = false;
Index: lldb/trunk/lit/Reproducer/Modules/TestModuleCXX.test
===================================================================
--- lldb/trunk/lit/Reproducer/Modules/TestModuleCXX.test
+++ lldb/trunk/lit/Reproducer/Modules/TestModuleCXX.test
@@ -0,0 +1,34 @@
+# Start fresh.
+# RUN: rm -rf %t.root
+# RUN: rm -rf %t.clang-cache
+# RUN: rm -rf %t.lldb-cache
+
+# Create a temporary root we can remove later.
+# RUN: mkdir -p %t.root
+# RUN: mkdir -p %t.clang-cache
+# RUN: mkdir -p %t.lldb-cache
+# RUN: cp %S/Inputs/main.cpp %t.root
+# RUN: cp %S/Inputs/Foo.h %t.root
+# RUN: cp %S/Inputs/Bar.h %t.root
+# RUN: cp %S/Inputs/module.modulemap %t.root
+
+# Compile the test case form the temporary root.
+# RUN: %clang %t.root/main.cpp -g -fmodules -fcxx-modules -fmodules-cache-path=%t.clang-cache -o %t.root/a.out
+
+# Capture the debug session.
+# RUN: %lldb -x -b -o 'settings set symbols.clang-modules-cache-path %t.lldb-cache' -s %S/Inputs/ModuleCXX.in --capture %t.repro %t.root/a.out | FileCheck %s --check-prefix CAPTURE
+# CAPTURE: (success = 0)
+
+# RUN: cat %t.repro/files.yaml | FileCheck %s --check-prefix YAML
+# YAML-DAG: Foo.h
+# YAML-DAG: Bar.h
+# YAML-DAG: module.modulemap
+
+# Remove the temporary root.
+# RUN: rm -rf %t.root
+# RUN: rm -rf %t.clang-cache
+# RUN: rm -rf %t.lldb-cache
+
+# Replay the debug session.
+# RUN: %lldb -x -b -o 'settings set symbols.clang-modules-cache-path %t.lldb-cache' -s %S/Inputs/ModuleCXX.in --replay %t.repro %t.root/a.out | FileCheck %s --check-prefix REPLAY
+# REPLAY: (success = 0)
Index: lldb/trunk/lit/Reproducer/Modules/Inputs/Bar.h
===================================================================
--- lldb/trunk/lit/Reproducer/Modules/Inputs/Bar.h
+++ lldb/trunk/lit/Reproducer/Modules/Inputs/Bar.h
@@ -0,0 +1,3 @@
+struct Bar {
+  int success;
+};
Index: lldb/trunk/lit/Reproducer/Modules/Inputs/Foo.h
===================================================================
--- lldb/trunk/lit/Reproducer/Modules/Inputs/Foo.h
+++ lldb/trunk/lit/Reproducer/Modules/Inputs/Foo.h
@@ -0,0 +1 @@
+struct Foo {};
Index: lldb/trunk/lit/Reproducer/Modules/Inputs/module.modulemap
===================================================================
--- lldb/trunk/lit/Reproducer/Modules/Inputs/module.modulemap
+++ lldb/trunk/lit/Reproducer/Modules/Inputs/module.modulemap
@@ -0,0 +1,7 @@
+module Foo {
+  header "Foo.h"
+}
+
+module Bar {
+  header "Bar.h"
+}
Index: lldb/trunk/lit/Reproducer/Modules/Inputs/main.cpp
===================================================================
--- lldb/trunk/lit/Reproducer/Modules/Inputs/main.cpp
+++ lldb/trunk/lit/Reproducer/Modules/Inputs/main.cpp
@@ -0,0 +1,9 @@
+#include "Foo.h"
+
+void stop() {}
+
+int main(int argc, char **argv) {
+  Foo foo;
+  stop(); // break here.
+  return 0;
+}
Index: lldb/trunk/lit/Reproducer/Modules/Inputs/ModuleCXX.in
===================================================================
--- lldb/trunk/lit/Reproducer/Modules/Inputs/ModuleCXX.in
+++ lldb/trunk/lit/Reproducer/Modules/Inputs/ModuleCXX.in
@@ -0,0 +1,6 @@
+breakpoint set -f main.cpp -l 5
+run
+expr -l Objective-C++ -- @import Foo
+expr -l Objective-C++ -- @import Bar
+expr -- Bar()
+reproducer generate
Index: lldb/trunk/include/lldb/Host/FileSystem.h
===================================================================
--- lldb/trunk/include/lldb/Host/FileSystem.h
+++ lldb/trunk/include/lldb/Host/FileSystem.h
@@ -181,6 +181,10 @@
   llvm::ErrorOr<std::string> GetExternalPath(const llvm::Twine &path);
   llvm::ErrorOr<std::string> GetExternalPath(const FileSpec &file_spec);
 
+  llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem> GetVirtualFileSystem() {
+    return m_fs;
+  }
+
 private:
   static llvm::Optional<FileSystem> &InstanceImpl();
   llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem> m_fs;
Index: lldb/trunk/include/lldb/Symbol/ClangASTImporter.h
===================================================================
--- lldb/trunk/include/lldb/Symbol/ClangASTImporter.h
+++ lldb/trunk/include/lldb/Symbol/ClangASTImporter.h
@@ -21,6 +21,7 @@
 #include "clang/Basic/FileManager.h"
 #include "clang/Basic/FileSystemOptions.h"
 
+#include "lldb/Host/FileSystem.h"
 #include "lldb/Symbol/CompilerDeclContext.h"
 #include "lldb/lldb-types.h"
 
@@ -93,7 +94,9 @@
         vbase_offsets;
   };
 
-  ClangASTImporter() : m_file_manager(clang::FileSystemOptions()) {}
+  ClangASTImporter()
+      : m_file_manager(clang::FileSystemOptions(),
+                       FileSystem::Instance().GetVirtualFileSystem()) {}
 
   clang::QualType CopyType(clang::ASTContext *dst_ctx,
                            clang::ASTContext *src_ctx, clang::QualType type);
Index: lldb/trunk/lit/Reproducer/Inputs/ModuleCapture.in
===================================================================
--- lldb/trunk/lit/Reproducer/Inputs/ModuleCapture.in
+++ lldb/trunk/lit/Reproducer/Inputs/ModuleCapture.in
@@ -1,2 +0,0 @@
-expr -- @import Cocoa
-reproducer generate
Index: lldb/trunk/lit/Reproducer/TestClangFileRepro.test
===================================================================
--- lldb/trunk/lit/Reproducer/TestClangFileRepro.test
+++ lldb/trunk/lit/Reproducer/TestClangFileRepro.test
@@ -1,8 +0,0 @@
-# REQUIRES: system-darwin
-#
-# This tests that modules files from clang end up in the reproducer.
-#
-# RUN: %lldb -x -b -s %S/Inputs/ModuleCapture.in --capture %t.repro
-# cat %t.repro/files.yaml | FileCheck %s
-#
-# CHECK: Cocoa.h
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to