As for umbrella headers, not sure they're really an issue. Such headers don't 
contain any code and so you'd never find yourself adding an include to such a 
file since there's no code to transform.


================
Comment at: unittests/cpp11-migrate/IncludeDirectivesTest.cpp:165-167
@@ +164,5 @@
+TEST(IncludeDirectivesTest, indirectIncludes) {
+  EXPECT_EQ(
+      "#include </virtual/foo.h>\n",
+      addIncludeInCode("/virtual/foo-inner.h", "#include </virtual/foo.h>\n"));
+
----------------
Guillaume Papin wrote:
> Edwin Vane wrote:
> > I'm still not convinced this EXPECT is testing what you think. I understand 
> > the point of this test is to test indirect includes but this particular 
> > EXPECT is not using `makeIndirectTestsAction()` so as far as I see, it's 
> > identical to the avoidDuplicates() test. What am I missing?
> I can put this test in `avoidDuplicates()` if you want?
> 
> The difference (which is notable in the algorithm) is that the include is not 
> directly in the file we are checking. So in the algorithm I forgot to check 
> the includes recursively (or if it's badly implemented) removing this test 
> will make the issue unnoticeable (I just tried to comment the part of the 
> code and only this test detects it).
I see my problem now. Can you please add a comment here explaining that foo.h 
includes foo-inner.h as set up by TestAddIncludeAction?

================
Comment at: cpp11-migrate/Core/IncludeDirectives.h:58
@@ +57,3 @@
+private:
+  friend class IncludeDirectivesPPCallback;
+
----------------
Guillaume Papin wrote:
> Edwin Vane wrote:
> > Why do we even need friendship here? I know you have `InclusionDirective()` 
> > as private but according to docs, this is actually a public member of the 
> > clang::PPCallbacks class. You should probably also make it public. At this 
> > point, friendship is no longer necessary and then you can put the callbacks 
> > class into an anonymous namespace.
> Maybe you got the friendship in the wrong order? The friendship is used so 
> that the callback can fill-in the IncludeDirectives data.
> The visibility of `InclusionDirective()` doesn't matter, it will be found by 
> the PPCallbacks interface but I there is no need to access this member 
> directly.
You're right of course. I missed the fact the callbacks actually set data in 
the other class. Generally I try to avoid friend classes but I think this is a 
case of intentional strong coupling between the two.


http://llvm-reviews.chandlerc.com/D1287
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to