Reland "Correctly emit dwoIDs after ASTFileSignature refactoring (D81347)"
authorRaphael Isemann <teemperor@gmail.com>
Mon, 24 Aug 2020 09:20:57 +0000 (11:20 +0200)
committerRaphael Isemann <teemperor@gmail.com>
Mon, 24 Aug 2020 09:51:32 +0000 (11:51 +0200)
commitada2e8ea67393aa8c44fe8e9d46be62df6d1c702
treeb2f2bda2156f3309cd4ad2c2012b0ca226c02a8f
parent3d1b0000f9da83d3f636d76b2108cd5121f4f4b0
Reland "Correctly emit dwoIDs after ASTFileSignature refactoring (D81347)"

This relands D84013 but with a test that relies on less shell features to
hopefully make the test pass on Fuchsia (where the test from the previous patch
version strangely failed with a plain "Exit code 1").

Original summary:

D81347 changes the ASTFileSignature to be an array of 20 uint8_t instead of 5 uint32_t.
However, it didn't update the code in ObjectFilePCHContainerOperations that creates
the dwoID in the module from the ASTFileSignature (`Buffer->Signature` being the
array subclass that is now `std::array<uint8_t, 20>` instead of `std::array<uint32_t, 5>`).

```
  uint64_t Signature = [..] (uint64_t)Buffer->Signature[1] << 32 | Buffer->Signature[0]
```

This code works with the old ASTFileSignature  (where two uint32_t are enough to
fill the uint64_t), but after the patch this only took two bytes from the ASTFileSignature
and only partly filled the Signature uint64_t.

This caused that the dwoID in the module ref and the dwoID in the actual module no
longer match (which in turns causes that LLDB keeps warning about the dwoID's not
matching when debugging -gmodules-compiled binaries).

This patch just unifies the logic for turning the ASTFileSignature into an uint64_t which
makes the dwoID match again (and should prevent issues like that in the future).

Reviewed By: aprantl, dang

Differential Revision: https://reviews.llvm.org/D84013
clang/include/clang/Basic/Module.h
clang/lib/CodeGen/CGDebugInfo.cpp
clang/lib/CodeGen/ObjectFilePCHContainerOperations.cpp
clang/test/Modules/Inputs/DebugDwoId.h [new file with mode: 0644]
clang/test/Modules/Inputs/module.map
clang/test/Modules/ModuleDebugInfoDwoId.cpp [new file with mode: 0644]