ldionne added a comment.

In D120244#3540598 <https://reviews.llvm.org/D120244#3540598>, @aaron.ballman 
wrote:

> The system header including a header that's explicitly deprecated is dubious 
> practice, but that does still require some amount of timing coordination.

I agree, and I'll be filing bug reports against system headers within my 
control that use `<stdbool.h>`. That is unfortunately not the majority of 
headers, though.

>> In other words, the fact that this `#warning` gets out of system headers 
>> means that it's going to "spam" users who have no control over what their 
>> system headers are doing. So while the long-long term fix is for all system 
>> headers (like `Foundation.h`) to be C2x friendly and not include 
>> `<stdbool.h>` in newer standard modes, the current migration path involves a 
>> lot of spammy warnings for end users in the meantime. Since such a migration 
>> may or may not happen completely everywhere, it also means that this is 
>> probably not a "bite the bullet for 3 months" situation.
>
> Okay, that's a fair problem. However, the flip side is: why should C2x users 
> not be told about deprecated functionality when they include the header 
> directly?

I agree -- they should be told about the deprecated functionality. The problem 
is that with the currently available technology, we have to choose between 
telling them about their use of deprecated `<stdbool.h>` AND spamming them for 
system headers' use of it, or not telling them at all. Both options have 
downsides, I think it's a matter of what we value the most.

> So I take it 
> https://github.com/llvm/llvm-project/blob/main/clang/lib/Headers/stdnoreturn.h
>  is also an issue?

I think so. I suspect it may be much less widely used, so that might be why it 
wasn't brought up.

> My feeling is: system headers that spam warnings are a bigger concern than 
> not getting a deprecation warning, but we want that deprecation warning 
> eventually because we need *some* way to deprecate headers as a whole. Not 
> issuing deprecation warnings means standards bodies can't reasonably rely on 
> users having been warned, so not diagnosing means "let's stick the *entire 
> ecosystem* with this header file forever". So I'm thinking of walking back 
> the `#warning` for the headers but with some sort of timeline as to when we 
> can add the diagnostics back to the headers. Do you have an idea of what 
> would be reasonable for Foundation.h?

I fully agree -- we need a way to deprecate headers (just like we do for 
classes and functions). My intent is really not to impair your efforts at doing 
that -- I'm just trying to point out the unfortunate tradeoff we are making. 
Regarding `Foundation.h` -- I am using this as an example, but it's really just 
the tip of the iceberg. We can probably get this one fixed within a reasonable 
time frame, however that won't change the fundamental issue.

> We could maybe extend `#pragma clang deprecate` to deprecate inclusion of the 
> current file so that it acts sort of like a `[[deprecated]]` attribute that 
> triggers on inclusion using typical diagnostics instead of `#warning`.

Yes, if that is feasible, I think something like that is exactly what we would 
need. If we had a tool like this, by the way, I would be very keen on 
deprecating some libc++ headers that we keep around like `<ciso646>` & friends.

So, in summary, my opinion is that we should wait until we have the appropriate 
technology (something like proposed above) before deprecating these headers. 
And once we do, then I'll be 100% supportive of efforts in that direction. But 
I'm mostly relaying user feedback here, I don't own the Clang headers so I must 
defer to your judgement.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D120244/new/

https://reviews.llvm.org/D120244

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to