<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>