<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/75799>75799</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[AMDGPU] Compiling with -x hip causes a linker error with host only function pointer
</td>
</tr>
<tr>
<th>Labels</th>
<td>
backend:AMDGPU
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
CRobeck
</td>
</tr>
</table>
<pre>
clang++ fptr.cc works successfully
clang++ -x hip fptr.cc fails with the following linker error:
lld: error: undefined hidden symbol: PrintStr::print_1(char const*)
lld: error: undefined hidden symbol: PrintStr::print_2(char const*)
lld: error: undefined hidden symbol: PrintStr::print_3(char const*)
lld: error: undefined hidden symbol: PrintStr::print_4(char const*)
Expected output:
1 . AA
2 . BB
3 . CC
4 . DD
```
#include <cstdio>
class PrintStr
{
public:
enum n_funcs_val { n_funcs=5 } ;
typedef void (PrintStr::*pstr_f_t)( const char* ) ;
static const pstr_f_t pstr_f[n_funcs] ;
PrintStr() {}
~PrintStr() {}
void run() ;
void print_1( char const *str ) ;
void print_2( char const *str ) ;
void print_3( char const *str ) ;
void print_4( char const *str ) ;
} ;
const PrintStr::pstr_f_t (PrintStr::pstr_f)[] = {
&PrintStr::print_1,
&PrintStr::print_2,
&PrintStr::print_3,
&PrintStr::print_4,
0,
} ;
void PrintStr::run()
{
print_1( "AA" ) ;
print_2( "BB" ) ;
print_3( "CC" ) ;
print_4( "DD" ) ;
}
void PrintStr::print_1 ( char const *str )
{
printf ( "1 . %s\n", str ) ;
}
void PrintStr::print_2 ( char const *str )
{
printf ( "2 . %s\n", str ) ;
}
void PrintStr::print_3 ( char const *str )
{
printf ( "3 . %s\n", str ) ;
}
void PrintStr::print_4 ( char const *str )
{
printf ( "4 . %s\n", str ) ;
}
int main(int argc, char *argv[])
{
PrintStr *pstr = new PrintStr ;
pstr->run() ;
delete (pstr) ;
}
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy0Vk1vo0gT_jXFpRQLqsGYAwcwyXt6pdGu9hxB0za9aXcjukkml_3tK75s4sQ7M1FGstqF6qniqQ-qq7RWHrUQKUQ5RIVX9q4xXbr_w1SCP3mVqV9Trkp9BMqBcjy0rttwjvhiuieLtudcWHvolXoFvwA_m861yd13bGR7tjyUUll8ka5B1wg8GKXMi9RHVFI_iQ5F15kOWLZ2p1QNLDursNe1OEgtamxkXQuN9vVUGTWovnVSuz_d6IFl7fD0GADteFN2yI22DigDSr7EMf0ux-x3OQ5vOp7O---t4E7UaHrX9u6qDgFuMJtlwg3m-SQz3OB-P8khbrAo1law9eff9EhMaq76WiCwPbeulgbY_VX7WHvhP2ni-WVtXynJz8wQhe5PqB8Pveb28blUCHG-PAMrIoS4QGD5gnevrajFAZ-NrBFo9zZPQFlrXfd4eHRDbmg3pQqHrAFlCJSsnVlXOslnzGI4CxDlC41oxWAxPb-XdqPTOIe4WJT__Id2wYwBdL1eIBdWo-bS_HgpOQJl1nXXYawM6FcN2K8ahD9h8KZmb3pjNLnq7SXv76o5F4KSab4hsALPnYQItL0xMPY_gNAFcgPBfuwkXEH8s3wz9OkcE_nW27kHrj4VXPcAEGUZEF0VZlV0IMrz94h1mYFov78JCWdIUbyDXDXvB0HMVPFmc3wc3AHnlw7DCSiyEO010FAf_Kirfiqhc1I-zYW-nAv7NBf25VzCT3MJP8tlOqV2eCrl0OyDWHZHPrgYmQBlZXd8nr7zj5gskeA84cdZoMXLSnE9oQfYHbD7j2ZsLZRwYghsQN2IYLn5vDpldcKS0hNpEPuU-EmQ7Lwm9f2qjvy4inlJpR9vt0FZ86ROkiBKWCBCT6bkEwso2AVhkEThptqGYRTGvE78IN4GFYS-OJVSbZR6Pm1Md_Sktb1I4yhOEk-VlVB23O6IqpI_CT3sD9n_i_99-2uoQFR4XTqY3lX90ULoK2mdvThz0qlxO5xNogL35tRKNaxs4xY373e87K2wWL7Z4yZEY6xDo9UrDpehk0Zja6R2ovP6TqWNc60db94HoIejdE1fbbg5AT0MNOa_u7YzfwvugB7GAC3QwxjjvwEAAP__0ysMFQ">