balazske added a comment.

In D120824#3369407 <https://reviews.llvm.org/D120824#3369407>, @martong wrote:

> So, my understanding is that the issue stems from the fact that 
> `hasInClassInitializer()` gave inconsistent results with 
> `getInClassInitializer()` for previously imported nodes.

Not really the API is the problem. The real problem was that to create a 
`CXXDefaultInitExpr` the field should have a "in-class initializer". 
`CXXDefaultInitExpr` has a pointer to the field that is initialized at that 
place. The field has an "in-class initializer", this is the used expression to 
initialize the field (`CXXDefaultInitExpr` is a separate object that is 
replicated for every initialization in constructors and initializer-list). The 
in-class initializer expression is not always stored in the AST, in the `ToTU` 
it is missing initially. The field has the flag set that it contains in-class 
initializer but the actual expression is not set yet (probably because the code 
parser works this way). This expression should be imported before a 
`CXXDefaultInitExpr` can be created.

The other code change (at lines 3650-60) is needed because 
`setInClassInitializer` can be called only if the value is not set already, 
otherwise it will assert.



================
Comment at: clang/unittests/AST/ASTImporterTest.cpp:536-547
+TEST_P(ImportExpr, ImportCXXDefaultInitExpr) {
+  MatchVerifier<Decl> Verifier;
+  testImport("class declToImport { int DefInit = 5; }; declToImport X;",
+             Lang_CXX11, "", Lang_CXX11, Verifier,
+             cxxRecordDecl(hasDescendant(cxxConstructorDecl(
+                 hasAnyConstructorInitializer(cxxCtorInitializer(
+                     withInitializer(cxxDefaultInitExpr())))))));
----------------
martong wrote:
> So these tests failed with the baseline?
This test was added only because there was no test for `CXXDefaultInitExpr`. 
Probably this test does not fail without the fix. The failing test is only the 
added lit test.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D120824

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

Reply via email to