[clang] [llvm] [clang][Modules][serialization] Deduplicate source location entries across loaded modules (PR #209795)

Chuanqi Xu via llvm-commits llvm-commits at lists.llvm.org
Fri Aug 14 00:32:15 PDT 2026


ChuanqiXu9 wrote:

> > > Trying to make a reproducer.
> > 
> > 
> > Hi @ChuanqiXu9, were you able to get a minimal reproducer?
> 
> I was trying and interrupted by other stuffs. I'll try to make it in two weeks.

It is super hard to get a minimal reproducer. So I debugged a little bit and to reveal the issue more easily.

For clang/include/clang/Serialization/ASTReader.h ASTReader::ReadSourceLocation, we should change it to:

```
SourceLocation Result =
    TranslateSourceLocation(*OwningModuleFile, Loc);
if (Result.isMacroID()) {
  bool Invalid = false;
  const SrcMgr::SLocEntry &Entry =
      SourceMgr.getSLocEntry(SourceMgr.getFileID(Result), &Invalid);
  if (!Invalid && Entry.isFile())
    llvm_unreachable("serialized MacroID translated to FileInfo");
}
return Result;
```

then use the following test:

```
// RUN: rm -rf %t
// RUN: mkdir -p %t
// RUN: split-file %s %t
// RUN: %clang_cc1 -std=c++20 -emit-header-unit -xc++-user-header %t/q.h \
// RUN:     -I%t -Wno-experimental-header-units -o %t/q.pcm
// RUN: %clang_cc1 -std=c++20 -emit-header-unit -xc++-user-header %t/a.h \
// RUN:     -I%t -fmodule-file=%t/q.pcm \
// RUN:     -Wno-experimental-header-units -o %t/a.pcm
// RUN: %clang_cc1 -std=c++20 -emit-header-unit -xc++-user-header %t/b.h \
// RUN:     -I%t -fmodule-file=%t/a.pcm \
// RUN:     -Wno-experimental-header-units -o %t/b.pcm
// RUN: ulimit -c 0 && not --crash %clang_cc1 -std=c++20 -fsyntax-only \
// RUN:     %t/use.cpp -I%t -fmodule-file=%t/b.pcm \
// RUN:     -Wno-experimental-header-units

//--- dup.h
#define DECL(name) template <class T> struct name { T value; };

//--- q.h
#include "dup.h"

//--- a.h
import "q.h";
#include "dup.h"
DECL(Box)

//--- b.h
import "a.h";
using Alias = Box<int>;

//--- use.cpp
import "b.h";
Alias value;
int main() { return value.value; }
``` 
```

https://github.com/llvm/llvm-project/pull/209795


More information about the llvm-commits mailing list