<div dir="ltr">I am compiling and running Cbc with Clang’s UndefinedBehaviorSanitizer. I have been able to fix several errors, but a more tricky one is the following. This line sometimes incorrecly casts an enum:<div><a href="https://github.com/coin-or/Osi/blob/master/Osi/src/Osi/OsiPresolve.cpp#L505"><br></a></div><div><a href="https://github.com/coin-or/Osi/blob/master/Osi/src/Osi/OsiPresolve.cpp#L505">https://github.com/coin-or/Osi/blob/master/Osi/src/Osi/OsiPresolve.cpp#L505</a><br></div><div><br></div><div>The original enum looks like:</div><div><div><font face="monospace">  /*! \brief Enum for status of various sorts</font></div><div><font face="monospace">  </font></div><div><font face="monospace">    Matches CoinWarmStartBasis::Status and adds superBasic. Most code that</font></div><div><font face="monospace">    converts between CoinPrePostsolveMatrix::Status and</font></div><div><font face="monospace">    CoinWarmStartBasis::Status will break if this correspondence is broken.</font></div><div><font face="monospace"><br></font></div><div><font face="monospace">    superBasic is an unresolved problem: there's no analogue in</font></div><div><font face="monospace">    CoinWarmStartBasis::Status.</font></div><div><font face="monospace">  */</font></div><div><font face="monospace">  enum Status {</font></div><div><font face="monospace">    isFree = 0x00,</font></div><div><font face="monospace">    basic = 0x01,</font></div><div><font face="monospace">    atUpperBound = 0x02,</font></div><div><font face="monospace">    atLowerBound = 0x03,</font></div><div><font face="monospace">    superBasic = 0x04</font></div><div><font face="monospace">  };</font></div></div><div><font face="monospace"><br></font></div><div>and the target enum looks like:</div><div><br></div><div><div><font face="monospace">  enum Status {</font></div><div><font face="monospace">    isFree = 0x00,<span style="white-space:pre">          </span>///< Nonbasic free variable</font></div><div><font face="monospace">    basic = 0x01,<span style="white-space:pre">         </span>///< Basic variable</font></div><div><font face="monospace">    atUpperBound = 0x02,<span style="white-space:pre">  </span>///< Nonbasic at upper bound</font></div><div><font face="monospace">    atLowerBound = 0x03<span style="white-space:pre">          </span>///< Nonbasic at lower bound</font></div><div><font face="monospace">  };</font></div></div><div><br></div><div>UndefinedBehaviorSanitizer stops the execution because the status is superBasic. <br></div><div><br></div><div>The question is, what is the correct course of action in that case?</div><div><br></div><div>Petter</div><div><br></div></div>