<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/68686>68686</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[[clang::always_destroy]] attribute while emitting exit-time-destructors diagnostic
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
ycdtosa
</td>
</tr>
</table>
<pre>
Compiling this code with the [-Wexit-time-desctuctors](https://clang.llvm.org/docs/DiagnosticsReference.html#wexit-time-destructors) diagnostic enabled will raise the warning, for good reason.
```
static Foo ResourceHandler;
```
here is the output
```
[build] /somefile.cpp:X:14: warning: declaration requires an exit-time destructor [-Wexit-time-destructors]
[build] static Foo ResourceHandler;
[build] ^
```
However, being happy with the destructor call on exit time, not only do I want to silence the warning but to flag the variable accordingly. For that I [add the [[clang::always_destroy]] attribute](https://clang.llvm.org/docs/AttributeReference.html#always-destroy) to the static variable.
```
[[clang::always_destroy]]
static Foo ResourceHandler;
```
This is meant to tell the compiler that I am aware of the exit time destructor and willing to pay the price, and properly release the resource.
The [[always_destroy]] attibute documentation states that it
> specifies that a variable with static or thread storage duration should have its exit-time destructor run. This attribute is the default unless clang was invoked with -fno-c++-static-destructors.
I believe this is explicit enough to prevent the compiler to emit the diagnostic for that variable, but it is not the case.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJykVV2v4jYT_jXmZkQUHMLCBRewLNpzu3qlt3fVxJ4kbh079QeUf1_ZCRzQnm63KkJBJPb4medjgt6rzhDtWX1k9WmBMfTW7W9CButx0Vh523-2w6i0Mh2EXnkQVhJcVegh9ASsPi7_T3-qsAxqoKUkL0IUwTrP6hPj2z6E0bPqwPiZ8bPQaLpC68tQWNcxfpZWeMbPJ4WdsT4o4b9RS46MoKIPg2a8ur5UD26uzncgH7uADDaaJFyV1uBQecroruiMMh3jn6G1DjprJThCb03ByhMrD_N1U87f_NcHTDXP1sI38jY6QV_RSE2OVccPd0zXnhyB8vlkG8MYww8OYfWxiUpLVp-A8bO3A7VKUyHGkVWHX1h1WK1ZdXi0UB1AktDoMChrwNEfUTnygAYeBME7QR8I86CuPn0P4Wd6flr-8mH1lw9b_GqvdCGX2G8o-afHcby9e-cJrUCtwU6tQAKcNhkbwBp9A2nhDa5oAgQLXulkj2d9oYn5Uauxy_cv6FQyBKAQ1kllOn0rAM7WQegxwFuiB6W8W5jVx2zNZNTqgPqKN_9rhmdvia76BBiCU00M9G98fbhv-s7V0xnL-xl8l_AnNLMQ9w4K-LGH_hn5f_P0_1LklYeBZvoDaZ2BijwW6MEoDoBXdAS2zc8fUj7rjGbKaJ4mFka85bWjUyJLnp6Pzo7k9A0cacI5yW4GXbyCu6v3d5Jl8kFaEQcyYYpOooL8BFu9RrT6An4koVp1X4DvXsq-nXnMRnKEEnywDjsCGedk-t5GLaHHC4EK_uN0umgKyNw-fHWfHJJajDpANJq8h6wuXNGDMhf7e55xoYdla-xSMH5k_LicQD1n_IWmN2hIK7rQNMBVwjRqJVQAMjZ2fZbC0YWSxC_SWqBBTTefpm17z9GdmxzxmOhM1VNucxn0r3pN14XcV3JX7XBB-9Vmt9lVm3K9WfT7pi55tSmx3GEtcVttqWq3a6xbKXC1qcVC7XnJq1W5Kler8hOvi7XE7afdCtf4ifMWt2xd0oBKP6K4UN5H2m-2m-1mobEh7fOrjvMpNZynt57bp_XLJnaerUutfPDvFYIKen4__vyQgGuvNGXyQvL6h4P4mdJFdHr_OlQ6FfrYFMIOjJ8TnPlnOTr7G4nA-Dl3lwZNbvCvAAAA__8Ls5OK">