Main Content

MISRA C++:2023 Rule 8.18.1

An object or subobject must not be copied to an overlapping object

Since R2024b

Description

Rule Definition

An object or subobject must not be copied 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: Expressions
Category: Mandatory

Version History

Introduced in R2024b