diff --git a/lib/Transforms/Instrumentation/DataFlowSanitizer.cpp b/lib/Transforms/Instrumentation/DataFlowSanitizer.cpp index 3e11efc0e30..9f5e0bb844d 100644 --- a/lib/Transforms/Instrumentation/DataFlowSanitizer.cpp +++ b/lib/Transforms/Instrumentation/DataFlowSanitizer.cpp @@ -476,7 +476,7 @@ DataFlowSanitizer::WrapperKind DataFlowSanitizer::getWrapperKind(Function *F) { return WK_Functional; if (ABIList.isIn(*F, "discard")) return WK_Discard; - if (ABIList.isIn(*F, "custom")) + if (ABIList.isIn(*F, "custom") && !F->isVarArg()) return WK_Custom; return WK_Warning; diff --git a/test/Instrumentation/DataFlowSanitizer/abilist.ll b/test/Instrumentation/DataFlowSanitizer/abilist.ll index 66ddc140a08..53b7d86dbda 100644 --- a/test/Instrumentation/DataFlowSanitizer/abilist.ll +++ b/test/Instrumentation/DataFlowSanitizer/abilist.ll @@ -16,6 +16,8 @@ declare void @custom1(i32 %a, i32 %b) declare i32 @custom2(i32 %a, i32 %b) +declare void @custom3(...) + declare void @customcb(i32 (i32)* %cb) declare i32 @cb(i32) @@ -33,6 +35,10 @@ define void @f() { ; CHECK: call void @__dfsw_customcb({{.*}} @"dfst0$customcb", i8* bitcast ({{.*}} @"dfs$cb" to i8*), i16 0) call void @customcb(i32 (i32)* @cb) + ; CHECK: call void @__dfsan_unimplemented + ; CHECK: call void (...)* @custom3() + call void (...)* @custom3() + ret void }