mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-02-05 00:49:43 +00:00
[libclang] Make sure to use the raw module format for libclang parsing.
Fixes crash when passing '-gmodules' in the compiler options. rdar://23588717 llvm-svn: 253645
This commit is contained in:
parent
d9625276a7
commit
a3e2ff19e5
@ -827,6 +827,8 @@ public:
|
||||
///
|
||||
/// \param ResourceFilesPath - The path to the compiler resource files.
|
||||
///
|
||||
/// \param ModuleFormat - If provided, uses the specific module format.
|
||||
///
|
||||
/// \param ErrAST - If non-null and parsing failed without any AST to return
|
||||
/// (e.g. because the PCH could not be loaded), this accepts the ASTUnit
|
||||
/// mainly to allow the caller to see the diagnostics.
|
||||
@ -845,6 +847,7 @@ public:
|
||||
bool IncludeBriefCommentsInCodeCompletion = false,
|
||||
bool AllowPCHWithCompilerErrors = false, bool SkipFunctionBodies = false,
|
||||
bool UserFilesAreVolatile = false, bool ForSerialization = false,
|
||||
llvm::Optional<StringRef> ModuleFormat = llvm::None,
|
||||
std::unique_ptr<ASTUnit> *ErrAST = nullptr);
|
||||
|
||||
/// \brief Reparse the source files using the same command-line options that
|
||||
|
@ -1934,6 +1934,7 @@ ASTUnit *ASTUnit::LoadFromCommandLine(
|
||||
bool CacheCodeCompletionResults, bool IncludeBriefCommentsInCodeCompletion,
|
||||
bool AllowPCHWithCompilerErrors, bool SkipFunctionBodies,
|
||||
bool UserFilesAreVolatile, bool ForSerialization,
|
||||
llvm::Optional<StringRef> ModuleFormat,
|
||||
std::unique_ptr<ASTUnit> *ErrAST) {
|
||||
assert(Diags.get() && "no DiagnosticsEngine was provided");
|
||||
|
||||
@ -1967,6 +1968,9 @@ ASTUnit *ASTUnit::LoadFromCommandLine(
|
||||
|
||||
CI->getFrontendOpts().SkipFunctionBodies = SkipFunctionBodies;
|
||||
|
||||
if (ModuleFormat)
|
||||
CI->getHeaderSearchOpts().ModuleFormat = ModuleFormat.getValue();
|
||||
|
||||
// Create the AST unit.
|
||||
std::unique_ptr<ASTUnit> AST;
|
||||
AST.reset(new ASTUnit(false));
|
||||
|
@ -6,6 +6,8 @@ int glob;
|
||||
// RUN: rm -rf %t.cache
|
||||
// RUN: c-index-test -test-annotate-tokens=%s:2:1:5:1 %s -fmodules-cache-path=%t.cache -fmodules -F %S/../Modules/Inputs \
|
||||
// RUN: | FileCheck %s
|
||||
// RUN: c-index-test -test-annotate-tokens=%s:2:1:5:1 %s -fmodules-cache-path=%t.cache -fmodules -gmodules -F %S/../Modules/Inputs \
|
||||
// RUN: | FileCheck %s
|
||||
|
||||
// CHECK: Punctuation: "#" [2:1 - 2:2] inclusion directive=[[INC_DIR:DependsOnModule[/\\]DependsOnModule\.h \(.*/Modules/Inputs/DependsOnModule\.framework[/\\]Headers[/\\]DependsOnModule.h\)]]
|
||||
// CHECK-NEXT: Identifier: "include" [2:2 - 2:9] inclusion directive=[[INC_DIR]]
|
||||
|
@ -5,6 +5,7 @@
|
||||
|
||||
// RUN: rm -rf %t
|
||||
// RUN: c-index-test -code-completion-at=%s:4:9 -fmodules-cache-path=%t -fmodules -F %S/Inputs/Frameworks -I %S/Inputs/Headers %s | FileCheck -check-prefix=CHECK-TOP-LEVEL %s
|
||||
// RUN: c-index-test -code-completion-at=%s:4:9 -fmodules-cache-path=%t -fmodules -gmodules -F %S/Inputs/Frameworks -I %S/Inputs/Headers %s | FileCheck -check-prefix=CHECK-TOP-LEVEL %s
|
||||
// CHECK-TOP-LEVEL: ModuleImport:{TypedText Framework} (50)
|
||||
// CHECK-TOP-LEVEL: ModuleImport:{TypedText LibA} (50)
|
||||
// CHECK-TOP-LEVEL: ModuleImport:{TypedText nested} (50)
|
||||
|
@ -6,6 +6,8 @@ int glob;
|
||||
// RUN: rm -rf %t.cache
|
||||
// RUN: c-index-test -index-file %s -fmodules-cache-path=%t.cache -fmodules -F %S/../Modules/Inputs \
|
||||
// RUN: -Xclang -fdisable-module-hash | FileCheck %s
|
||||
// RUN: c-index-test -index-file %s -fmodules-cache-path=%t.cache -fmodules -gmodules -F %S/../Modules/Inputs \
|
||||
// RUN: -Xclang -fdisable-module-hash | FileCheck %s
|
||||
|
||||
// CHECK-NOT: [indexDeclaration]
|
||||
// CHECK: [ppIncludedFile]: {{.*}}/Modules/Inputs/DependsOnModule.framework{{[/\\]}}Headers{{[/\\]}}DependsOnModule.h | name: "DependsOnModule/DependsOnModule.h" | hash loc: 2:1 | isImport: 0 | isAngled: 1 | isModule: 1
|
||||
|
@ -3119,7 +3119,9 @@ clang_parseTranslationUnit_Impl(CXIndex CIdx, const char *source_filename,
|
||||
/*RemappedFilesKeepOriginalName=*/true, PrecompilePreamble, TUKind,
|
||||
CacheCodeCompletionResults, IncludeBriefCommentsInCodeCompletion,
|
||||
/*AllowPCHWithCompilerErrors=*/true, SkipFunctionBodies,
|
||||
/*UserFilesAreVolatile=*/true, ForSerialization, &ErrUnit));
|
||||
/*UserFilesAreVolatile=*/true, ForSerialization,
|
||||
CXXIdx->getPCHContainerOperations()->getRawReader().getFormat(),
|
||||
&ErrUnit));
|
||||
|
||||
// Early failures in LoadFromCommandLine may return with ErrUnit unset.
|
||||
if (!Unit && !ErrUnit)
|
||||
|
@ -566,6 +566,10 @@ static CXErrorCode clang_indexSourceFile_Impl(
|
||||
if (index_options & CXIndexOpt_SuppressWarnings)
|
||||
CInvok->getDiagnosticOpts().IgnoreWarnings = true;
|
||||
|
||||
// Make sure to use the raw module format.
|
||||
CInvok->getHeaderSearchOpts().ModuleFormat =
|
||||
CXXIdx->getPCHContainerOperations()->getRawReader().getFormat();
|
||||
|
||||
ASTUnit *Unit = ASTUnit::create(CInvok.get(), Diags, CaptureDiagnostics,
|
||||
/*UserFilesAreVolatile=*/true);
|
||||
if (!Unit)
|
||||
|
Loading…
x
Reference in New Issue
Block a user