From 706cbb3337802b0e8e42df1dea937d4f4797ec68 Mon Sep 17 00:00:00 2001 From: Peter Collingbourne Date: Thu, 10 Jul 2014 01:30:39 +0000 Subject: [PATCH] [dfsan] Handle bitcast aliases. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212668 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Transforms/Instrumentation/DataFlowSanitizer.cpp | 4 ++-- test/Instrumentation/DataFlowSanitizer/prefix-rename.ll | 8 ++++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/lib/Transforms/Instrumentation/DataFlowSanitizer.cpp b/lib/Transforms/Instrumentation/DataFlowSanitizer.cpp index 3b9212a14e6..799e14bdac3 100644 --- a/lib/Transforms/Instrumentation/DataFlowSanitizer.cpp +++ b/lib/Transforms/Instrumentation/DataFlowSanitizer.cpp @@ -602,7 +602,7 @@ bool DataFlowSanitizer::runOnModule(Module &M) { ++i; // Don't stop on weak. We assume people aren't playing games with the // instrumentedness of overridden weak aliases. - if (Function *F = dyn_cast(GA->getAliasee())) { + if (auto F = dyn_cast(GA->getBaseObject())) { bool GAInst = isInstrumented(GA), FInst = isInstrumented(F); if (GAInst && FInst) { addGlobalNamePrefix(GA); @@ -612,7 +612,7 @@ bool DataFlowSanitizer::runOnModule(Module &M) { // below will take care of instrumenting it. Function *NewF = buildWrapperFunction(F, "", GA->getLinkage(), F->getFunctionType()); - GA->replaceAllUsesWith(NewF); + GA->replaceAllUsesWith(ConstantExpr::getBitCast(NewF, GA->getType())); NewF->takeName(GA); GA->eraseFromParent(); FnsToInstrument.push_back(NewF); diff --git a/test/Instrumentation/DataFlowSanitizer/prefix-rename.ll b/test/Instrumentation/DataFlowSanitizer/prefix-rename.ll index 1a5646074d2..f3c36b17b38 100644 --- a/test/Instrumentation/DataFlowSanitizer/prefix-rename.ll +++ b/test/Instrumentation/DataFlowSanitizer/prefix-rename.ll @@ -8,7 +8,15 @@ module asm ".symver f1,f@@version1" ; CHECK: @"dfs$f2" = alias {{.*}} @"dfs$f1" @f2 = alias void ()* @f1 +; CHECK: @"dfs$g2" = alias {{.*}} @"dfs$g1" +@g2 = alias bitcast (void (i8*)* @g1 to void (i16*)*) + ; CHECK: define void @"dfs$f1" define void @f1() { ret void } + +; CHECK: define void @"dfs$g1" +define void @g1(i8*) { + ret void +} -- 2.34.1