aaron.ballman added a comment.

In D120244#3540703 <https://reviews.llvm.org/D120244#3540703>, @ldionne wrote:

> 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.

Thanks!

>> 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.

Agreed, the issue is that `#warning` is effectively useless in system headers.  
:-(

>> 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.

I'll explore just how possible this is. There's all sorts of neat problems with 
it, like header guards/`#pragma once` meaning the header file's contents aren't 
scanned on a second inclusion (so we need to keep a list of already-included 
files that are deprecated), and truly awful things like:

  // Foo.h, which has no header guard because it's like assert.h
  #if WHATEVER
  ...
  #else
  #pragma clang deprecate_header
  #endif
  
  // main.c
  #define WHATEVER
  #include "Foo.h"
  #undef WHATEVER
  #include "Foo.h"
  #define WHATEVER
  #include "Foo.h"
  #endif

and so on.

> 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.

The feedback from your users (and you) is very much appreciated; this is 
exactly the kind of feedback I hoped to get by doing those changes early in the 
release (so I still have time to address issues like this before it's too 
late). So thank you for bringing this up and the discussion around it!

I'll roll back the `#warning` use and report back when that's done.


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