<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <div class="moz-cite-prefix">Tobias,<br>
      <br>
      I fixed some flaws in CglGomory and so have left it not using
      CoinRational.  You can make it use CoinRational - in configure
      -DUSE_CGL_RATIONAL=10000 would allow CoinRational to look at
      rationals a/b where a and b <10000.  But it seemed to give
      worse cuts.<br>
      <br>
      Can you see if revised code is better for you.<br>
      <br>
      John <br>
      On 06/11/17 07:11, Tobias Stengel wrote:<br>
    </div>
    <blockquote type="cite"
cite="mid:EDC45EE5442B124EBB022ECACBBA5911ECFBD8@VM-Exchange2010.intranet.lan">
      <meta http-equiv="Context-Type" content="text/html; charset=utf-8">
      <meta name="Generator" content="Microsoft Word 15 (filtered
        medium)">
      <div class="WordSection1">
        <p class="MsoNormal"><span>Did you fix the errors upstream? If
            not: can you post a list of the errors you found so others
            can apply the fixes locally and/or John (or whoever else is
            allowed to do it) can fix them in trunk?</span></p>
        <p class="MsoNormal"><span> </span></p>
        <p class="MsoNormal"><span>I ran GCC undefinedBehaviourSanitizer
            some time ago and found some issues which are partly fixed
            upstream, but missed the one with the Status enum.</span></p>
        <p class="MsoNormal"><span>I am interested how you fixed the
            integer overflow in the gomory cut generator as John’s fix
            in trunk just moved the problem a few lines down causing us
            to use „-gomory off“  all the time as we are using CBC as a
            libary and can not risk CBC killing or corrupting the
            process it runs in. This does not improve performance…</span></p>
        <p class="MsoNormal"><span> </span></p>
        <p class="MsoNormal"><span>Tobias</span></p>
        <p class="MsoNormal"><span> </span></p>
        <p class="MsoNormal"><b><span>Von:</span></b><span> Cbc
            [<a class="moz-txt-link-freetext" href="mailto:cbc-bounces@coin-or.org">mailto:cbc-bounces@coin-or.org</a>]
            <b>Im Auftrag von </b>Petter Strandmark<br>
            <b>Gesendet:</b> Samstag, 21. Oktober 2017 17:09<br>
            <b>An:</b> <a class="moz-txt-link-abbreviated" href="mailto:cbc@list.coin-or.org">cbc@list.coin-or.org</a><br>
            <b>Betreff:</b> [Cbc] UndefinedBehaviorSanitizer error in
            OsiPresolvewhen casting Status</span></p>
        <p class="MsoNormal"> </p>
        <div>
          <p class="MsoNormal">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:</p>
          <div>
            <p class="MsoNormal"><a
href="https://urldefense.proofpoint.com/v2/url?u=https-3A__github.com_coin-2Dor_Osi_blob_master_Osi_src_Osi_OsiPresolve.cpp-23L505&d=DwMGaQ&c=Ngd-ta5yRYsqeUsEDgxhcqsYYY1Xs5ogLxWPA_2Wlc4&r=js2M0T-3OIMIVDvokcKjokJbk0F8QOCd0mT4FsVFE88&m=teKOXve84TjS7gbIwqEbWfnaIOzGDTDsf9SfQkpv4wY&s=b8lmOKUNw4GSde1lht9ZfVbODNNYFmLQZs33amHrjbc&e="
                moz-do-not-send="true"><br>
              </a></p>
          </div>
          <div>
            <p class="MsoNormal"><a
