Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
5-2-2: why only virtual base class???
#1
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;
}
<t></t>
Reply
#2
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
Posted by and on behalf of
the MISRA C++ Working Group
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)