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

typeid(glvalue) warns on clang 3.6

    • Type: Icon: Bug Bug
    • Resolution: Done
    • Priority: Icon: Major - P3 Major - P3
    • 3.0.5, 3.1.3
    • Affects Version/s: None
    • Component/s: Internal Code
    • None
    • Fully Compatible
    • ALL
    • Hide

      #using clang 3.6
      scons --mute --cc=clang --cxx=clang++ mongod

      Show
      #using clang 3.6 scons --mute --cc=clang --cxx=clang++ mongod
    • Platform 3 05/15/15

      Clang 3.6 added a new warning for the use of typeid with glvalue's. I.e. in situations where the argument is an expression and it would have to be evaluated with possible side effects.

      Error:

      scons: Building targets ...
      Compiling build/linux2/x86_64/cc_clang/cxx_clang++/mongo/db/storage/in_memory/in_memory_recovery_unit.o
      src/mongo/db/storage/in_memory/in_memory_recovery_unit.cpp:71:70: error: expression with side
            effects will be evaluated despite being used as an operand to 'typeid'
            [-Werror,-Wpotentially-evaluated-expression]
                       LOG(2) << "CUSTOM ROLLBACK " << demangleName(typeid(*change));
                                                                           ^
      1 error generated.
      Compiling build/linux2/x86_64/cc_clang/cxx_clang++/mongo/db/storage/mmap_v1/dur_recovery_unit.o
      src/mongo/db/storage/mmap_v1/dur_recovery_unit.cpp:181:69: error: expression with side effects
            will be evaluated despite being used as an operand to 'typeid'
            [-Werror,-Wpotentially-evaluated-expression]
                      LOG(2) << "CUSTOM ROLLBACK " << demangleName(typeid(*_changes[i]));
      

      This appeared in:
      http://lists.cs.uiuc.edu/pipermail/cfe-commits/Week-of-Mon-20141215/120369.html

      ------------

      We have two options moving forward:

      Add a suppression:

      --- a/SConstruct
      +++ b/SConstruct
      @@ -1333,6 +1333,9 @@ def doConfigure(myenv):
               # we explicitly disable it here.
               AddToCCFLAGSIfSupported(myenv, "-Wno-missing-braces")
       
      +        # Ignore potentially evaluated expressions
      +        AddToCCFLAGSIfSupported(myenv, "-Wno-potentially-evaluated-expression")
      +
           # Check if we need to disable null-conversion warnings
           if myenv.ToolchainIs('clang'):
               def CheckNullConversion(context):
      

      Change two points in the code to clean this up (the below patch is sufficient for me)

      --- a/src/mongo/db/storage/in_memory/in_memory_recovery_unit.cpp
      +++ b/src/mongo/db/storage/in_memory/in_memory_recovery_unit.cpp
      @@ -67,7 +67,7 @@ namespace mongo {
                try {
                    for (Changes::reverse_iterator it = _changes.rbegin(), end = _changes.rend();
                            it != end; ++it) {
      -                 ChangePtr change = *it;
      +                 Change* change = it->get();
                        LOG(2) << "CUSTOM ROLLBACK " << demangleName(typeid(*change));
                        change->rollback();
                    }
      
      --- a/src/mongo/db/storage/mmap_v1/dur_recovery_unit.cpp
      +++ b/src/mongo/db/storage/mmap_v1/dur_recovery_unit.cpp
      @@ -178,7 +178,8 @@ namespace mongo {
       
               try {
                   for (int i = _changes.size() - 1; i >= changesRollbackTo; i--) {
      -                LOG(2) << "CUSTOM ROLLBACK " << demangleName(typeid(*_changes[i]));
      +                Change* change = _changes[i];
      +                LOG(2) << "CUSTOM ROLLBACK " << demangleName(typeid(*change));
                       _changes[i]->rollback();
                   }
      

      Basically just do whatever side effecty stuff we need to before the call to typeid.

            Assignee:
            andrew.morrow@mongodb.com Andrew Morrow (Inactive)
            Reporter:
            mira.carey@mongodb.com Mira Carey
            Votes:
            0 Vote for this issue
            Watchers:
            6 Start watching this issue

              Created:
              Updated:
              Resolved: