1// { dg-do assemble { target i?86-*-linux* x86_64-*-linux* } }
2// { dg-require-effective-target ilp32 }
3// We'd use ebx with 32-bit pic code, so require nonpic.
4// { dg-require-effective-target nonpic }
5// Origin: "Weidmann, Nicholas" <nicholas.weidmann@swx.ch>
6
7typedef void (function_ptr)(int);
8
9void foo(int)
10{
11}
12
13template<function_ptr ptr> void doit(int i)
14{
15	__asm__("pushl %0\n\t"
16		  "call *%1\n\t"
17		  "popl %0"
18		  :
19		  : "a" (i), "b" (ptr));
20}
21
22void bar()
23{
24	doit<foo>(123);
25}
26