sammccall accepted this revision.
sammccall added a comment.

still LG, comments are still confusing me a little



================
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
----------------
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?


================
Comment at: clang-tools-extra/include-cleaner/lib/Analysis.cpp:44
+      // generate a usage of stdio.h, in places unrelated to standard library).
+      // FIXME: Also eliminate the false positives by treating declarations
+      // resulting from these expansions as used.
----------------
kadircet wrote:
> sammccall wrote:
> > Nit: "false positives" is a little unclear: positives for this function are 
> > negatives for walkAST and could be either for diagnostics.
> > 
> > Also, I think you mean *references* rather than declarations?
> > 
> this should've been "false negatives" from the "usedness perspective", we 
> basically drop the reference to `ns::stderr` in above example, because the 
> name is not spelled in the main file (but rather spelled inside a macro body).
And now it's backwards if your perspective is this function itself!

just avoid "false positives"/"false negatives" terminology and describe the 
actual effect?


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D157905

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

Reply via email to