<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/115521>115521</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Incorrect mangling of __bf16 in template parameter with nested namespaces.
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
SagarMaheshwari99
</td>
</tr>
</table>
<pre>
```
namespace NS1 {
namespace NS2 {
struct NS2_struct1 {};
}
template<typename tpVal, typename tpVal1>
class Class1 {};
template<typename tpVal>
using Name1 = Class1<tpVal, NS2::NS2_struct1>;
}
template <typename dtype>
void MyFunc(NS1::Name1<dtype>& input) {}
typedef __bf16 bfloat16;
struct bf16_struct {
short a;
};
int main() {
NS1::Class1<bfloat16, NS1::NS2::NS2_struct1> input;
MyFunc<bfloat16>(input);
NS1::Class1<bf16_struct, NS1::NS2::NS2_struct1> input1;
MyFunc<bf16_struct>(input1);
return 0;
}
```
For __bf16 case the mangling comes out to be -
`_Z6MyFuncIu6__bf16EvRN3NS16Class1IT_NS0_3NS211NS2_struct1EEE`
which demangled comes out to be -
`void MyFunc<__bf16>(NS1::Class1<__bf16, __bf16::NS2::NS2_struct1>&)`
which is incorrect, as __bf16 is treated as a namespace here.
For bf16_struct, right mangling is produced -
`_Z6MyFuncI11bf16_structEvRN3NS16Class1IT_NS1_3NS211NS2_struct1EEE`
and the demangling comes out to be -
`void MyFunc<bf16_struct>(NS1::Class1<bf16_struct, NS1::NS2::NS2_struct1>&)`
https://godbolt.org/z/dTWxYbqhM
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJykVU1vqzgU_TVmc9UIGxrIgkVfGqQumsXkaUYzm8jGN8EjwIxt2un8-pHDR0iKqkqvqhwCvuece-4J5taqc4OYkccf5PE54J0rtckO_MzNKy_Rlu_cqM0mEFp-ZGQdDv_hMwmfGl6jbXmBsD9QIMmP_na_AgDMN7DrBhj-rDNd4fyzY3_ZgyTPJJrt9N_vcB3WbcUdkmjrPlr0NODa33lF2BZu71AS7a6FRcWtha1fP3F9B36O1VnVnGHPa6RAoucB1deMSvYHRqInEj3NOvQQE-NtZyMtzHmlv5p437SS8PqRd01BWLo_0AHfiyDRdtrM1qCatnOEbcY250QfLUo8wfEoTnQN4lRp7uj6zolhOn7LIP52grbUxgG_6eYWQTUOaq4awtJRyFQ9aZ9sm2RcnKOTc0sWDt1NMRksmYF4E9LRg4UZL_FPjX5fAr2J6kzGFeuqhC5IMeg600C4EIrbH1u_5tqMYyu4RXAlQs2bc-WzWOgaLejOgdMgEB4moONf617bS7fuy3dvv-2j_YGu-_5ffh73h_AY7Q-M0lmju93uTsF7qYoSJF5YUX5BOg9rtO1pezc-mz88ZVsY931hPWFr7-SSLmVBNYU2BvspcjvapSw4g9yh9Df57N1UosHVHOpq9V0mjDqX7uq3stAaLbsC5aLXlM7qlwyn3zGcN_Iy5sHyrwd96_mnGP5y6hetn6-lc631lSwnLD9rKXTlVtqcCcv_IyyXP__490_xT_n6uTSQWSQ30YYHmNEkomGaxCwMyqyIRcoSyUW6oaKIYxo_hhGjAk_x6SS4CFTGQhZTGqY0iZIwXIlYijQpkjQMqcQ0IXGINVfVqqreaq8mUNZ2mFH6-MhoUHGBlb2cgYw1-A6Xp4QxfySazBc9iO5sSRxWyjp7hXHKVZi9jJG7ZkNPr1fVTAcKtNzwGh0aeFeuhAatz-MURbsKOlNldx4qV3ZiVeiasNwTDx8PrdF_X2KeX-RawvKhn7eM_R8AAP__ihVJoA">