主要内容

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. 1

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 a 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

expand all


1 All MISRA coding rules and directives are © Copyright The MISRA Consortium Limited 2021.

The MISRA coding standards referenced in the Polyspace Bug Finder™ documentation are from the following MISRA standards:

  • MISRA C:2004

  • MISRA C:2012

  • MISRA C:2023

  • MISRA C++:2008

  • MISRA C++:2023

MISRA and MISRA C are registered trademarks of The MISRA Consortium Limited 2021.