1 // Contributed by Alexandre Oliva <aoliva@redhat.com>
2 // From Red Hat case 106165.
3 
4 /* { dg-require-effective-target indirect_calls } */
5 
6 typedef unsigned short (FUNC_P) (void *, unsigned char *, unsigned short);
7 
crashIt(int id,FUNC_P * func,unsigned char * funcparm)8 void crashIt(int id, FUNC_P *func, unsigned char *funcparm)
9 {
10   unsigned char buff[5], reverse[4];
11   unsigned char *bp = buff;
12   unsigned char *rp = reverse;
13   unsigned short int count = 0;
14   unsigned short cnt;
15   while (id > 0)
16     {
17       *rp++ = (unsigned char) (id & 0x7F);
18       id >>= 7;
19       count++;
20     }
21   cnt = count + 1;
22   while ((count--) > 1)
23     {
24       *bp++ = (unsigned char)(*(--rp) | 0x80);
25     }
26   *bp++ = *(--rp);
27   (void)(*func)(funcparm, buff, cnt);
28 }
29