This revision was landed with ongoing or failed builds. This revision was automatically updated to reflect the committed changes. Closed by commit rG1d68ecafd6ad: [clang] fix oops: enable implicit moves in MSVC compatibility mode (authored by mizvekov).
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D106303/new/ https://reviews.llvm.org/D106303 Files: clang/lib/Sema/SemaStmt.cpp clang/test/SemaCXX/cxx2b-p2266-disable-with-msvc-compat.cpp Index: clang/test/SemaCXX/cxx2b-p2266-disable-with-msvc-compat.cpp =================================================================== --- clang/test/SemaCXX/cxx2b-p2266-disable-with-msvc-compat.cpp +++ clang/test/SemaCXX/cxx2b-p2266-disable-with-msvc-compat.cpp @@ -48,3 +48,5 @@ throw x; // new-error {{no matching constructor for initialization}} } catch (...) { } + +MoveOnly test6(MoveOnly x) { return x; } Index: clang/lib/Sema/SemaStmt.cpp =================================================================== --- clang/lib/Sema/SemaStmt.cpp +++ clang/lib/Sema/SemaStmt.cpp @@ -3483,7 +3483,12 @@ Sema::PerformMoveOrCopyInitialization(const InitializedEntity &Entity, const NamedReturnInfo &NRInfo, Expr *Value) { - if (!getLangOpts().CPlusPlus2b && NRInfo.isMoveEligible()) { + // FIXME: We force P1825 implicit moves here in msvc compatibility mode + // because we are disabling simpler implicit moves as a temporary + // work around, as the MSVC STL has issues with this change. + // We will come back later with a more targeted approach. + if ((!getLangOpts().CPlusPlus2b || getLangOpts().MSVCCompat) && + NRInfo.isMoveEligible()) { ImplicitCastExpr AsRvalue(ImplicitCastExpr::OnStack, Value->getType(), CK_NoOp, Value, VK_XValue, FPOptionsOverride()); Expr *InitExpr = &AsRvalue;
Index: clang/test/SemaCXX/cxx2b-p2266-disable-with-msvc-compat.cpp =================================================================== --- clang/test/SemaCXX/cxx2b-p2266-disable-with-msvc-compat.cpp +++ clang/test/SemaCXX/cxx2b-p2266-disable-with-msvc-compat.cpp @@ -48,3 +48,5 @@ throw x; // new-error {{no matching constructor for initialization}} } catch (...) { } + +MoveOnly test6(MoveOnly x) { return x; } Index: clang/lib/Sema/SemaStmt.cpp =================================================================== --- clang/lib/Sema/SemaStmt.cpp +++ clang/lib/Sema/SemaStmt.cpp @@ -3483,7 +3483,12 @@ Sema::PerformMoveOrCopyInitialization(const InitializedEntity &Entity, const NamedReturnInfo &NRInfo, Expr *Value) { - if (!getLangOpts().CPlusPlus2b && NRInfo.isMoveEligible()) { + // FIXME: We force P1825 implicit moves here in msvc compatibility mode + // because we are disabling simpler implicit moves as a temporary + // work around, as the MSVC STL has issues with this change. + // We will come back later with a more targeted approach. + if ((!getLangOpts().CPlusPlus2b || getLangOpts().MSVCCompat) && + NRInfo.isMoveEligible()) { ImplicitCastExpr AsRvalue(ImplicitCastExpr::OnStack, Value->getType(), CK_NoOp, Value, VK_XValue, FPOptionsOverride()); Expr *InitExpr = &AsRvalue;
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits