Uploaded image for project: 'Core Server'
  1. Core Server
  2. SERVER-18668

-Wpessimizing-move warnings with clang-3.7

    • Type: Icon: Bug Bug
    • Resolution: Done
    • Priority: Icon: Minor - P4 Minor - P4
    • 3.1.8
    • Affects Version/s: 3.1.3
    • Component/s: Internal Code
    • None
    • Fully Compatible
    • ALL
    • Platform 8 08/28/15

      clang-3.7 introduces a -Wpessimizing-move warning that "warns when a call to std::move would prevent copy elision if the argument was not wrapped in a call."

      These are the current warnings with non-enterprise master (6ff771d5e):

      src/mongo/client/dbclient.cpp:336:16: error: moving a temporary object prevents copy elision [-Werror,-Wpessimizing-move]
              info = std::move(commandReply->getCommandReply().getOwned());
                     ^
      src/mongo/client/dbclient.cpp:336:16: note: remove std::move call here
              info = std::move(commandReply->getCommandReply().getOwned());
                     ^~~~~~~~~~                                          ~
      
      src/mongo/rpc/legacy_reply_builder.cpp:97:16: error: moving a local object in a return statement prevents copy elision [-Werror,-Wpessimizing-move]
              return std::move(message);
                     ^
      src/mongo/rpc/legacy_reply_builder.cpp:97:16: note: remove std::move call here
              return std::move(message);
                     ^~~~~~~~~~       ~
      
      src/mongo/rpc/metadata.cpp:54:57: error: moving a temporary object prevents copy elision [-Werror,-Wpessimizing-move]
              return std::make_tuple(std::move(legacyCmdObj), std::move(metadataBob.obj()));
                                                              ^
      src/mongo/rpc/metadata.cpp:54:57: note: remove std::move call here
              return std::make_tuple(std::move(legacyCmdObj), std::move(metadataBob.obj()));
      
      src/third_party/s2/base/logging.cc:33:51: error: moving a temporary object prevents copy elision [-Werror,-Wpessimizing-move]
      LogMessageInfo::LogMessageInfo() : LogMessageBase(std::move(mongo::log())) { }
                                                        ^
      src/third_party/s2/base/logging.cc:33:51: note: remove std::move call here
      LogMessageInfo::LogMessageInfo() : LogMessageBase(std::move(mongo::log())) { }
      
      src/mongo/util/decoration_registry.h:66:21: error: moving a temporary object prevents copy elision [-Werror,-Wpessimizing-move]
                          std::move(declareDecoration(sizeof(T),
                          ^
      src/mongo/util/decorable.h:105:49: note: in instantiation of function template specialization 'mongo::DecorationRegistry::declareDecoration<std::unique_ptr<mongo::AuthenticationSession, std::default_delete<mongo::AuthenticationSession> > >' requested here
                  return Decoration<T>(getRegistry()->declareDecoration<T>());
                                                      ^
      src/mongo/db/auth/auth_decorations.cpp:63:22: note: in instantiation of function template specialization 'mongo::Decorable<mongo::ClientBasic>::declareDecoration<std::unique_ptr<mongo::AuthenticationSession, std::default_delete<mongo::AuthenticationSession> > >'
            requested here
              ClientBasic::declareDecoration<std::unique_ptr<AuthenticationSession>>();
                           ^
      src/mongo/util/decoration_registry.h:66:21: note: remove std::move call here
                          std::move(declareDecoration(sizeof(T),
                          ^~~~~~~~~~
      src/mongo/util/decoration_registry.h:66:21: error: moving a temporary object prevents copy elision [-Werror,-Wpessimizing-move]
                          std::move(declareDecoration(sizeof(T),
                          ^
      src/mongo/util/decorable.h:105:49: note: in instantiation of function template specialization 'mongo::DecorationRegistry::declareDecoration<std::unique_ptr<mongo::AuthorizationManager, std::default_delete<mongo::AuthorizationManager> > >' requested here
                  return Decoration<T>(getRegistry()->declareDecoration<T>());
                                                      ^
      src/mongo/db/auth/auth_decorations.cpp:66:25: note: in instantiation of function template specialization 'mongo::Decorable<mongo::ServiceContext>::declareDecoration<std::unique_ptr<mongo::AuthorizationManager, std::default_delete<mongo::AuthorizationManager> > >'
            requested here
              ServiceContext::declareDecoration<std::unique_ptr<AuthorizationManager>>();
                              ^
      src/mongo/util/decoration_registry.h:66:21: note: remove std::move call here
                          std::move(declareDecoration(sizeof(T),
                          ^~~~~~~~~~
      src/mongo/util/decoration_registry.h:66:21: error: moving a temporary object prevents copy elision [-Werror,-Wpessimizing-move]
                          std::move(declareDecoration(sizeof(T),
                          ^
      src/mongo/util/decorable.h:105:49: note: in instantiation of function template specialization 'mongo::DecorationRegistry::declareDecoration<std::unique_ptr<mongo::AuthorizationSession, std::default_delete<mongo::AuthorizationSession> > >' requested here
                  return Decoration<T>(getRegistry()->declareDecoration<T>());
                                                      ^
      src/mongo/db/auth/auth_decorations.cpp:69:22: note: in instantiation of function template specialization 'mongo::Decorable<mongo::ClientBasic>::declareDecoration<std::unique_ptr<mongo::AuthorizationSession, std::default_delete<mongo::AuthorizationSession> > >' requested
            here
              ClientBasic::declareDecoration<std::unique_ptr<AuthorizationSession>>();
                           ^
      src/mongo/util/decoration_registry.h:66:21: note: remove std::move call here
                          std::move(declareDecoration(sizeof(T),
                          ^~~~~~~~~~
      
      src/mongo/s/balance.cpp:573:40: error: moving a temporary object prevents copy elision [-Werror,-Wpessimizing-move]
                              writeConcern = std::move(balancerConfig.getWriteConcern());
                                             ^
      src/mongo/s/balance.cpp:573:40: note: remove std::move call here
                              writeConcern = std::move(balancerConfig.getWriteConcern());
      

            Assignee:
            adam.midvidy Adam Midvidy
            Reporter:
            kamran.khan Kamran K.
            Votes:
            1 Vote for this issue
            Watchers:
            4 Start watching this issue

              Created:
              Updated:
              Resolved: