summaryrefslogtreecommitdiff
path: root/lib/Transforms/IPO
diff options
context:
space:
mode:
authorDavide Italiano <davide@freebsd.org>2017-11-07 00:09:25 +0000
committerDavide Italiano <davide@freebsd.org>2017-11-07 00:09:25 +0000
commit964a48a5b6b8f8b3ca36dc4f769ba64d0a56aa57 (patch)
treef96450ec91bb6bc3409d2956272274d7506f7b44 /lib/Transforms/IPO
parentdb6cc311a07af889030d847ff2b4f1dc00db4ec6 (diff)
[IPO/LowerTypesTest] Skip blockaddress(es) when replacing uses.
Blockaddresses refer to the function itself, therefore replacing them would cause an assertion in doRAUW. Fixes https://bugs.llvm.org/show_bug.cgi?id=35201 This was found when trying CFI on a proprietary kernel by Dmitry Mikulin. Differential Revision: https://reviews.llvm.org/D39695 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@317527 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms/IPO')
-rw-r--r--lib/Transforms/IPO/LowerTypeTests.cpp2
1 files changed, 1 insertions, 1 deletions
diff --git a/lib/Transforms/IPO/LowerTypeTests.cpp b/lib/Transforms/IPO/LowerTypeTests.cpp
index 9fa5ed9ab2b..6cef866b7b8 100644
--- a/lib/Transforms/IPO/LowerTypeTests.cpp
+++ b/lib/Transforms/IPO/LowerTypeTests.cpp
@@ -1401,7 +1401,7 @@ void LowerTypeTestsModule::buildBitSetsFromFunctionsNative(
FAlias->takeName(F);
if (FAlias->hasName())
F->setName(FAlias->getName() + ".cfi");
- F->replaceAllUsesWith(FAlias);
+ F->replaceUsesExceptBlockAddr(FAlias);
}
if (!F->isDeclarationForLinker())
F->setLinkage(GlobalValue::InternalLinkage);