nullptr.cpp created this revision. nullptr.cpp added reviewers: Quuxplusone, rsmith, erik.pilkington. Herald added subscribers: cfe-commits, dexonsmith. Herald added a project: clang. nullptr.cpp requested review of this revision.
In C++11 standard, to become implicitly movable, the expression in return statement should be a non-volatile automatic object. CWG1579 changed the rule to require that the expression only needs to be a automatic object. C++14 standard and C++17 standard kept this rule unchanged. C++20 standard changed the rule back to require the expression be a non-volatile automatic object. This should be a typo in standards, and `VD` should be non-volatile. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D88295 Files: clang/lib/Sema/SemaStmt.cpp Index: clang/lib/Sema/SemaStmt.cpp =================================================================== --- clang/lib/Sema/SemaStmt.cpp +++ clang/lib/Sema/SemaStmt.cpp @@ -3056,12 +3056,13 @@ // variable will no longer be used. if (VD->hasAttr<BlocksAttr>()) return false; + // ...non-volatile... + if (VD->getType().isVolatileQualified()) + return false; + if (CESK & CES_AllowDifferentTypes) return true; - // ...non-volatile... - if (VD->getType().isVolatileQualified()) return false; - // Variables with higher required alignment than their type's ABI // alignment cannot use NRVO. if (!VD->getType()->isDependentType() && VD->hasAttr<AlignedAttr>() &&
Index: clang/lib/Sema/SemaStmt.cpp =================================================================== --- clang/lib/Sema/SemaStmt.cpp +++ clang/lib/Sema/SemaStmt.cpp @@ -3056,12 +3056,13 @@ // variable will no longer be used. if (VD->hasAttr<BlocksAttr>()) return false; + // ...non-volatile... + if (VD->getType().isVolatileQualified()) + return false; + if (CESK & CES_AllowDifferentTypes) return true; - // ...non-volatile... - if (VD->getType().isVolatileQualified()) return false; - // Variables with higher required alignment than their type's ABI // alignment cannot use NRVO. if (!VD->getType()->isDependentType() && VD->hasAttr<AlignedAttr>() &&
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits