https://github.com/AaronBallman commented:

Overall, I like the idea, but I wonder if a pragma is really the best way 
forward in 2025. I can imagine standards committees wanting this functionality, 
and a pragma would likely be just fine in C, but not acceptable in C++.

Did you consider using an attribute instead? e.g., `[[clang::deprecated("this 
header is deprecated")]];` on a null statement in a header file could be a 
viable approach that both committees would be interested in standardizing under 
the existing `[[deprecated]]` attribute.

Some things the PR needs to consider:

* This needs documentation in the language extensions file. In particular, 
where within a header does the marking show up? Can it be anywhere? Just the 
"first semantic line" (non-comment, non-header guard)?
* What should happen if the deprecated header ends up including another 
deprecated header? Normally, deprecated things can reference other deprecated 
things on the assumption they're all being deprecated together. So perhaps the 
same is true here? Is it true if deprecated header A includes non-deprecated 
header B which then includes deprecated header C though?
* We usually suppress diagnostics coming from system headers but this one kind 
of spans the idea. The system header specifies the diagnostic should happen but 
the diagnostic itself happens on the inclusion line which may be user code. We 
need test coverage to make sure user code does get the diagnostic and system 
headers do not.
* What happens if the marking is used in a module that is imported? I would 
imagine we'd want the same diagnostic behavior? Perhaps another reason the name 
should be under `deprecated` rather than `deprecated_header`?

https://github.com/llvm/llvm-project/pull/168041
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to