<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/137282>137282</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[clang enhancement] improve -Wreturn-type-c-linkage warning message
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
illusory0x0
</td>
</tr>
</table>
<pre>
When I write the code below, clang report warning, but `struct Foo` is complete type. the Foo<int> doesn't instantiate template. We can instantiate this type in C++ linkage scope, then Most of complier can complies successfully.
### Expected Behavior
add more usefull infomation help user to solve.
```
try to instantiate template in C++ linkage, if this excectly not incomplete type.
```
### Actual Behavior
```
<source>:14:14: warning: 'foo' has C-linkage specified, but returns incomplete type 'Foo<int>' which could be incompatible with C [-Wreturn-type-c-linkage]
```
```C++
template<typename T>
struct Foo {
T* ptr;
};
void force_instantiate_template() {
// Foo<int> x;
// If uncooment the line above, clang woundn't report warning.
// and MSVC will complie successfully.
}
extern "C" {
Foo<int> foo() {
return { .ptr = nullptr } ;
}
void bar(Foo<int>) {
}
}
```
[godbolt](https://godbolt.org/z/e54Gb61Kx)
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJx0VE2P4jgQ_TXFpQRKHELgkAMfzWq0mtOOto8jx6kQ7zp25A8-9tevnIRuYHqQgcQuv6r3_MrcOXnSRCXkO8gPMx58a2wplQrO2FtyTWaVqW_le0sav-HFSk_oW0JhasKKlLkA26NQXJ_QUm-sxwu3WupTnK-CR1glztsgPB6NgVWC0qEwXa8oQt16WgyAcTHbS-0he8PakNPACo9SO8-1lzwGU9cr7mmB74SC6-fFVroBDqXGPbAdsB0qqf_lJ0InTE-xIB95fDfOo2nGKiTZAWt6ceiCEORcE5S6LSDZToNl48C3a0_CU407avlZGjsG8LrGzljC4CjuRakb03EvjcaWVB_nLXqDzqgzPQCvkmkkW29vMeIrzl-winxkMxKnqyDh1Q21iZo96_uS5YnNVvjA1QuXp-hs70ywgiB7g2ybLu8_H-ecbRFY0RgDrMCWO9zPP3TvSchGUn03gyUfrHavJUaARwNEpEsrRYvCBFVjRdMO7mWlCC_St7hHyHfz9xFyHmHm4p4Z8sMXrH_RfFI0Sj_pDNk-ImneEf6IlSTbT_ciFDEWEfEHsC323kIWZ6A4TA_DOBtZY2OsoJ8PZ_nzIwdbA9s8gAE7Ajs-t8B1BHxY_tZg0MKYjrQfWkZJTcgrc6bPHryYoOuxdZ7bcfEMxnWN3__6e48XqdTd_L96vziMjOjqyWoExvbA2L30p4IHA7wQi5_xfOIkLnpvEbID6qDU8Fwc8IHnPVt8GTSsuAW2fnbGHT_GTTuK3x92vjuZujLKR0ewdet97yDbjipMSwtjT8CO_wE7Ur78o1qlf16BbWZ1mdWbbMNnVKbFMs_zrEjTWVsm6XLDWVOs86qhjHja5DnbEE_TPCnEks1kyRKWJ8v4TdI8XdRZXqVFwvKmZlmzSmGZUMelWih17mL6mXQuUJlmBVuzmeIVKTfcyYwN5wqMxevZlnHDvAonB8tESefdJ4SXXg0X-egE0i3XgqJbID-g7HprzoS_aZi7TbAj5_iJZsGq8kUt6dtQLYTpgB1j1ulv3lvzDwkP7DiwcMCOE5Fzyf4PAAD__wNv9rQ">