mirror of
https://github.com/intel/llvm.git
synced 2026-01-17 14:48:27 +08:00
Revert "[llvm][CFI] Do not canonicalize COFF functions in a comdat (#139962)"
This reverts commit 33684ac9be.
Reverting since this is breaking a bunch of builders. See the llvm-ci
messages on https://github.com/llvm/llvm-project/pull/139962.
This commit is contained in:
@@ -1711,22 +1711,8 @@ void LowerTypeTestsModule::buildBitSetsFromFunctionsNative(
|
||||
F->getValueType(), 0, F->getLinkage(), "", CombinedGlobalElemPtr, &M);
|
||||
FAlias->setVisibility(F->getVisibility());
|
||||
FAlias->takeName(F);
|
||||
if (FAlias->hasName()) {
|
||||
if (FAlias->hasName())
|
||||
F->setName(FAlias->getName() + ".cfi");
|
||||
// For COFF we should also rename the comdat if this function also
|
||||
// happens to be the key function. Even if the comdat name changes, this
|
||||
// should still be fine since comdat and symbol resolution happens
|
||||
// before LTO, so all symbols which would prevail have been selected.
|
||||
if (F->hasComdat() && ObjectFormat == Triple::COFF &&
|
||||
F->getComdat()->getName() == FAlias->getName()) {
|
||||
Comdat *OldComdat = F->getComdat();
|
||||
Comdat *NewComdat = M.getOrInsertComdat(F->getName());
|
||||
for (GlobalObject &GO : M.global_objects()) {
|
||||
if (GO.getComdat() == OldComdat)
|
||||
GO.setComdat(NewComdat);
|
||||
}
|
||||
}
|
||||
}
|
||||
replaceCfiUses(F, FAlias, IsJumpTableCanonical);
|
||||
if (!F->hasLocalLinkage())
|
||||
F->setVisibility(GlobalVariable::HiddenVisibility);
|
||||
|
||||
@@ -1,35 +0,0 @@
|
||||
; RUN: opt -S -passes=lowertypetests %s | FileCheck %s
|
||||
|
||||
;; This is a check to assert we don't crash with:
|
||||
;;
|
||||
;; LLVM ERROR: Associative COMDAT symbol '...' does not exist.
|
||||
;;
|
||||
;; So this just needs to exit normally.
|
||||
; RUN: opt -S -passes=lowertypetests %s | llc -asm-verbose=false
|
||||
|
||||
target datalayout = "e-p:64:64"
|
||||
target triple = "x86_64-pc-windows-msvc"
|
||||
|
||||
@a = global [2 x ptr] [ptr @f1, ptr @f2]
|
||||
|
||||
; CHECK: $f1.cfi = comdat any
|
||||
$f1 = comdat any
|
||||
|
||||
; CHECK: @f1.cfi() comdat !type !0
|
||||
define void @f1() comdat !type !0 {
|
||||
ret void
|
||||
}
|
||||
|
||||
; CHECK: @f2.cfi() comdat($f1.cfi) !type !0
|
||||
define void @f2() comdat($f1) !type !0 {
|
||||
ret void
|
||||
}
|
||||
|
||||
declare i1 @llvm.type.test(ptr %ptr, metadata %bitset) nounwind readnone
|
||||
|
||||
define i1 @foo(ptr %p) {
|
||||
%x = call i1 @llvm.type.test(ptr %p, metadata !"typeid1")
|
||||
ret i1 %x
|
||||
}
|
||||
|
||||
!0 = !{i32 0, !"typeid1"}
|
||||
Reference in New Issue
Block a user