xref: /llvm-project/compiler-rt/test/cfi/icall/bad-signature.c (revision 41172a304aecf8733335fe90387df10267ab8136)
1*41172a30SAlexey Samsonov // RUN: %clang -o %t1 %s
26f940873SPeter Collingbourne // RUN: %t1 2>&1 | FileCheck --check-prefix=NCFI %s
36f940873SPeter Collingbourne 
4*41172a30SAlexey Samsonov // RUN: %clang_cfi -o %t2 %s
56f940873SPeter Collingbourne // RUN: %expect_crash %t2 2>&1 | FileCheck --check-prefix=CFI %s
66f940873SPeter Collingbourne 
7*41172a30SAlexey Samsonov // RUN: %clang_cfi_diag -g -o %t3 %s
86f940873SPeter Collingbourne // RUN: %t3 2>&1 | FileCheck --check-prefix=CFI-DIAG %s
96f940873SPeter Collingbourne 
106f940873SPeter Collingbourne #include <stdio.h>
116f940873SPeter Collingbourne 
f()126f940873SPeter Collingbourne void f() {
136f940873SPeter Collingbourne }
146f940873SPeter Collingbourne 
main()156f940873SPeter Collingbourne int main() {
166f940873SPeter Collingbourne   // CFI: 1
176f940873SPeter Collingbourne   // NCFI: 1
186f940873SPeter Collingbourne   fprintf(stderr, "1\n");
196f940873SPeter Collingbourne 
206f940873SPeter Collingbourne   // CFI-DIAG: runtime error: control flow integrity check for type 'void (int)' failed during indirect function call
21*41172a30SAlexey Samsonov   // CFI-DIAG: f defined here
226f940873SPeter Collingbourne   ((void (*)(int))f)(42); // UB here
236f940873SPeter Collingbourne 
246f940873SPeter Collingbourne   // CFI-NOT: 2
256f940873SPeter Collingbourne   // NCFI: 2
266f940873SPeter Collingbourne   fprintf(stderr, "2\n");
276f940873SPeter Collingbourne }
28