aaron.ballman accepted this revision.
aaron.ballman added a comment.
This revision is now accepted and ready to land.

LGTM!



================
Comment at: clang/test/AST/ast-dump-overloaded-operators.cpp:27
 // CHECK-NEXT: | `-ParmVarDecl {{.*}} <col:18> col:19{{( imported)?}} 'E'
-// CHECK-NEXT: `-FunctionDecl {{.*}} <line:14:1, line:18:1> line:14:6{{( 
imported)?}} test 'void ()'
+// CHECK-NEXT:  -FunctionDecl {{.*}} <line:14:1, line:18:1> line:14:6{{( 
imported)?}} test 'void ()'
 // CHECK-NEXT:   `-CompoundStmt {{.*}} <col:13, line:18:1>
----------------
mizvekov wrote:
> mizvekov wrote:
> > aaron.ballman wrote:
> > > mizvekov wrote:
> > > > aaron.ballman wrote:
> > > > > mizvekov wrote:
> > > > > > aaron.ballman wrote:
> > > > > > > mizvekov wrote:
> > > > > > > > aaron.ballman wrote:
> > > > > > > > > This looks like a benign typo -- we still match the line 
> > > > > > > > > because FileCheck will match partial lines, but I'm pretty 
> > > > > > > > > sure nothing in your patch would have necessitated this 
> > > > > > > > > change. Then again, you make this change in a lot of tests, 
> > > > > > > > > so maybe I'm wrong -- in which case, what changed?
> > > > > > > > What is happening here (and in all the other such instances) is 
> > > > > > > > that on the `import` case, this declaration stops being the 
> > > > > > > > last one on the TU. So the beginning of the line would match on 
> > > > > > > > `|-` instead of ``-`, but the non-import case this remains the 
> > > > > > > > last one.
> > > > > > > > 
> > > > > > > > So I simply relaxed the match.
> > > > > > > Hmmm, I think it'd help to show what new lines are now showing up 
> > > > > > > so we can validate that they make sense in context. WDYT?
> > > > > > It's the new lines from the synthesized `va_list_tag`. I think they 
> > > > > > would be noise on this these tests, they are testing something 
> > > > > > completely unrelated.
> > > > > > 
> > > > > > But they do show up on the ast-json tests where we are basically 
> > > > > > dumping the whole TU.
> > > > > Oh, so we're adding those to the *end* of the translation unit, not 
> > > > > at the beginning? 
> > > > We are adding them at the beginning, but it seems we import the other 
> > > > stuff before adding them, so on the import tests they show up on the 
> > > > end.
> > > > 
> > > > The thing here is that we end up importing them, but then adding new 
> > > > ones from the current Sema anyway. But this is fine as most other 
> > > > import things, they get separate declarations but merged in any case so 
> > > > they have the same canonical decl.
> > > > 
> > > > The way we avoid doing that for the other synthesized builtins around 
> > > > it, is that we just skip creating them if we find their `Identifier` 
> > > > has been created somehow, which is a fairly strange way to test this.
> > > > 
> > > > This seemed even less appropriate for `va_list_tag`, since some ABIs 
> > > > put it into `std` namespace.
> > > > 
> > > > And it seems to me that avoiding creating them again for the current 
> > > > Sema is a fairly minimal optimization, and it could make we miss 
> > > > diagnosing imports where those things are inconsistent between contexts.
> > > > 
> > > > WDYT?
> > > > We are adding them at the beginning, but it seems we import the other 
> > > > stuff before adding them, so on the import tests they show up on the 
> > > > end.
> > > 
> > > That really surprises me -- I thought we would export the AST in order 
> > > and import it in order. I'm a bit worried that out-of-order AST nodes may 
> > > break invariants.
> > > 
> > > > This seemed even less appropriate for va_list_tag, since some ABIs put 
> > > > it into std namespace.
> > > 
> > > Yeah, identifying things by name in the frontend is rarely a trivial 
> > > exercise, we try to avoid it whenever possible.
> > > 
> > > > And it seems to me that avoiding creating them again for the current 
> > > > Sema is a fairly minimal optimization, and it could make we miss 
> > > > diagnosing imports where those things are inconsistent between contexts.
> > > 
> > > Yeah, it doesn't strike me as a significant optimization to be worth 
> > > worrying about. My concern is more that we expect import order to match 
> > > export order and we're not matching up.
> > We are importing in the right order.
> > 
> > The problem is that we import the pch before we create the builtins here.
> > 
> > Ie look at what the test is doing, it first creates a TU, then imports it 
> > into an empty TU `/dev/null`.
> > In that last case, we end up adding the declaration for this Sema's 
> > `va_list_tag` after the imported stuff, but the one from the original 
> > context is still imported in the right order.
> > 
> > It doesn't seem problematic to me, but would you rather we changed the 
> > import order around wrt the creation of the builtins?
> I think changing that order is weirder in fact, it would cause part of the 
> current TU to come before the imported one, and then part afterwards.
> It doesn't seem problematic to me, but would you rather we changed the import 
> order around wrt the creation of the builtins?

Ahhh, I understand now what's going on there.  I don't think we need to change 
the order now that I understand why the behavior is what it is (I was 
forgetting that we import the PCH and then create builtins).


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D136886

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

Reply via email to