Просмотр исходного кода

Add Support for #include in cpp files imported from Carbon (#4809)

Propagate `FileSystem` to `buildASTFromCodeWithArgs`().
Part of #4666
Boaz Brickner 1 год назад
Родитель
Сommit
28d6aedbbb

+ 1 - 1
toolchain/check/check_unit.cpp

@@ -358,7 +358,7 @@ auto CheckUnit::ImportCppPackages() -> void {
     return;
   }
 
-  ImportCppFile(context_, import.node_id, source_buffer->filename(),
+  ImportCppFile(context_, import.node_id, fs_, source_buffer->filename(),
                 source_buffer->text());
 }
 

+ 4 - 3
toolchain/check/import_cpp.cpp

@@ -19,8 +19,9 @@
 
 namespace Carbon::Check {
 
-auto ImportCppFile(Context& context, SemIRLoc loc, llvm::StringRef file_path,
-                   llvm::StringRef code) -> void {
+auto ImportCppFile(Context& context, SemIRLoc loc,
+                   llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem> fs,
+                   llvm::StringRef file_path, llvm::StringRef code) -> void {
   std::string diagnostics_str;
   llvm::raw_string_ostream diagnostics_stream(diagnostics_str);
 
@@ -33,7 +34,7 @@ auto ImportCppFile(Context& context, SemIRLoc loc, llvm::StringRef file_path,
       code, {}, file_path, "clang-tool",
       std::make_shared<clang::PCHContainerOperations>(),
       clang::tooling::getClangStripDependencyFileAdjuster(),
-      clang::tooling::FileContentMappings(), &diagnostics_consumer);
+      clang::tooling::FileContentMappings(), &diagnostics_consumer, fs);
   // TODO: Implement and use a DynamicRecursiveASTVisitor to traverse the AST.
   int num_errors = diagnostics_consumer.getNumErrors();
   int num_warnings = diagnostics_consumer.getNumWarnings();

+ 3 - 2
toolchain/check/import_cpp.h

@@ -12,8 +12,9 @@
 namespace Carbon::Check {
 
 // Parses the C++ code and report errors and warnings.
-auto ImportCppFile(Context& context, SemIRLoc loc, llvm::StringRef file_path,
-                   llvm::StringRef code) -> void;
+auto ImportCppFile(Context& context, SemIRLoc loc,
+                   llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem> fs,
+                   llvm::StringRef file_path, llvm::StringRef code) -> void;
 
 }  // namespace Carbon::Check
 

+ 30 - 0
toolchain/check/testdata/interop/cpp/no_prelude/include.carbon

@@ -0,0 +1,30 @@
+// Part of the Carbon Language project, under the Apache License v2.0 with LLVM
+// Exceptions. See /LICENSE for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+// AUTOUPDATE
+// TIP: To test this file alone, run:
+// TIP:   bazel test //toolchain/testing:file_test --test_arg=--file_tests=toolchain/check/testdata/interop/cpp/no_prelude/include.carbon
+// TIP: To dump output, run:
+// TIP:   bazel run //toolchain/testing:file_test -- --dump_output --file_tests=toolchain/check/testdata/interop/cpp/no_prelude/include.carbon
+
+// --- included_file.h
+
+void foo();
+
+// --- including_file.h
+
+#include "included_file.h"
+
+// --- import_function_decl.carbon
+
+library "[[@TEST_NAME]]";
+
+import Cpp library "including_file.h";
+
+// CHECK:STDOUT: --- import_function_decl.carbon
+// CHECK:STDOUT:
+// CHECK:STDOUT: file {
+// CHECK:STDOUT:   package: <namespace> = namespace [template] {}
+// CHECK:STDOUT: }
+// CHECK:STDOUT: