[PATCH] D157905: [include-cleaner] Filter references to identity macros

Kadir Cetinkaya via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Aug 16 09:35:27 PDT 2023


kadircet marked 2 inline comments as done.
kadircet added inline comments.


================
Comment at: clang-tools-extra/include-cleaner/lib/Analysis.cpp:43
+      // This results in surprising behavior from users point of view (we
+      // generate a usage of stdio.h, in places unrelated to standard library).
+      // FIXME: Also eliminate the false positives by treating declarations
----------------
sammccall wrote:
> kadircet wrote:
> > sammccall wrote:
> > > Comment nit: I'm having trouble imagining cases that are actually*unrelated* to the stdlib.
> > > 
> > > If `stderr` is an impl-defined macro, then the only way to use the name to refer to something else is if it's not defined (inside ifndef stderr, or if you can be sure your TU doesn't include stdio first). Seems implausible...
> > > 
> > > That said I feel like we've had this conversation before and I've just forgotten the details.
> > > If stderr is an impl-defined macro, then the only way to use the name to refer to something else is if it's not defined
> > 
> > That's absolutely right. The issue here is macro expansion triggers independent of the context, e.g.
> > ```
> > #include <stdio.h>
> > namespace ns { void stderr(); }
> > void foo() { ns::stderr(); }
> > ```
> > 
> > here we have a (well two) reference to `stderr` macro from stdandard library, which is not user's intent, but rather a quirk of the language.
> Sure, but this code is not valid C++ (since `stderr` is not guaranteed to expand to a single identifier). Is this actually a common/motivating case?
> Sure, but this code is not valid C++ (since stderr is not guaranteed to expand to a single identifier).

That's true. Most of the standard library implementations I checked does that, but I also don't like that reliance, so making it a little bit more generic (which meant some more plumbing, sorry for the big diff :( ), by making sure that we apply this to all the macros that expand to themselves.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D157905



More information about the cfe-commits mailing list