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(SourceLocation Loc) { add(SM.getFileID(Loc), Loc); }
|
||||||
|
|
||||||
void add(FileID FID, SourceLocation 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;
|
return;
|
||||||
assert(SM.isInFileID(Loc, FID));
|
assert(SM.isInFileID(Loc, FID));
|
||||||
if (Loc.isFileID()) {
|
if (Loc.isFileID()) {
|
||||||
|
|
|
@ -234,7 +234,7 @@ TEST(IncludeCleaner, GetUnusedHeaders) {
|
||||||
"<system_header.h>"));
|
"<system_header.h>"));
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(IncludeCleaner, ScratchBuffer) {
|
TEST(IncludeCleaner, VirtualBuffers) {
|
||||||
TestTU TU;
|
TestTU TU;
|
||||||
TU.Filename = "foo.cpp";
|
TU.Filename = "foo.cpp";
|
||||||
TU.Code = R"cpp(
|
TU.Code = R"cpp(
|
||||||
|
@ -242,6 +242,10 @@ TEST(IncludeCleaner, ScratchBuffer) {
|
||||||
|
|
||||||
using flags::FLAGS_FOO;
|
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;
|
int concat(a, b) = 42;
|
||||||
)cpp";
|
)cpp";
|
||||||
// The pasting operator in combination with DEFINE_FLAG will create
|
// The pasting operator in combination with DEFINE_FLAG will create
|
||||||
|
@ -258,6 +262,7 @@ TEST(IncludeCleaner, ScratchBuffer) {
|
||||||
#define ab x
|
#define ab x
|
||||||
#define concat(x, y) x##y
|
#define concat(x, y) x##y
|
||||||
)cpp";
|
)cpp";
|
||||||
|
TU.ExtraArgs = {"-DCLI=42"};
|
||||||
ParsedAST AST = TU.build();
|
ParsedAST AST = TU.build();
|
||||||
auto &SM = AST.getSourceManager();
|
auto &SM = AST.getSourceManager();
|
||||||
auto &Includes = AST.getIncludeStructure();
|
auto &Includes = AST.getIncludeStructure();
|
||||||
|
|
Loading…
Reference in New Issue