Main Content

MISRA C++:2008 Rule 0-2-1

An object shall not be assigned to an overlapping object

Description

Rule Definition

An object shall not be assigned to an overlapping object.

Rationale

When you assign an object to another object with overlapping memory, the behavior is undefined.

The exceptions are:

  • You assign an object to another object with exactly overlapping memory and compatible type.

  • You copy one object to another with memmove.

Polyspace Implementation

As stated in the rule specification, the checker reports a violation when:

  • A member of an union is copied to another member of the union.

  • The source and destination arguments of memcpy point to the same array in a way that results in an overlapping copy.

Troubleshooting

If you expect a rule violation but Polyspace® does not report it, see Diagnose Why Coding Standard Violations Do Not Appear as Expected.

Examples

expand all

void func (void) {
    union {
        short i;
        int j;
    } a = {0}, b = {1};
    
    a.j = a.i;   //Noncompliant
    a = b;       //Compliant
}

In this example, the rule is violated when a.i is assigned to a.j because the two variables have overlapping regions of memory.

Check Information

Group: Language Independent Issues
Category: Required

Version History

Introduced in R2016b