href="https://urldefense.proofpoint.com/v2/url?u=https-3A__github.com_coin-2Dor_Osi_blob_master_Osi_src_Osi_OsiPresolve.cpp-23L505&d=DwMGaQ&c=Ngd-ta5yRYsqeUsEDgxhcqsYYY1Xs5ogLxWPA_2Wlc4&r=js2M0T-3OIMIVDvokcKjokJbk0F8QOCd0mT4FsVFE88&m=teKOXve84TjS7gbIwqEbWfnaIOzGDTDsf9SfQkpv4wY&s=b8lmOKUNw4GSde1lht9ZfVbODNNYFmLQZs33amHrjbc&e="
                moz-do-not-send="true">https://github.com/coin-or/Osi/blob/master/Osi/src/Osi/OsiPresolve.cpp#L505</a></p>
          </div>
          <div>
            <p class="MsoNormal"> </p>
          </div>
          <div>
            <p class="MsoNormal">The original enum looks like:</p>
          </div>
          <div>
            <div>
              <p class="MsoNormal"><span>  /*! \brief Enum for status of
                  various sorts</span></p>
            </div>
            <div>
              <p class="MsoNormal"><span>  </span></p>
            </div>
            <div>
              <p class="MsoNormal"><span>    Matches
                  CoinWarmStartBasis::Status and adds superBasic. Most
                  code that</span></p>
            </div>
            <div>
              <p class="MsoNormal"><span>    converts between
                  CoinPrePostsolveMatrix::Status and</span></p>
            </div>
            <div>
              <p class="MsoNormal"><span>    CoinWarmStartBasis::Status
                  will break if this correspondence is broken.</span></p>
            </div>
            <div>
              <p class="MsoNormal"> </p>
            </div>
            <div>
              <p class="MsoNormal"><span>    superBasic is an unresolved
                  problem: there's no analogue in</span></p>
            </div>
            <div>
              <p class="MsoNormal"><span>    CoinWarmStartBasis::Status.</span></p>
            </div>
            <div>
              <p class="MsoNormal"><span>  */</span></p>
            </div>
            <div>
              <p class="MsoNormal"><span>  enum Status {</span></p>
            </div>
            <div>
              <p class="MsoNormal"><span>    isFree = 0x00,</span></p>
            </div>
            <div>
              <p class="MsoNormal"><span>    basic = 0x01,</span></p>
            </div>
            <div>
              <p class="MsoNormal"><span>    atUpperBound = 0x02,</span></p>
            </div>
            <div>
              <p class="MsoNormal"><span>    atLowerBound = 0x03,</span></p>
            </div>
            <div>
              <p class="MsoNormal"><span>    superBasic = 0x04</span></p>
            </div>
            <div>
              <p class="MsoNormal"><span>  };</span></p>
            </div>
          </div>
          <div>
            <p class="MsoNormal"> </p>
          </div>
          <div>
            <p class="MsoNormal">and the target enum looks like:</p>
          </div>
          <div>
            <p class="MsoNormal"> </p>
          </div>
          <div>
            <div>
              <p class="MsoNormal"><span>  enum Status {</span></p>
            </div>
            <div>
              <p class="MsoNormal"><span>    isFree = 0x00,      ///<
                  Nonbasic free variable</span></p>
            </div>
            <div>
              <p class="MsoNormal"><span>    basic = 0x01,       ///<
                  Basic variable</span></p>
            </div>
            <div>
              <p class="MsoNormal"><span>    atUpperBound = 0x02,
                  ///< Nonbasic at upper bound</span></p>
            </div>
            <div>
              <p class="MsoNormal"><span>    atLowerBound = 0x03     
                  ///< Nonbasic at lower bound</span></p>
            </div>
            <div>
              <p class="MsoNormal"><span>  };</span></p>
            </div>
          </div>
          <div>
            <p class="MsoNormal"> </p>
          </div>
          <div>
            <p class="MsoNormal">UndefinedBehaviorSanitizer stops the
              execution because the status is superBasic. </p>
          </div>
          <div>
            <p class="MsoNormal"> </p>
          </div>
          <div>
            <p class="MsoNormal">The question is, what is the correct
              course of action in that case?</p>
          </div>
          <div>
            <p class="MsoNormal"> </p>
          </div>
          <div>
            <p class="MsoNormal">Petter</p>
          </div>
          <div>
            <p class="MsoNormal"> </p>
          </div>
        </div>
      </div>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">_______________________________________________
Cbc mailing list
<a class="moz-txt-link-abbreviated" href="mailto:Cbc@list.coin-or.org">Cbc@list.coin-or.org</a>
<a class="moz-txt-link-freetext" href="https://urldefense.proofpoint.com/v2/url?u=https-3A__list.coin-2Dor.org_mailman_listinfo_cbc&d=DwICAg&c=Ngd-ta5yRYsqeUsEDgxhcqsYYY1Xs5ogLxWPA_2Wlc4&r=js2M0T-3OIMIVDvokcKjokJbk0F8QOCd0mT4FsVFE88&m=teKOXve84TjS7gbIwqEbWfnaIOzGDTDsf9SfQkpv4wY&s=PxWdI-q__Dwz_9r7AKzvZEenOwNHYtI4hfwaikE3vz8&e=">https://urldefense.proofpoint.com/v2/url?u=https-3A__list.coin-2Dor.org_mailman_listinfo_cbc&d=DwICAg&c=Ngd-ta5yRYsqeUsEDgxhcqsYYY1Xs5ogLxWPA_2Wlc4&r=js2M0T-3OIMIVDvokcKjokJbk0F8QOCd0mT4FsVFE88&m=teKOXve84TjS7gbIwqEbWfnaIOzGDTDsf9SfQkpv4wY&s=PxWdI-q__Dwz_9r7AKzvZEenOwNHYtI4hfwaikE3vz8&e=</a> 
</pre>
    </blockquote>
    <p><br>
    </p>
  </body>
</html>