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.
16 lines
565 B
OpenEdge ABL
16 lines
565 B
OpenEdge ABL
# 1 "/foo/bar/preprocessed-input.c"
|
|
# 1 "<built-in>" 1
|
|
# 1 "<built-in>" 3
|
|
# 318 "<built-in>" 3
|
|
# 1 "<command line>" 1
|
|
# 1 "<built-in>" 2
|
|
# 1 "preprocessed-input.c" 2
|
|
|
|
/// The main file is preprocessed. We change it to preprocessed-input.c. Since
|
|
/// the content is not available, we don't compute a checksum.
|
|
// RUN: %clang -g -c -S -emit-llvm -o - %s | FileCheck %s
|
|
// CHECK: !DICompileUnit(language: DW_LANG_C{{.*}}, file: ![[FILE:[0-9]+]]
|
|
// CHECK: ![[FILE]] = !DIFile(filename: "/foo/bar/preprocessed-input.c"
|
|
// CHECK-NOT: checksumkind:
|
|
// CHECK-NOT: !DIFile(
|