MISRA Discussion Forums
5-2-2: why only virtual base class??? - Printable Version

+- MISRA Discussion Forums (https://forum.misra.org.uk)
+-- Forum: MISRA C++ (https://forum.misra.org.uk/forumdisplay.php?fid=18)
+--- Forum: MISRA C++:2008 rules (https://forum.misra.org.uk/forumdisplay.php?fid=19)
+---- Forum: 6.5 Expressions (C++) (https://forum.misra.org.uk/forumdisplay.php?fid=134)
+---- Thread: 5-2-2: why only virtual base class??? (/showthread.php?tid=1395)



5-2-2: why only virtual base class??? - dg1980 - 22-01-2018

Hi,

the code below crashes as a result of the undefined behavior referenced in this rule.
Yet, no virtual base class is used as stated in the headline, the text and the example.
So, i think it could mislead any static analysis tool vendor when implementing this rule.

Code:
namespace nMISRA
{
  typedef signed int si32;

  class cBase
  {
  public:
    virtual void f1(void){}
  private:
  };

  class cDerived : public cBase// no virtual base
  {
  public:
    cDerived(void) : x(0){}
    void f2(void){++x;}
  private:
    si32 x;
  };

  void undefined_behaviour(cBase* arg_ptr)
  {
    cDerived* ptr = static_cast(arg_ptr);// undefined as per ISO/IEC 14882:2003 5.2.9 subsection 8
    ptr->f2();
  }
}

nMISRA::si32 main(void)
{
  nMISRA::cBase b;
  nMISRA::undefined_behaviour(&b);
  return 0;
}



Re: 5-2-2: why only virtual base class??? - misra cpp - 17-04-2018

Rule 5-2-2 is there specifically to catch undefined behaviour with virtual bases.

However, your example violates a different rule: 5-2-3

We are considering changes to 5-2-2 for the next version