[all-commits] [llvm/llvm-project] 831484: [DebugInfo] Fix duplicate DIFile when main file is...

Fangrui Song via All-commits all-commits at lists.llvm.org
Tue Dec 12 10:13:56 PST 2023


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: 831484efa06bee798e218813cb1890ef108ed519
      https://github.com/llvm/llvm-project/commit/831484efa06bee798e218813cb1890ef108ed519
  Author: Fangrui Song <i at maskray.me>
  Date:   2023-12-12 (Tue, 12 Dec 2023)

  Changed paths:
    M clang/lib/CodeGen/CGDebugInfo.cpp
    M clang/test/CodeGen/debug-info-preprocessed-file.i

  Log Message:
  -----------
  [DebugInfo] Fix duplicate DIFile when main file is preprocessed (#75022)

When the main file is preprocessed and we change `MainFileName` to the
original source file name (e.g. `a.i => a.c`), the source manager does
not contain `a.c`, but we incorrectly associate the DIFile(a.c) with
md5(a.i). This causes CGDebugInfo::emitFunctionStart to create a
duplicate DIFile and leads to a spurious "inconsistent use of MD5
checksums" warning.

```
% cat a.c
void f() {}
% clang -c -g a.c  # no warning
% clang -E a.c -o a.i && clang -g -S a.i && clang -g -c a.s
a.s:9:2: warning: inconsistent use of MD5 checksums
        .file   1 "a.c"
        ^
% grep DIFile a.ll
!1 = !DIFile(filename: "a.c", directory: "/tmp/c", checksumkind: CSK_MD5, checksum: "c5b2e246df7d5f53e176b097a0641c3d")
!11 = !DIFile(filename: "a.c", directory: "/tmp/c")
% grep 'file.*a.c' a.s
        .file   "a.c"
        .file   0 "/tmp/c" "a.c" md5 0x2d14ea70fee15102033eb8d899914cce
        .file   1 "a.c"
```

Fix #56378 by disassociating md5(a.i) with a.c.




More information about the All-commits mailing list