<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/99636>99636</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Clang generates superfluous landing pad
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
halayli
</td>
</tr>
</table>
<pre>
Clang treats `::close()` syscall as potentially throwing and injects a superfuous landing pad unnecessarily bloating the output. Here's an example that demonstrates this behavior and a comparison against gcc's output:
https://godbolt.org/z/ExG4MzY8q
Additional info I gathered:
The syscall in unistd.h from my ubuntu box is declared as such:
```
#ifdef __cplusplus
# define __BEGIN_DECLS extern "C" {
# define __END_DECLS }
#else
# define __BEGIN_DECLS
# define __END_DECLS
#endif
__BEGIN_DECLS
...
/* Close the file descriptor FD.
This function is a cancellation point and therefore not marked with
__THROW. */
extern int close (int __fd);
...
__END_DECLS
```
The lack of `__THROW` (defined as `noexcept(true)`) is used to communicate that the thread can be cancelled.
I believe the main descripency between clang and gcc here is that gcc treats the function declarations wrapped in `extern "C" {} ` as noexcept(true) by default(rightfully so) and clang does not.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJx8VN9v4zYM_muUF-KMRM4vP_ihbZq7AtsN2AoMewpoiba1kyVPotrm_vpBdtrr9YoCiYKQ1CfyI_lhjKZzRLXYXIvNYYGJex_qHi2erVk0Xp_rG4uuAw6EHEFsl6K8EuWVsj6SkHshK7FdQjxHhdYCRhg9k2OD1p6B--AfjesAnQbj_iXFERBiGim0yacIFp3OASNqSM6RohgxGHuGxnrk7OKewCceExfwhQIJuYuADugJh9EScI8MmgbvIgdkisC9idBQjw_Gh-ltBOWHEYOJ3gF2aFxk6JSasGbwXNfyIJaXs2ceY7bJo5DHzuvGWy586IQ8fhfyePv0ef3793_2_72-dKW1YeMdWjCu9XAHHXJPgfQb9PueXjgzDpIzkXXRQxv8AMMZUpMcJ2j8E5gImpTFQDrTG5Pq34Dlpsyf10ZZmlZTC3A6qdGmmL8vLtDUGkdwOl3ffr77ejrc3vz2FwA9MQUHQsobISWI3fU7N26_Hp7jAcTu8BJCNtLHL3yE9gPGadO-LuU9iOksiuLnko9CXsFNHs1palpjCTRFFczIPsDx8FM8ANznSWmTU7lrmWoEhU6RtThZRm8cTxM0tbH1gcB5hgHDN9LwaLh_wTqd7r_8-cffBYCQUy6T40Jphpl2BoTc5z-nU6vz8pTXH1T0Kz3vtvrNYFlU38C3eVkvOeUVFXI_kz6NkdgunacnRSMLueeQaN5kIatMQ4qkgX3emiE5o5Ave5Zp5T4Q6kwUNPTMF-kCXidyBw1ZQw9zJwY07rkT5NQZGuJHIgdqUpdMcKcUZI7z89NT2XCRnamZz12at2HqT4THgONIWVxySe_M7-6QHbnkX-uF5pwHEZPNxmC6ntuUdSv67M1ZzflpT_k-Fwtdl7oqK1xQvdrJVbnf78vtoq83m-W-bLGqWmq2tKLtWqHKzmaDuqFyYWq5lOvlblWtVmW5WRcr2qOsSG9ovVs11UaslzSgsYW1D0MWmoWJMVFdVdtyu7DYkI2TTks5JSWkzJId6hz_qUldFOulNZHjDwQ2bOmi4B05muVxll_7Vn8XKdj6jewZ7lNTKD8Iecyol59PY_BZzIU8TklGIY9zng-1_D8AAP__Gyb7sQ">