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