22-01-2018, 08:15 AM
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.
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>