From 2b3074c0d14cadbd9595346fc795d4a49a479a20 Mon Sep 17 00:00:00 2001 From: Raphael Isemann Date: Mon, 24 Aug 2020 12:54:25 +0200 Subject: [PATCH] Revert "Reland "Correctly emit dwoIDs after ASTFileSignature refactoring (D81347)"" This reverts commit ada2e8ea67393aa8c44fe8e9d46be62df6d1c702. Still breaking on Fuchsia (and also Fedora) with exit code 1, so back to investigating. --- clang/include/clang/Basic/Module.h | 9 -------- clang/lib/CodeGen/CGDebugInfo.cpp | 9 ++++---- .../ObjectFilePCHContainerOperations.cpp | 6 ++--- clang/test/Modules/Inputs/DebugDwoId.h | 4 ---- clang/test/Modules/Inputs/module.map | 4 ---- clang/test/Modules/ModuleDebugInfoDwoId.cpp | 22 ------------------- 6 files changed, 8 insertions(+), 46 deletions(-) delete mode 100644 clang/test/Modules/Inputs/DebugDwoId.h delete mode 100644 clang/test/Modules/ModuleDebugInfoDwoId.cpp diff --git a/clang/include/clang/Basic/Module.h b/clang/include/clang/Basic/Module.h index ac33c7573f35d..94dd215379661 100644 --- a/clang/include/clang/Basic/Module.h +++ b/clang/include/clang/Basic/Module.h @@ -62,15 +62,6 @@ struct ASTFileSignature : std::array { explicit operator bool() const { return *this != BaseT({{0}}); } - /// Returns the value truncated to the size of an uint64_t. - uint64_t truncatedValue() const { - uint64_t Value = 0; - static_assert(sizeof(*this) >= sizeof(uint64_t), "No need to truncate."); - for (unsigned I = 0; I < sizeof(uint64_t); ++I) - Value |= static_cast((*this)[I]) << (I * 8); - return Value; - } - static ASTFileSignature create(StringRef Bytes) { return create(Bytes.bytes_begin(), Bytes.bytes_end()); } diff --git a/clang/lib/CodeGen/CGDebugInfo.cpp b/clang/lib/CodeGen/CGDebugInfo.cpp index e3442ecd4bd59..2faf944d07d13 100644 --- a/clang/lib/CodeGen/CGDebugInfo.cpp +++ b/clang/lib/CodeGen/CGDebugInfo.cpp @@ -2545,11 +2545,12 @@ llvm::DIModule *CGDebugInfo::getOrCreateModuleRef(ASTSourceDescriptor Mod, // We use the lower 64 bits for debug info. uint64_t Signature = 0; - if (const auto &ModSig = Mod.getSignature()) - Signature = ModSig.truncatedValue(); - else + if (const auto &ModSig = Mod.getSignature()) { + for (unsigned I = 0; I != sizeof(Signature); ++I) + Signature |= (uint64_t)ModSig[I] << (I * 8); + } else { Signature = ~1ULL; - + } llvm::DIBuilder DIB(CGM.getModule()); SmallString<0> PCM; if (!llvm::sys::path::is_absolute(Mod.getASTFile())) diff --git a/clang/lib/CodeGen/ObjectFilePCHContainerOperations.cpp b/clang/lib/CodeGen/ObjectFilePCHContainerOperations.cpp index 04bd6680e31c5..0c7e5f4598f88 100644 --- a/clang/lib/CodeGen/ObjectFilePCHContainerOperations.cpp +++ b/clang/lib/CodeGen/ObjectFilePCHContainerOperations.cpp @@ -250,10 +250,10 @@ class PCHContainerGenerator : public ASTConsumer { // PCH files don't have a signature field in the control block, // but LLVM detects DWO CUs by looking for a non-zero DWO id. // We use the lower 64 bits for debug info. - uint64_t Signature = - Buffer->Signature ? Buffer->Signature.truncatedValue() : ~1ULL; - + Buffer->Signature + ? (uint64_t)Buffer->Signature[1] << 32 | Buffer->Signature[0] + : ~1ULL; Builder->getModuleDebugInfo()->setDwoId(Signature); // Finalize the Builder. diff --git a/clang/test/Modules/Inputs/DebugDwoId.h b/clang/test/Modules/Inputs/DebugDwoId.h deleted file mode 100644 index 242e4c7f5116d..0000000000000 --- a/clang/test/Modules/Inputs/DebugDwoId.h +++ /dev/null @@ -1,4 +0,0 @@ -#ifndef DEBUG_DWO_ID_H -#define DEBUG_DWO_ID_H -struct Dummy {}; -#endif diff --git a/clang/test/Modules/Inputs/module.map b/clang/test/Modules/Inputs/module.map index e7cb4b27bc08b..ed220e667f055 100644 --- a/clang/test/Modules/Inputs/module.map +++ b/clang/test/Modules/Inputs/module.map @@ -357,10 +357,6 @@ module DebugObjCImport { } } -module DebugDwoId { - header "DebugDwoId.h" -} - module ImportNameInDir { header "ImportNameInDir.h" export * diff --git a/clang/test/Modules/ModuleDebugInfoDwoId.cpp b/clang/test/Modules/ModuleDebugInfoDwoId.cpp deleted file mode 100644 index 7a450c2580ea8..0000000000000 --- a/clang/test/Modules/ModuleDebugInfoDwoId.cpp +++ /dev/null @@ -1,22 +0,0 @@ -// Tests that dwoIds in modules match the dwoIDs in the main file. - -// RUN: rm -rf %t.cache -// RUN: %clang_cc1 -triple %itanium_abi_triple -x objective-c++ -std=c++11 -debugger-tuning=lldb -debug-info-kind=limited -fmodules -fmodule-format=obj -dwarf-ext-refs -fimplicit-module-maps -fmodules-cache-path=%t.cache %s -I %S/Inputs -emit-llvm -o %t.ll -mllvm -debug-only=pchcontainer 2> %t.mod-out -// RUN: cat %t.ll > %t.combined_output -// RUN: cat %t.mod-out >> %t.combined_output -// RUN: cat %t.combined_output | FileCheck %s -// RUN: cat %t.ll | FileCheck --check-prefix=CHECK-REALIDS %s -// RUN: cat %t.mod-out | FileCheck --check-prefix=CHECK-REALIDS %s - -@import DebugDwoId; - -Dummy d; - -// Find the emitted dwoID for DebugInfoId and compare it against the one in the PCM. -// CHECK: DebugDwoId-{{[A-Z0-9]+}}.pcm -// CHECK-SAME: dwoId: [[DWOID:[0-9]+]] -// CHECK: dwoId: [[DWOID]] -// CHECK-NEXT: !DIFile(filename: "DebugDwoId" - -// Make sure the dwo IDs are real IDs and not fallback values (~1ULL). -// CHECK-REALIDS-NOT: dwoId: 18446744073709551615