xref: /aosp_15_r20/external/compiler-rt/test/cfi/icall/external-call.c (revision 7c3d14c8b49c529e04be81a3ce6f5cc23712e4c6)
1*7c3d14c8STreehugger Robot // RUN: %clang_cfi -lm -o %t1 %s
2*7c3d14c8STreehugger Robot // RUN: %t1 c 1 2>&1 | FileCheck --check-prefix=CFI %s
3*7c3d14c8STreehugger Robot // RUN: %t1 s 2 2>&1 | FileCheck --check-prefix=CFI %s
4*7c3d14c8STreehugger Robot 
5*7c3d14c8STreehugger Robot // This test uses jump tables containing PC-relative references to external
6*7c3d14c8STreehugger Robot // symbols, which the Mach-O object writer does not currently support.
7*7c3d14c8STreehugger Robot // XFAIL: darwin
8*7c3d14c8STreehugger Robot 
9*7c3d14c8STreehugger Robot #include <stdlib.h>
10*7c3d14c8STreehugger Robot #include <stdio.h>
11*7c3d14c8STreehugger Robot #include <math.h>
12*7c3d14c8STreehugger Robot 
main(int argc,char ** argv)13*7c3d14c8STreehugger Robot int main(int argc, char **argv) {
14*7c3d14c8STreehugger Robot   // CFI: 1
15*7c3d14c8STreehugger Robot   fprintf(stderr, "1\n");
16*7c3d14c8STreehugger Robot 
17*7c3d14c8STreehugger Robot   double (*fn)(double);
18*7c3d14c8STreehugger Robot   if (argv[1][0] == 's')
19*7c3d14c8STreehugger Robot     fn = sin;
20*7c3d14c8STreehugger Robot   else
21*7c3d14c8STreehugger Robot     fn = cos;
22*7c3d14c8STreehugger Robot 
23*7c3d14c8STreehugger Robot   fn(atof(argv[2]));
24*7c3d14c8STreehugger Robot 
25*7c3d14c8STreehugger Robot   // CFI: 2
26*7c3d14c8STreehugger Robot   fprintf(stderr, "2\n");
27*7c3d14c8STreehugger Robot }
28