[PATCH] D106394: [clang][pp] adds '#pragma include_instead'

Arthur O'Dwyer via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Jul 21 09:51:50 PDT 2021


Quuxplusone added a comment.

> Hmm... I like prior art. That clangd supports it suggests that there's a section of code I can look at for inspiration if we were to replace this pragma with the IWYU comment-pragma (I wonder why they didn't just go with `#pragma IWYU ...`?). Is it reasonable for a compiler to interpret comments and issue/adjust diagnostics based on those comments? I thought that was the purpose of a //pp-pragma//.

I can answer that one! Pragmas tend to be for things with real in-game effects that require compiler support, such as `#pragma once` or `#pragma thumb`. If a TU contains a line of the form `#pragma ...` that the current compiler doesn't recognize, that's usually a bug. Compiler vendors reflect that fact by providing `-Wunknown-pragmas` (and turning it on pretty aggressively). https://stackoverflow.com/questions/132667/how-to-disable-pragma-warnings

For things that "don't really matter" — such as (1) source encoding, (2) switch case fallthroughs, (3) IWYU relationships — it's usually easier to just do a special kind of comment, rather than forcing all your users to worry about `-Wunknown-pragmas` warnings on older or third-party compilers. All compilers silently ignore "unknown comments," which is exactly what we want for these kinds of things. OTOH, special comments are hard to hide behind macros, whereas `[[attributes]]` and `_Pragma("s")` are easier.

If IWYU has already developed a de facto standard for this information, I would recommend libc++ just use it (perhaps with no changes needed in clang at all). This would have the benefit of getting libc++ to work with IWYU out-of-the-box, instead of having to go beg IWYU to implement support for a new `#pragma include_instead`.  Is any IWYU developer aware of D106394 <https://reviews.llvm.org/D106394> yet? You should definitely try to get them involved here.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D106394



More information about the cfe-commits mailing list