xref: /aosp_15_r20/external/clang/test/CodeGen/indirect-goto.c (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 -triple x86_64-unknown-unknown -O3 -emit-llvm -o - %s | grep "ret i32 2520"
2*67e74705SXin Li 
foo(unsigned i)3*67e74705SXin Li static int foo(unsigned i) {
4*67e74705SXin Li   void *addrs[] = { &&L1, &&L2, &&L3, &&L4, &&L5 };
5*67e74705SXin Li   int res = 1;
6*67e74705SXin Li 
7*67e74705SXin Li   goto *addrs[i];
8*67e74705SXin Li  L5: res *= 11;
9*67e74705SXin Li  L4: res *= 7;
10*67e74705SXin Li  L3: res *= 5;
11*67e74705SXin Li  L2: res *= 3;
12*67e74705SXin Li  L1: res *= 2;
13*67e74705SXin Li   return res;
14*67e74705SXin Li }
15*67e74705SXin Li 
foo2(unsigned i)16*67e74705SXin Li static int foo2(unsigned i) {
17*67e74705SXin Li   static const void *addrs[] = { &&L1, &&L2, &&L3, &&L4, &&L5 };
18*67e74705SXin Li   int res = 1;
19*67e74705SXin Li 
20*67e74705SXin Li   goto *addrs[i];
21*67e74705SXin Li L5: res *= 11;
22*67e74705SXin Li L4: res *= 7;
23*67e74705SXin Li L3: res *= 5;
24*67e74705SXin Li L2: res *= 3;
25*67e74705SXin Li L1: res *= 2;
26*67e74705SXin Li   return res;
27*67e74705SXin Li }
28*67e74705SXin Li 
main()29*67e74705SXin Li int main() {
30*67e74705SXin Li   return foo(3)+foo2(4);
31*67e74705SXin Li }
32