19627bcdeSAlexandros Lamprineas; RUN: opt -passes="ipsccp<func-spec>" -force-specialization -S < %s | FileCheck %s
28b360c69SBin Cheng
38b360c69SBin Cheng; Check that we don't crash and specialise on a function call with byval attribute.
48b360c69SBin Cheng
5*e15d72adSAlexandros Lamprineas; CHECK-NOT: wombat.specialized.{{[0-9]+}}
68b360c69SBin Cheng
7ebdf5aefSMatt Arsenaultdeclare ptr @quux()
8ebdf5aefSMatt Arsenaultdeclare ptr @eggs()
98b360c69SBin Cheng
108b360c69SBin Chengdefine i32 @main() {
118b360c69SBin Cheng; CHECK:       bb:
12ebdf5aefSMatt Arsenault; CHECK-NEXT:    tail call void @wombat(ptr undef, i64 undef, i64 undef, ptr byval(i32) @quux)
13ebdf5aefSMatt Arsenault; CHECK-NEXT:    tail call void @wombat(ptr undef, i64 undef, i64 undef, ptr byval(i32) @eggs)
148b360c69SBin Cheng; CHECK-NEXT:    ret i32 undef
158b360c69SBin Cheng;
168b360c69SBin Chengbb:
17ebdf5aefSMatt Arsenault  tail call void @wombat(ptr undef, i64 undef, i64 undef, ptr byval(i32) @quux)
18ebdf5aefSMatt Arsenault  tail call void @wombat(ptr undef, i64 undef, i64 undef, ptr byval(i32) @eggs)
198b360c69SBin Cheng  ret i32 undef
208b360c69SBin Cheng}
218b360c69SBin Cheng
22ebdf5aefSMatt Arsenaultdefine internal void @wombat(ptr %arg, i64 %arg1, i64 %arg2, ptr byval(i32) %func) {
238b360c69SBin Cheng; CHECK:       bb2:
24ebdf5aefSMatt Arsenault; CHECK-NEXT:    [[TMP:%.*]] = tail call ptr %func(ptr undef, ptr undef)
258b360c69SBin Cheng; CHECK-NEXT:    ret void
268b360c69SBin Cheng;
278b360c69SBin Chengbb2:
28ebdf5aefSMatt Arsenault  %tmp = tail call ptr %func(ptr undef, ptr undef)
298b360c69SBin Cheng  ret void
308b360c69SBin Cheng}
31