<div dir="ltr"><div>First of all the code in question:</div><div><br></div><div>void MachineOperand::print(raw_ostream &OS, ModuleSlotTracker &MST,<br>                           const TargetRegisterInfo *TRI) const {</div><div><br></div><div>    ...</div><div><br></div><div>    case MachineOperand::MO_RegisterMask: {<br>        unsigned NumRegsInMask = 0;<br>        unsigned NumRegsEmitted = 0;<br>        OS << "<regmask";<br>        for (unsigned i = 0; i < TRI->getNumRegs(); ++i) {</div><div><br></div><div>    ...</div><div><br></div><div>}</div><div><br></div><div>This looks innocent enough, but this is in turn called by:</div><div><br></div><div>void MachineOperand::print(raw_ostream &OS,<br>                           const TargetRegisterInfo *TRI) const {</div><div>    ModuleSlotTracker DummyMST(nullptr);<br>    print(OS, DummyMST, TRI);<br>}</div><div><br></div><div>and:</div><div><br></div><div>inline raw_ostream &operator<<(raw_ostream &OS, const MachineOperand& MO) {<br>    MO.print(OS, nullptr);<br>    return OS;<br>}</div><div><br></div><div>Notice the nullptr as the const TargetRegisterInfo* argument.</div><div>As a result, when TRI->getNumRegs() gets called later on, we get a nullptr dereference.</div><div><br></div><div>There seems to be a couple of couple of possibilities here:</div><div>a) The wrong case in the switch has been selected due to a bug elsewhere</div><div>b) The case in question should be checking for a nullptr</div><div><br></div><div>I encountered this whilst iterating through instructions in a MachineBasicBlock.</div><div>Does anybody have any insight?<br clear="all"></div><div><div class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><p dir="ltr">--<br> Joshua Gerrard<br> JUCE Software Developer<br></p><p dir="ltr"><font size="2"><i>ROLI’s </i><a href="http://www.telegraph.co.uk/luxury/design/31520/the-seaboard-grand-piano-wins-designs-of-the-year-2014-award.html" target="_blank"><i><font color="#1155cc">award-winning</font></i></a><i> Seaboard GRAND, celebrated as the “</i><a href="http://edition.cnn.com/2013/09/27/tech/innovation/hans-zimmer-seaboard-future-piano/" target="_blank"><i><font color="#1155cc">piano of the future</font></i></a><i>”, is now joined by the </i><a href="https://www.youtube.com/watch?v=fGr7VbDiRNw" target="_blank"><i><font color="#1155cc">Seaboard RISE</font></i></a><i>, “</i><a href="http://www.soundonsound.com/news?NewsID=18726" target="_blank"><i><font color="#1155cc">every bit as slimline and attractive as its bigger brother</font></i></a><i>”. The press is hailing the Seaboard RISE as “</i><a href="http://www.wired.co.uk/news/archive/2015-09/10/seaboard-rise-digital-keyboard-launch-uk-price" target="_blank"><i><font color="#1155cc">innovative</font></i></a><i>”, “</i><a href="http://createdigitalmusic.com/2015/09/new-roli-instrument-wants-make-expressive-control-mainstream/" target="_blank"><i><font color="#1155cc">expressive</font></i></a><i>”, “</i><a href="http://createdigitalmusic.com/2015/09/new-roli-instrument-wants-make-expressive-control-mainstream/" target="_blank"><i><font color="#1155cc">accessible</font></i></a><i>”, and “</i><a href="http://www.slashgear.com/roli-seaboard-rise-is-like-3d-touch-for-musicians-11404216/" target="_blank"><i><font color="#1155cc">a keyboard controller that does to piano keys what 3D touch does to the iPhone</font></i></a><i>”. Now available for preorder at </i><a href="http://www.roli.com/" target="_blank"><i><font color="#1155cc">www.roli.com</font></i></a><i>.</i></font><br><br></p></div></div></div></div></div></div></div></div></div></div>
</div>