forked from OSchip/llvm-project
[clangd] IncludeCleaner: Do not process locations in built-in files
Doing otherwise leads to crashing. Way to reproduce: open "gmock/gmock.h" in the LLVM source tree. Reviewed By: kadircet Differential Revision: https://reviews.llvm.org/D112608
This commit is contained in:
parent
65bb6593e5
commit
22079c61a8
|
@ -129,7 +129,9 @@ struct ReferencedFiles {
|
|||
void add(SourceLocation Loc) { add(SM.getFileID(Loc), Loc); }
|
||||
|
||||
void add(FileID FID, SourceLocation Loc) {
|
||||
if (FID.isInvalid())
|
||||
// Check if Loc is not written in a physical file.
|
||||
if (FID.isInvalid() || SM.isWrittenInBuiltinFile(Loc) ||
|
||||
SM.isWrittenInCommandLineFile(Loc))
|
||||
return;
|
||||
assert(SM.isInFileID(Loc, FID));
|
||||
if (Loc.isFileID()) {
|
||||
|
|
|
@ -234,7 +234,7 @@ TEST(IncludeCleaner, GetUnusedHeaders) {
|
|||
"<system_header.h>"));
|
||||
}
|
||||
|
||||
TEST(IncludeCleaner, ScratchBuffer) {
|
||||
TEST(IncludeCleaner, VirtualBuffers) {
|
||||
TestTU TU;
|
||||
TU.Filename = "foo.cpp";
|
||||
TU.Code = R"cpp(
|
||||
|
@ -242,6 +242,10 @@ TEST(IncludeCleaner, ScratchBuffer) {
|
|||
|
||||
using flags::FLAGS_FOO;
|
||||
|
||||
// CLI will come from a define, __llvm__ is a built-in. In both cases, they
|
||||
// come from non-existent files.
|
||||
int y = CLI + __llvm__;
|
||||
|
||||
int concat(a, b) = 42;
|
||||
)cpp";
|
||||
// The pasting operator in combination with DEFINE_FLAG will create
|
||||
|
@ -258,6 +262,7 @@ TEST(IncludeCleaner, ScratchBuffer) {
|
|||
#define ab x
|
||||
#define concat(x, y) x##y
|
||||
)cpp";
|
||||
TU.ExtraArgs = {"-DCLI=42"};
|
||||
ParsedAST AST = TU.build();
|
||||
auto &SM = AST.getSourceManager();
|
||||
auto &Includes = AST.getIncludeStructure();
|
||||
|
|
Loading…
Reference in New Issue