<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/62765>62765</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Different mangled name for template specialization for clang and gcc
</td>
</tr>
<tr>
<th>Labels</th>
<td>
ABI
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
ChuanqiXu9
</td>
</tr>
</table>
<pre>
Reproducer:
```
#include <type_traits>
namespace llvm {
class StringRef {
public:
StringRef(const char*);
};
template <typename T> class Optional {};
}
namespace n {
struct S {
template <class T>
std::enable_if_t<std::is_integral<T>::value, llvm::Optional<T>>
get(llvm::StringRef) const {
return {};
}
};
template <>
llvm::Optional<bool>
S::get<bool>(llvm::StringRef) const;
}
void use() {
n::S().get<bool>("hello");
}
```
For the specialization `S::get<bool>(llvm::StringRef)`, gcc will mangle it as:
```
_ZNK1n1S3getIbEENSt9enable_ifIXsrSt11is_integralIT_E5valueEN4llvm8OptionalIS4_EEE4typeENS6_9StringRefE
```
and clang will mangle it as:
```
_ZNK1n1S3getIbEENSt9enable_ifIXsr3std11is_integralIT_EE5valueEN4llvm8OptionalIS3_EEE4typeENS4_9StringRefE
```
Also the c++filt can only recognize the name mangled by gcc. And the llvm-cxxfilt can only recognize the name mangled by clang.
So I am not sure if this is bug really or this is by design. But I think clang and gcc are trying to make ABI compatible.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJysld-P4jYQx_8a52V0KLGTLDzkgR9BQpW20rEPp74gxxmCe8ZObWd73F9f2UDIbu9WPakRCmRmbH_mOzOBOyc7jViRYkWKTcIHfzK2Wp8Grv-SX4ZF0pj2Un3G3pp2EGgJW5J0Q9L7vUxvn-sjZVILNbQIhK39pceDt1x6R1g9Xab5GV3PBYJSr2cgT6urHQBAKO4c7L2VuvuMx4mzHxolxUgAt2sMJXQujHYexIlbQpeELghbTc8N4eRpM1rDs8dzr7gfiQMbvBBW30h-7700mqsIMlkbfv8wJf1Adt4OwsN-ksT0uOsBL6M4Acf5NmTIlqh5o_AgjwdP2Ho0S3eQ2mNnuSJsHddG-ytXAxK6jopeTXfyMW5yTIee0PkjdiLiAq4qvqlKuCz6wer3Otw1HUV5K_k035Hgh4yNMWqM2F_dAfPh-Rj4Z5V5NbKFwSGh8xD7SEvfdro6Zu_PIpSeUClDKH3TSePu73o_3rfGgj8huB6F5Ep-5yE_IGX6SxmFXekaOiHgb6kUnLnuFIL0wN3HI3j44_m3TGd71qHfNXX9vPeLsZV2X5zd-yybNNHu5VAXsXnq5zzAzO8l2e3zQ13XeRiK-nlfHhYjYf2BAly3YXJ097-TM-fbf7H_FJ5N4fP_CL9UzsT6CUJXhK6OUnkQXIPR6gIWhem0_I4xJL4orum10FxCsWaw1G10BphP4tu3X9kgqjab4uwN7ICfQRsPbrAI8gj-JB1IB83QgUWu1AViz92sF2gxvNNnsBo87IJDf70VJJQmtBS3CN5epO7AGzjzrwjL1Q6EOffcy0bhLGkr1i7YgidYZeU8ZxkrijI5VWXePBVNkTZ5KSgrKWtxPl-IoqFMlBmmiaxoSllaZE_pvKCsnLUNLjJBy4zPszbHjOQpnrlUsyDRzNgukc4NWJX0qSwSxRtULv4dUbpc7cLwFZvEVlHQZugcyVMlnXeP9V56hdVGHo9oUftR0qjvMYhzfwe9m8rge6NMMlhVnbzvY6vSLaHbTvrT0MyEORO6jcN6_frUW_MnCk_oNvI7QrcxhX8CAAD__8TZMiM">