blob: 657fa3bb2eb27279c6f847606294526297032288 [file] [log] [blame]
// RUN: %target-sil-opt -enable-sil-verify-all %s -caller-analysis-printer -o /dev/null | FileCheck --check-prefix=CHECK %s
// CHECK: Function dead_func has caller: false
// CHECK: Function call_top has caller: false
// CHECK: Function call_middle has caller: true
// CHECK: Function call_bottom has caller: true
// CHECK: Function self_recursive_func has caller: true
// CHECK: Function mutual_recursive_func1 has caller: true
// CHECK: Function mutual_recursive_func2 has caller: true
// CHECK: Function multi_called has caller: true
// CHECK: Function multi_calles has caller: false
// CHECK: Function multi_callers has caller: true
// CHECK: Function multi_caller1 has caller: false
// CHECK: Function multi_caller2 has caller: false
sil_stage canonical
import Builtin
sil hidden @dead_func : $@convention(thin) () -> () {
%2 = tuple ()
return %2 : $()
}
sil hidden @call_top : $@convention(thin) () -> () {
bb0:
%0 = function_ref @call_middle : $@convention(thin) () -> ()
%1 = apply %0() : $@convention(thin) () -> ()
%2 = tuple ()
return %2 : $()
}
sil hidden @call_middle : $@convention(thin) () -> () {
bb0:
%0 = function_ref @call_bottom : $@convention(thin) () -> ()
%1 = apply %0() : $@convention(thin) () -> ()
%2 = tuple ()
return %2 : $()
}
sil hidden @call_bottom : $@convention(thin) () -> () {
bb0:
%0 = tuple ()
return %0 : $()
}
sil hidden @self_recursive_func : $@convention(thin) () -> () {
bb0:
%0 = function_ref @self_recursive_func : $@convention(thin) () -> ()
%1 = apply %0() : $@convention(thin) () -> ()
%2 = tuple ()
return %2 : $()
}
sil hidden @mutual_recursive_func1 : $@convention(thin) () -> () {
bb0:
%0 = function_ref @mutual_recursive_func2 : $@convention(thin) () -> ()
%1 = apply %0() : $@convention(thin) () -> ()
%2 = tuple ()
return %2 : $()
}
sil hidden @mutual_recursive_func2 : $@convention(thin) () -> () {
bb0:
%0 = function_ref @mutual_recursive_func1 : $@convention(thin) () -> ()
%1 = apply %0() : $@convention(thin) () -> ()
%2 = tuple ()
return %2 : $()
}
sil hidden @multi_called : $@convention(thin) () -> () {
bb0:
%2 = tuple ()
return %2 : $()
}
sil hidden @multi_calles : $@convention(thin) () -> () {
bb0:
%0 = function_ref @multi_called : $@convention(thin) () -> ()
%1 = apply %0() : $@convention(thin) () -> ()
cond_br undef, bb1, bb2
bb1:
%2 = apply %0() : $@convention(thin) () -> ()
br bb3
bb2:
%3 = apply %0() : $@convention(thin) () -> ()
br bb3
bb3:
%4 = tuple ()
return %4 : $()
}
sil hidden @multi_callers : $@convention(thin) () -> () {
bb0:
%2 = tuple ()
return %2 : $()
}
sil hidden @multi_caller1 : $@convention(thin) () -> () {
bb0:
%0 = function_ref @multi_callers : $@convention(thin) () -> ()
%1 = apply %0() : $@convention(thin) () -> ()
%2 = tuple ()
return %2 : $()
}
sil hidden @multi_caller2 : $@convention(thin) () -> () {
bb0:
%0 = function_ref @multi_callers : $@convention(thin) () -> ()
%1 = apply %0() : $@convention(thin) () -> ()
%2 = tuple ()
return %2 : $()
}