Commit f39430bd authored by Peter Collingbourne's avatar Peter Collingbourne
Browse files

[dfsan] Treat vararg custom functions like unimplemented functions.

Because declarations of these functions can appear in places like autoconf
checks, they have to be handled somehow, even though we do not support
vararg custom functions. We do so by printing a warning and calling the
uninstrumented function, as we do for unimplemented functions.

llvm-svn: 216042
parent de23726d
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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;
+6 −0
Original line number Diff line number Diff line
@@ -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
}