mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 20:51:52 +01:00
ee147512c6
When DataFlowSanitizer transforms a call to a custom function, the new call has extra parameters. The attributes on parameters must be updated to take the new position of each parameter into account. Patch by Sam Kerner! Differential Revision: https://reviews.llvm.org/D43132 llvm-svn: 325820
38 lines
1.4 KiB
LLVM
38 lines
1.4 KiB
LLVM
; RUN: opt < %s -dfsan -dfsan-args-abi -dfsan-abilist=%S/Inputs/abilist.txt -S | FileCheck %s
|
|
; RUN: opt < %s -dfsan -dfsan-abilist=%S/Inputs/abilist.txt -S | FileCheck %s
|
|
|
|
target triple = "x86_64-unknown-linux-gnu"
|
|
|
|
; Declare custom functions. Inputs/abilist.txt causes any function with a
|
|
; name matching /custom.*/ to be a custom function.
|
|
declare i32 @custom_fun_one_callback(i8 (i32, double)* %callback_arg)
|
|
declare i32 @custom_fun_two_callbacks(
|
|
i8 (i32, double)* %callback_arg1,
|
|
i64 %an_int,
|
|
i8 (i32, double)* %callback_arg2
|
|
)
|
|
|
|
declare i8 @a_callback_fun(i32, double)
|
|
|
|
; CHECK-LABEL: @"dfs$call_custom_funs_with_callbacks"
|
|
define void @call_custom_funs_with_callbacks(i8 (i32, double)* %callback_arg) {
|
|
;; The callback should have attribute 'nonnull':
|
|
; CHECK: call signext i32 @__dfsw_custom_fun_one_callback(
|
|
; CHECK: nonnull @"dfst0$custom_fun_one_callback"
|
|
%call1 = call signext i32 @custom_fun_one_callback(
|
|
i8 (i32, double)* nonnull @a_callback_fun
|
|
)
|
|
|
|
;; Call a custom function with two callbacks. Check their annotations.
|
|
; CHECK: call i32 @__dfsw_custom_fun_two_callbacks(
|
|
; CHECK: nonnull @"dfst0$custom_fun_two_callbacks"
|
|
; CHECK: i64 12345
|
|
; CHECK: noalias @"dfst2$custom_fun_two_callbacks"
|
|
%call2 = call i32 @custom_fun_two_callbacks(
|
|
i8 (i32, double)* nonnull @a_callback_fun,
|
|
i64 12345,
|
|
i8 (i32, double)* noalias @a_callback_fun
|
|
)
|
|
ret void
|
|
}
|