[Basic] Don't rewrite source buffer copy multiple times

The on-disc buffer file name was not recorded correctly.

rdar://130478685
This commit is contained in:
Rintaro Ishizaki
2024-07-09 14:36:56 -07:00
parent ad61e531a3
commit 90c2975d66
4 changed files with 9 additions and 9 deletions

View File

@@ -71,7 +71,7 @@ public:
/// The name of the source file on disk that was created to hold the
/// contents of this file for external clients.
StringRef onDiskBufferCopyFileName = StringRef();
mutable StringRef onDiskBufferCopyFileName = StringRef();
/// Contains the ancestors of this source buffer, starting with the root source
/// buffer and ending at this source buffer.
@@ -209,8 +209,7 @@ public:
bool hasGeneratedSourceInfo(unsigned bufferID);
/// Retrieve the generated source information for the given buffer.
std::optional<GeneratedSourceInfo>
getGeneratedSourceInfo(unsigned bufferID) const;
const GeneratedSourceInfo *getGeneratedSourceInfo(unsigned bufferID) const;
/// Retrieve the list of ancestors of the given source buffer, starting with
/// the root buffer and proceding to the given buffer ID at the end.

View File

@@ -907,7 +907,7 @@ ModuleDecl::getOriginalLocation(SourceLoc loc) const {
SourceLoc startLoc = loc;
unsigned startBufferID = bufferID;
while (std::optional<GeneratedSourceInfo> info =
while (const GeneratedSourceInfo *info =
SM.getGeneratedSourceInfo(bufferID)) {
switch (info->kind) {
#define MACRO_ROLE(Name, Description) \

View File

@@ -288,7 +288,8 @@ StringRef SourceManager::getIdentifierForBuffer(
// If this is generated source code, and we're supposed to force it to disk
// so external clients can see it, do so now.
if (ForceGeneratedSourceToDisk) {
if (auto generatedInfo = getGeneratedSourceInfo(bufferID)) {
if (const GeneratedSourceInfo *generatedInfo =
getGeneratedSourceInfo(bufferID)) {
// We only care about macros, so skip everything else.
if (generatedInfo->kind == GeneratedSourceInfo::ReplacedFunctionBody ||
generatedInfo->kind == GeneratedSourceInfo::PrettyPrinted ||
@@ -403,12 +404,12 @@ bool SourceManager::hasGeneratedSourceInfo(unsigned bufferID) {
return GeneratedSourceInfos.count(bufferID);
}
std::optional<GeneratedSourceInfo>
const GeneratedSourceInfo *
SourceManager::getGeneratedSourceInfo(unsigned bufferID) const {
auto known = GeneratedSourceInfos.find(bufferID);
if (known == GeneratedSourceInfos.end())
return std::nullopt;
return known->second;
return nullptr;
return &known->second;
}
namespace {

View File

@@ -285,7 +285,7 @@ static DeclContext *getInnermostFunctionContext(DeclContext *DC) {
}
/// Return location of the macro expansion and the macro name.
static MacroInfo getMacroInfo(GeneratedSourceInfo &Info,
static MacroInfo getMacroInfo(const GeneratedSourceInfo &Info,
DeclContext *FunctionDC) {
MacroInfo Result(Info.generatedSourceRange.getStart(),
Info.originalSourceRange.getStart());