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

Propagate `FileSystem` to `buildASTFromCodeWithArgs`().
Part of #4666
This commit is contained in:
Boaz Brickner
2025-01-15 21:27:58 +00:00
committed by GitHub
parent aa23e9e2d8
commit 28d6aedbbb
4 changed files with 38 additions and 6 deletions
+1 -1
View File
@@ -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
View File
@@ -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
View File
@@ -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
@@ -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: