ayzhao updated this revision to Diff 517636. ayzhao added a comment. add release note
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D149301/new/ https://reviews.llvm.org/D149301 Files: clang/docs/ReleaseNotes.rst clang/lib/Sema/SemaInit.cpp clang/test/SemaCXX/paren-list-agg-init.cpp Index: clang/test/SemaCXX/paren-list-agg-init.cpp =================================================================== --- clang/test/SemaCXX/paren-list-agg-init.cpp +++ clang/test/SemaCXX/paren-list-agg-init.cpp @@ -200,3 +200,26 @@ // expected-error@-1 {{call to implicitly-deleted copy constructor of 'V'}} } } + +namespace gh62296 { +struct L { +protected: + L(int); + // expected-note@-1 2{{declared protected here}} +}; + +struct M : L {}; + +struct N { + L l; +}; + +M m(42); +// expected-error@-1 {{base class 'L' has protected constructor}} +// beforecxx20-warning@-2 {{aggregate initialization of type 'M' from a parenthesized list of values is a C++20 extension}} + +N n(43); +// expected-error@-1 {{field of type 'L' has protected constructor}} +// beforecxx20-warning@-2 {{aggregate initialization of type 'N' from a parenthesized list of values is a C++20 extension}} + +} Index: clang/lib/Sema/SemaInit.cpp =================================================================== --- clang/lib/Sema/SemaInit.cpp +++ clang/lib/Sema/SemaInit.cpp @@ -5449,8 +5449,9 @@ } else if (auto *RT = Entity.getType()->getAs<RecordType>()) { const CXXRecordDecl *RD = cast<CXXRecordDecl>(RT->getDecl()); - auto BaseRange = map_range(RD->bases(), [&S](auto &base) { - return InitializedEntity::InitializeBase(S.getASTContext(), &base, false); + auto BaseRange = map_range(RD->bases(), [&](auto &base) { + return InitializedEntity::InitializeBase(S.getASTContext(), &base, false, + &Entity); }); auto FieldRange = map_range(RD->fields(), [](auto *field) { return InitializedEntity::InitializeMember(field); Index: clang/docs/ReleaseNotes.rst =================================================================== --- clang/docs/ReleaseNotes.rst +++ clang/docs/ReleaseNotes.rst @@ -331,6 +331,9 @@ constructor declaration. (`#62361 <https://github.com/llvm/llvm-project/issues/62361>`_) (`#62362 <https://github.com/llvm/llvm-project/issues/62362>`_) +- Fix crash when attempting to perform parenthesized initialization of an + aggregate with a base class with only non-public constructors. + (`#62296 <https://github.com/llvm/llvm-project/issues/62296 >`_) Bug Fixes to Compiler Builtins ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Index: clang/test/SemaCXX/paren-list-agg-init.cpp =================================================================== --- clang/test/SemaCXX/paren-list-agg-init.cpp +++ clang/test/SemaCXX/paren-list-agg-init.cpp @@ -200,3 +200,26 @@ // expected-error@-1 {{call to implicitly-deleted copy constructor of 'V'}} } } + +namespace gh62296 { +struct L { +protected: + L(int); + // expected-note@-1 2{{declared protected here}} +}; + +struct M : L {}; + +struct N { + L l; +}; + +M m(42); +// expected-error@-1 {{base class 'L' has protected constructor}} +// beforecxx20-warning@-2 {{aggregate initialization of type 'M' from a parenthesized list of values is a C++20 extension}} + +N n(43); +// expected-error@-1 {{field of type 'L' has protected constructor}} +// beforecxx20-warning@-2 {{aggregate initialization of type 'N' from a parenthesized list of values is a C++20 extension}} + +} Index: clang/lib/Sema/SemaInit.cpp =================================================================== --- clang/lib/Sema/SemaInit.cpp +++ clang/lib/Sema/SemaInit.cpp @@ -5449,8 +5449,9 @@ } else if (auto *RT = Entity.getType()->getAs<RecordType>()) { const CXXRecordDecl *RD = cast<CXXRecordDecl>(RT->getDecl()); - auto BaseRange = map_range(RD->bases(), [&S](auto &base) { - return InitializedEntity::InitializeBase(S.getASTContext(), &base, false); + auto BaseRange = map_range(RD->bases(), [&](auto &base) { + return InitializedEntity::InitializeBase(S.getASTContext(), &base, false, + &Entity); }); auto FieldRange = map_range(RD->fields(), [](auto *field) { return InitializedEntity::InitializeMember(field); Index: clang/docs/ReleaseNotes.rst =================================================================== --- clang/docs/ReleaseNotes.rst +++ clang/docs/ReleaseNotes.rst @@ -331,6 +331,9 @@ constructor declaration. (`#62361 <https://github.com/llvm/llvm-project/issues/62361>`_) (`#62362 <https://github.com/llvm/llvm-project/issues/62362>`_) +- Fix crash when attempting to perform parenthesized initialization of an + aggregate with a base class with only non-public constructors. + (`#62296 <https://github.com/llvm/llvm-project/issues/62296 >`_) Bug Fixes to Compiler Builtins ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits