balazske added inline comments.

================
Comment at: clang/lib/AST/ASTImporter.cpp:6082-6085
+  // "from" context. Because these DeclContext values look already not stable
+  // and unimportant this change looks acceptable.
+  // For these reasons the old DeclContext must be saved to change the lookup
+  // table later.
----------------
martong wrote:
> balazske wrote:
> > martong wrote:
> > > I think this sentence does not provide any meaningful information and 
> > > does not increase the understand-ability. Plus the word `change` is 
> > > overloaded, first I though you meant the patch itself...
> > It is still good to have an explanation of why the DeclContext is not 
> > exactly preserved at import. And the DeclContext is really not "stable", 
> > not easily predictable from the source code.
> Okay, then we could write "Consequently, the DeclContext of these Decls may 
> change several times until the top-level import call is finished."
The meaning of this is still different from what my original intent was: The 
DeclContext in the "To" context is different from the "From", even after the 
top-level import call. I wanted to emphasize here that this change of 
DeclContext after (top-level) import has no relevance, should cause no problems.


================
Comment at: clang/unittests/AST/ASTImporterTest.cpp:7348-7353
+  // Get the implicit deduction guide for (non-default) constructor of 'B'.
+  auto *FromDG1 = FirstDeclMatcher<FunctionTemplateDecl>().match(
+      FromTU, functionTemplateDecl(templateParameterCountIs(3)));
+  // User defined deduction guide.
+  auto *FromDG2 = FirstDeclMatcher<CXXDeductionGuideDecl>().match(
+      FromTU, cxxDeductionGuideDecl(unless(isImplicit())));
----------------
martong wrote:
> balazske wrote:
> > martong wrote:
> > > Could you please formulate expectations (assertions) on the DeclContext's 
> > > of the two template parameters? I'd expect them to be different.
> > I left this out because the "instability" mentioned above. It is possible 
> > to make the assertions for this exact code. We can better say that it comes 
> > from a set of possible values,  these are the current `DeductionGuideDecl`, 
> > or another one for the same class, or the class itself (but I am not sure 
> > in this any more). It is possible to get different value for different 
> > template parameters of the same template.
> So, we could have 
> ```
> ASSERT_NE(cast<Decl>(FromDG1->getTemplateParameters()->getParam(0)->getDeclContext()),
>  cast<Decl>(FromDG1->getTemplateParameters()->getParam(1)->getDeclContext()));
> ASSERT_NE(cast<Decl>(FromDG1->getTemplateParameters()->getParam(0)->getDeclContext()),
>  cast<Decl>(FromDG1->getTemplateParameters()->getParam(2)->getDeclContext()));
> ASSERT_EQ(cast<Decl>(FromDG1->getTemplateParameters()->getParam(1)->getDeclContext()),
>  cast<Decl>(FromDG1->getTemplateParameters()->getParam(2)->getDeclContext()))
> ```
> 
> And then after the `Import` calls we could have the same expectations on 
> `ToDG1->getParam(0)` and the rest. Couldn't we?
Probably at the "explicit" template parameters (the ones not coming from the 
class template) the DeclContext is always the deduction guide, so an 
`ASSERT_EQ(FromDG1->getTemplateParameters()->getParam(1)->getDeclContext(), 
FromDG1->getTemplatedDecl())` do work (for param 2 similar). I would not say 
that param 0 has always necessary a different DeclContext than the others, in 
this one case yes but not generally. This is why I do not like an assert for 
that. (Such an assert would not point out an invariant that is true always in 
the AST: An "unrelated" change in the source, for example different order of 
declarations, change in template-template parameters, may result in change of 
the DeclContext.)


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D114418

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

Reply via email to