<?xml version="1.0" encoding="utf-8"?>
<rules version="1.0">

<rule>
    <id>
        Added_Virtual_Method
    </id>
    <severity>
        High
    </severity>
    <kind>
        V-table
    </kind>
    <change>
        Virtual method @target has been added to this class.
    </change>
    <effect>
        The layout of v-table has been changed. Call of any virtual method at higher position in this class or its subclasses may result in crash or incorrect behavior of applications.
    </effect>
    <overcome>
        You should add several padding virtual methods at end of class declaration and use them one by one in the course of interface evolution.
    </overcome>
</rule>

<rule>
    <id>
        Added_Pure_Virtual_Method
    </id>
    <severity>
        High
    </severity>
    <kind>
        V-table
    </kind>
    <change>
        Pure virtual method @target has been added to this class.
    </change>
    <effect>
        1) Applications will not provide the implementation for this pure virtual method and therefore cause a crash in the library trying to call this method.
        2) The layout of v-table has been changed. Call of any virtual method at higher position in this class or its subclasses may result in crash or incorrect behavior of applications.
    </effect>
</rule>

<rule>
    <id>
        Added_Virtual_Method_At_End_Of_Leaf_Copying_Class
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        V-table
    </kind>
    <change>
        Virtual method @target has been added to this class.
    </change>
    <effect>
        The layout of v-table has been changed. This leaf class has no exported constructors and therefore applications will copy an old v-table of the class that will not contain a pointer to added virtual method. Call of any method in this class may result in crash or incorrect behavior of applications.
        NOTE: if new virtual method is called only from other new methods, then binary compatibility should not be affected.
    </effect>
</rule>

<rule>
    <id>
        Added_Virtual_Method_At_End_Of_Leaf_Allocable_Class
    </id>
    <severity>
        Safe
    </severity>
    <kind>
        V-table
    </kind>
    <change>
        Virtual method @target has been added to this class.
    </change>
    <effect>
        No effect. You can add virtual functions at end of leaf classes with exported constructors.
    </effect>
</rule>

<rule>
    <id>
        Added_First_Virtual_Method
    </id>
    <severity>
        High
    </severity>
    <kind>
        V-table
    </kind>
    <change>
        First virtual method @target has been added to this class.
    </change>
    <effect>
        1) The layout of type structure has been shifted by @word_size bytes by the added v-table pointer.
        2) Size of class has been increased by @word_size bytes.
    </effect>
</rule>

<rule>
    <id>
        Removed_Virtual_Method
    </id>
    <severity>
        High
    </severity>
    <kind>
        V-table
    </kind>
    <change>
        Virtual method @target has been removed from this class.
    </change>
    <effect>
        The layout of v-table has been changed. Call of this virtual method or any virtual method at higher position in this class or its subclasses may result in crash or incorrect behavior of applications.
    </effect>
</rule>

<rule>
    <id>
        Removed_Pure_Virtual_Method
    </id>
    <severity>
        High
    </severity>
    <kind>
        V-table
    </kind>
    <change>
        Pure virtual method @target has been removed from this class.
    </change>
    <effect>
        The layout of v-table has been changed. Call of this virtual method or any virtual method at higher position in this class or its subclasses may result in crash or incorrect behavior of applications.
    </effect>
</rule>

<rule>
    <id>
        Removed_Last_Virtual_Method
    </id>
    <severity>
        High
    </severity>
    <kind>
        V-table
    </kind>
    <change>
        Last virtual method @target has been removed from this class.
    </change>
    <effect>
        1) The layout of type structure has been shifted by @word_size bytes by the removed v-table pointer.
        2) Size of class has been decreased by @word_size bytes.
    </effect>
</rule>

<rule>
    <id>
        Virtual_Replacement
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        V-table
    </kind>
    <change>
        Virtual method @target has been added to this class instead of @old_value.
    </change>
    <effect>
        Applications will pass parameters of older replaced method to newly added virtual method. This may result in crash or incorrect behavior of applications.
    </effect>
</rule>

<rule>
    <id>
        Pure_Virtual_Replacement
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        V-table
    </kind>
    <change>
        Pure virtual method @target has been added to this class instead of @old_value.
    </change>
    <effect>
        Applications will provide an older method to the library instead of expected newely added virtual method. This may result in crash or incorrect behavior of applications.
    </effect>
</rule>

<rule>
    <id>
        Virtual_Table_Changed_Unknown
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        V-table
    </kind>
    <change>
        The layout of v-table has been changed for **unknown** reason.
    </change>
    <effect>
        Call of any method in this class may result in crash or incorrect behavior of applications.
    </effect>
</rule>

<rule>
    <id>
        Virtual_Method_Position
    </id>
    <severity>
        High
    </severity>
    <kind>
        V-table
    </kind>
    <change>
        The relative position of virtual method @target has been changed from @old_value to @new_value.
    </change>
    <effect>
        The layout of v-table has been changed. Call of this virtual method may result in crash or incorrect behavior of applications.
    </effect>
</rule>

<rule>
    <id>
        Pure_Virtual_Method_Position
    </id>
    <severity>
        High
    </severity>
    <kind>
        V-table
    </kind>
    <change>
        The relative position of pure virtual method @target has been changed from @old_value to @new_value.
    </change>
    <effect>
        The layout of v-table has been changed. Call of this pure virtual method implementation may result in crash or incorrect behavior of applications.
    </effect>
</rule>

<rule>
    <id>
        Overridden_Virtual_Method
    </id>
    <severity>
        Low
    </severity>
    <kind>
        V-table
    </kind>
    <change>
        Virtual method @old_value has been overridden by @new_value.
    </change>
    <effect>
        Method @new_value will be called instead of @old_value by old applications.
    </effect>
</rule>

<rule>
    <id>
        Overridden_Virtual_Method_B
    </id>
    <severity>
        Low
    </severity>
    <kind>
        V-table
    </kind>
    <change>
        Virtual method @old_value has been overridden by @new_value.
    </change>
    <effect>
        Method @new_value will be called instead of @old_value by old applications.
    </effect>
</rule>

<rule>
    <id>
        Size_Of_Allocable_Class_Increased
    </id>
    <severity>
        High
    </severity>
    <kind>
        Classes
    </kind>
    <change>
        Size of this class has been increased from @old_size to @new_size.
    </change>
    <effect>
        1) An object of this class can be allocated by the applications and old size will be hardcoded at the compile time. Call of any exported constructor will break the memory of neighboring objects on the stack or heap.
        2) The memory layout and size of subclasses will be changed.
    </effect>
</rule>

<rule>
    <id>
        Size_Of_Allocable_Class_Decreased
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        Classes
    </kind>
    <change>
        Size of this class has been decreased from @old_size to @new_size.
    </change>
    <effect>
        Previous accesses of applications to public fields of this class or its subclasses may be incorrect.
    </effect>
</rule>

<rule>
    <id>
        Size_Of_Copying_Class
    </id>
    <severity>
        High
    </severity>
    <kind>
        Classes
    </kind>
    <change>
        Size of this class has been changed from @old_size to @new_size.
    </change>
    <effect>
        1) The class has only inline or auto-generated constructors which will be copied to applications at compile time and will allocate an older memory layout. Call of any exported method of this class may access a memory outside the allocated objects or inside the older memory structure and result in crash or incorrect behavior of applications.
        2) The memory layout and size of subclasses will be changed.
    </effect>
</rule>

<rule>
    <id>
        Base_Class_Position
    </id>
    <severity>
        Low
    </severity>
    <kind>
        Classes
    </kind>
    <change>
        The relative position of class @target has been changed from @old_value to @new_value in the list of base classes.
    </change>
    <effect>
        Possible incorrect access of applications to the memory occupied by the base classes.
    </effect>
</rule>

<rule>
    <id>
        Base_Class_Became_Virtually_Inherited
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        Classes
    </kind>
    <change>
        Base class @target became **virtually** inherited.
    </change>
    <effect>
        Size, memory layout and v-table layout of this class and subclasses may change.
    </effect>
</rule>

<rule>
    <id>
        Base_Class_Became_Non_Virtually_Inherited
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        Classes
    </kind>
    <change>
        Base class @target became **non-virtually** inherited.
    </change>
    <effect>
        Size, memory layout and v-table layout of this class and subclasses may change.
    </effect>
</rule>

<rule>
    <id>
        Added_Base_Class_And_Shift
    </id>
    <severity>
        High
    </severity>
    <kind>
        Classes
    </kind>
    <change>
        Base class @target has been added.
    </change>
    <effect>
        The memory layout in this class has been shifted by @shift bytes.
    </effect>
</rule>

<rule>
    <id>
        Added_Base_Class_And_Size
    </id>
    <severity>
        High
    </severity>
    <kind>
        Classes
    </kind>
    <change>
        Base class @target has been added.
    </change>
    <effect>
        1) Size of the class has been changed from @old_size to @new_size.
        2) The memory layout in this class has been shifted by @shift bytes.
    </effect>
</rule>

<rule>
    <id>
        Added_Base_Class_And_Shift_And_VTable
    </id>
    <severity>
        High
    </severity>
    <kind>
        Classes
    </kind>
    <change>
        Base class @target has been added.
    </change>
    <effect>
        1) The layout of v-table in this class has been changed.
        2) The memory layout in this class has been shifted by @shift bytes.
    </effect>
</rule>

<rule>
    <id>
        Added_Base_Class_And_Size_And_VTable
    </id>
    <severity>
        High
    </severity>
    <kind>
        Classes
    </kind>
    <change>
        Base class @target has been added.
    </change>
    <effect>
        1) The layout of v-table in this class has been changed.
        2) Size of the class has been changed from @old_size to @new_size.
        3) The memory layout in this class has been shifted by @shift bytes.
    </effect>
</rule>

<rule>
    <id>
        Added_Base_Class_And_VTable
    </id>
    <severity>
        High
    </severity>
    <kind>
        Classes
    </kind>
    <change>
        Base class @target has been added.
    </change>
    <effect>
        The layout of v-table in this class has been changed.
    </effect>
</rule>

<rule>
    <id>
        Added_Base_Class
    </id>
    <severity>
        Low
    </severity>
    <kind>
        Classes
    </kind>
    <change>
        Base class @target has been added.
    </change>
    <effect>
        Possible incorrect access of applications to the memory occupied by the base classes.
    </effect>
</rule>

<rule>
    <id>
        Removed_Base_Class_And_Size
    </id>
    <severity>
        High
    </severity>
    <kind>
        Classes
    </kind>
    <change>
        Base class @target has been removed.
    </change>
    <effect>
        1) Size of the class has been changed from @old_size to @new_size.
        2) The memory layout in this class has been shifted by @shift bytes.
    </effect>
</rule>

<rule>
    <id>
        Removed_Base_Class_And_Shift
    </id>
    <severity>
        High
    </severity>
    <kind>
        Classes
    </kind>
    <change>
        Base class @target has been removed.
    </change>
    <effect>
        The memory layout in this class has been shifted by @shift bytes.
    </effect>
</rule>

<rule>
    <id>
        Removed_Base_Class_And_Shift_And_VTable
    </id>
    <severity>
        High
    </severity>
    <kind>
        Classes
    </kind>
    <change>
        Base class @target has been removed.
    </change>
    <effect>
        1) The layout of v-table in this class has been changed.
        2) The memory layout in this class has been shifted by @shift bytes.
    </effect>
</rule>

<rule>
    <id>
        Removed_Base_Class_And_Size_And_VTable
    </id>
    <severity>
        High
    </severity>
    <kind>
        Classes
    </kind>
    <change>
        Base class @target has been removed.
    </change>
    <effect>
        1) The layout of v-table in this class has been changed.
        2) Size of the class has been changed from @old_size to @new_size.
        3) The memory layout in this class has been shifted by @shift bytes.
    </effect>
</rule>

<rule>
    <id>
        Removed_Base_Class_And_VTable
    </id>
    <severity>
        High
    </severity>
    <kind>
        Classes
    </kind>
    <change>
        Base class @target has been removed.
    </change>
    <effect>
        The layout of v-table in this class has been changed.
    </effect>
</rule>

<rule>
    <id>
        Removed_Base_Class
    </id>
    <severity>
        Low
    </severity>
    <kind>
        Classes
    </kind>
    <change>
        Base class @target has been removed.
    </change>
    <effect>
        Possible incorrect access of applications to the memory occupied by the base classes.
    </effect>
</rule>

<rule>
    <id>
        DataType_Size
    </id>
    <severity>
        Low
    </severity>
    <kind>
        Types
    </kind>
    <change>
        Size of this type has been changed from @old_size to @new_size.
    </change>
    <effect>
        The fields or parameters of such data type may be incorrectly initialized or accessed by old client applications.
    </effect>
</rule>

<rule>
    <id>
        DataType_Type
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        Types
    </kind>
    <change>
        Type of this type has been changed from @old_value to @new_value.
    </change>
    <effect>
        The fields or parameters of such data type may be incorrectly initialized or accessed by old client applications.
    </effect>
</rule>

<rule>
    <id>
        DataType_Size_And_Stack
    </id>
    <severity>
        High
    </severity>
    <kind>
        Types
    </kind>
    <change>
        Size of this type has been changed from @old_size to @new_size.
    </change>
    <effect>
        Layout of parameter's stack of several functions has been changed and therefore parameters at higher positions in the stack may be incorrectly initialized by applications.
    </effect>
</rule>

<rule>
    <id>
        Moved_Field
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        Fields
    </kind>
    <change>
        The relative position of field @target has been changed from @old_value to @new_value.
    </change>
    <effect>
        Applications will access incorrect memory when attempting to access this field.
    </effect>
</rule>

<rule>
    <id>
        Moved_Field_And_Size
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        Fields
    </kind>
    <change>
        The relative position of field @target has been changed from @old_value to @new_value.
    </change>
    <effect>
        1) Applications will access incorrect memory when attempting to access this field.
        2) Size of the inclusive type has been changed.
    </effect>
</rule>

<rule>
    <id>
        Moved_Private_Field_And_Size
    </id>
    <severity>
        Low
    </severity>
    <kind>
        Fields
    </kind>
    <change>
        The relative position of private field @target has been changed from @old_value to @new_value.
    </change>
    <effect>
        Size of the inclusive type has been changed.
    </effect>
</rule>

<rule>
    <id>
        Added_Field
    </id>
    <severity>
        Low
    </severity>
    <kind>
        Fields
    </kind>
    <change>
        Field @target has been added to this type.
    </change>
    <effect>
        This field will not be initialized by old clients.
        NOTE: this field should be accessed only from the new library functions, otherwise it may result in crash or incorrect behavior of applications.
    </effect>
</rule>

<rule>
    <id>
        Added_Field_And_Size
    </id>
    <severity>
        Low
    </severity>
    <kind>
        Fields
    </kind>
    <change>
        Field @target has been added to this type.
    </change>
    <effect>
        1) This field will not be initialized by old clients.
        2) Size of the inclusive type has been changed.
        NOTE: this field should be accessed only from the new library functions, otherwise it may result in crash or incorrect behavior of applications.
    </effect>
</rule>

<rule>
    <id>
        Added_Field_And_Layout
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        Fields
    </kind>
    <change>
        Field @target has been added at the middle position of this structural type.
    </change>
    <effect>
        Layout of structure fields has been changed and therefore fields at higher positions of the structure definition may be incorrectly accessed by applications.
    </effect>
</rule>

<rule>
    <id>
        Added_Field_And_Layout_And_Size
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        Fields
    </kind>
    <change>
        Field @target has been added at the middle position of this structural type.
    </change>
    <effect>
        1) Size of the inclusive type has been changed.
        2) Layout of structure fields has been changed and therefore fields at higher positions of the structure definition may be incorrectly accessed by applications.
    </effect>
</rule>

<rule>
    <id>
        Added_Private_Field_And_Size
    </id>
    <severity>
        Low
    </severity>
    <kind>
        Fields
    </kind>
    <change>
        Field @target has been added to this type.
    </change>
    <effect>
        Size of the inclusive type has been changed.
        NOTE: this field should be accessed only from the new library functions, otherwise it may result in crash or incorrect behavior of applications.
    </effect>
</rule>

<rule>
    <id>
        Added_Private_Field_And_Layout
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        Fields
    </kind>
    <change>
        Field @target has been added at the middle position of this structural type.
    </change>
    <effect>
        Layout of structure fields has been changed and therefore fields at higher positions of the structure definition may be incorrectly accessed by applications.
    </effect>
</rule>

<rule>
    <id>
        Added_Private_Field_And_Layout_And_Size
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        Fields
    </kind>
    <change>
        Field @target has been added at the middle position of this structural type.
    </change>
    <effect>
        1) Size of the inclusive type has been changed.
        2) Layout of structure fields has been changed and therefore fields at higher positions of the structure definition may be incorrectly accessed by applications.
    </effect>
</rule>

<rule>
    <id>
        Added_Union_Field_And_Size
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        Fields
    </kind>
    <change>
        Field @target has been added to this type.
    </change>
    <effect>
        Size of the union has been changed.
        NOTE: this field should be accessed only from the new library functions, otherwise it may result in crash or incorrect behavior of applications.
    </effect>
</rule>

<rule>
    <id>
        Added_Union_Field
    </id>
    <severity>
        Low
    </severity>
    <kind>
        Fields
    </kind>
    <change>
        Field @target has been added to this type.
    </change>
    <effect>
        NOTE: this field should be accessed only from the new library functions, otherwise it may result in crash or incorrect behavior of applications.
    </effect>
</rule>

<rule>
    <id>
        Removed_Field
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        Fields
    </kind>
    <change>
        Field @target has been removed from this type.
    </change>
    <effect>
        Applications will access incorrect memory when attempting to access this field.
    </effect>
</rule>

<rule>
    <id>
        Removed_Field_And_Layout
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        Fields
    </kind>
    <change>
        Field @target has been removed from the middle position of this structural type.
    </change>
    <effect>
        1) Applications will access incorrect memory when attempting to access this field.
        2) Layout of structure fields has been changed and therefore fields at higher positions of the structure definition may be incorrectly accessed by applications.
    </effect>
</rule>

<rule>
    <id>
        Removed_Field_And_Size
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        Fields
    </kind>
    <change>
        Field @target has been removed from this type.
    </change>
    <effect>
        1) Applications will access incorrect memory when attempting to access this field.
        2) Size of the inclusive type has been changed.
    </effect>
</rule>

<rule>
    <id>
        Removed_Field_And_Layout_And_Size
    </id>
    <severity>
        High
    </severity>
    <kind>
        Fields
    </kind>
    <change>
        Field @target has been removed from the middle position of this structural type.
    </change>
    <effect>
        1) Previous accesses of applications to the removed field will be incorrect.
        2) Layout of structure fields has been changed and therefore fields at higher positions of the structure definition may be incorrectly accessed by applications.
    </effect>
</rule>

<rule>
    <id>
        Removed_Private_Field_And_Size
    </id>
    <severity>
        Low
    </severity>
    <kind>
        Fields
    </kind>
    <change>
        Field @target has been removed from this type.
    </change>
    <effect>
        Size of the inclusive type has been changed.
    </effect>
</rule>

<rule>
    <id>
        Removed_Private_Field_And_Layout
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        Fields
    </kind>
    <change>
        Field @target has been removed from the middle position of this structural type.
    </change>
    <effect>
        Layout of structure fields has been changed and therefore fields at higher positions of the structure definition may be incorrectly accessed by applications.
    </effect>
</rule>

<rule>
    <id>
        Removed_Private_Field_And_Layout_And_Size
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        Fields
    </kind>
    <change>
        Field @target has been removed from the middle position of this structural type.
    </change>
    <effect>
        1) Layout of structure fields has been changed and therefore fields at higher positions of the structure definition may be incorrectly accessed by applications.
        2) Size of the inclusive type has been changed.
    </effect>
</rule>

<rule>
    <id>
        Removed_Union_Field_And_Size
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        Fields
    </kind>
    <change>
        Field @target has been removed from this union.
    </change>
    <effect>
        1) Applications may access incorrect memory when attempting to access this field.
        2) Size of the union has been changed.
    </effect>
</rule>

<rule>
    <id>
        Removed_Union_Field
    </id>
    <severity>
        Low
    </severity>
    <kind>
        Fields
    </kind>
    <change>
        Field @target has been removed from this union.
    </change>
    <effect>
        Applications may access incorrect memory when attempting to access this field.
    </effect>
</rule>

<rule>
    <id>
        Renamed_Field
    </id>
    <severity>
        Low
    </severity>
    <kind>
        Fields
    </kind>
    <change>
        Field @target has been renamed to @new_value.
    </change>
    <effect>
        Renaming of a field in data type may indicate a change in the semantic meaning of the field.
    </effect>
</rule>

<rule>
    <id>
        Used_Reserved_Field
    </id>
    <severity>
        Low
    </severity>
    <kind>
        Fields
    </kind>
    <change>
        Reserved field @target has been replaced by @new_value.
    </change>
    <effect>
        This field will not be initialized by old clients.
    </effect>
</rule>

<rule>
    <id>
        Enum_Member_Value
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        Constants
    </kind>
    <change>
        Value of member @target has been changed from @old_value to @new_value.
    </change>
    <effect>
        Applications may execute a wrong branch of code in the library and therefore change the behavior.
    </effect>
</rule>

<rule>
    <id>
        Enum_Member_Removed
    </id>
    <severity>
        Low
    </severity>
    <kind>
        Constants
    </kind>
    <change>
        The member @target has been removed.
    </change>
    <effect>
        This may result in crash or incorrect behavior of applications because the library may not handle removed member anymore.
    </effect>
</rule>

<rule>
    <id>
        Enum_Last_Member_Value
    </id>
    <severity>
        Low
    </severity>
    <kind>
        Constants
    </kind>
    <change>
        Value of member @target has been changed from @old_value to @new_value.
    </change>
    <effect>
        Applications may execute a wrong branch of code in the library and therefore change the behavior.
    </effect>
</rule>

<rule>
    <id>
        Enum_Private_Member_Value
    </id>
    <severity>
        Safe
    </severity>
    <kind>
        Constants
    </kind>
    <change>
        Value of private member @target has been changed from @old_value to @new_value.
    </change>
    <effect>
        No effect.
    </effect>
</rule>

<rule>
    <id>
        Enum_Member_Name
    </id>
    <severity>
        Low
    </severity>
    <kind>
        Constants
    </kind>
    <change>
        Name of member with value @target has been changed from @old_value to @new_value.
    </change>
    <effect>
        Applications may execute a wrong branch of code in the library and therefore change the behavior.
    </effect>
</rule>

<rule>
    <id>
        Field_Type
    </id>
    <severity>
        Low
    </severity>
    <kind>
        Fields
    </kind>
    <change>
        Type of field @target has been changed from @old_value to @new_value.
    </change>
    <effect>
        Replacement of the field data type may indicate a change in the semantic meaning of the field.
    </effect>
</rule>

<rule>
    <id>
        Field_Type_And_Size
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        Fields
    </kind>
    <change>
        Type of field @target has been changed from @old_value (@old_size) to @new_value (@new_size).
    </change>
    <effect>
        This field may be incorrectly initialized or accessed by applications.
    </effect>
</rule>

<rule>
    <id>
        Field_Type_And_Size_And_Layout
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        Fields
    </kind>
    <change>
        Type of field @target has been changed from @old_value (@old_size) to @new_value (@new_size).
    </change>
    <effect>
        Previous accesses of applications and library functions to this field and fields at higher positions of the structure definition may be broken.
    </effect>
</rule>

<rule>
    <id>
        Field_Type_And_Size_And_Type_Size
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        Fields
    </kind>
    <change>
        Type of field @target has been changed from @old_value (@old_size) to @new_value (@new_size).
    </change>
    <effect>
        1) This field may be incorrectly initialized or accessed by applications.
        2) Size of the inclusive type has been changed.
    </effect>
</rule>

<rule>
    <id>
        Field_Type_And_Size_And_Layout_And_Type_Size
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        Fields
    </kind>
    <change>
        Type of field @target has been changed from @old_value (@old_size) to @new_value (@new_size).
    </change>
    <effect>
        1) Size of the inclusive type has been changed.
        2) Previous accesses of applications and library functions to this field and fields at higher positions of the structure definition may be broken.
    </effect>
</rule>

<rule>
    <id>
        Private_Field_Type_And_Size_And_Layout
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        Fields
    </kind>
    <change>
        Type of field @target has been changed from @old_value (@old_size) to @new_value (@new_size).
    </change>
    <effect>
        Previous accesses of applications and library functions to the fields at higher positions of the structure definition may be broken.
    </effect>
</rule>

<rule>
    <id>
        Private_Field_Type_And_Size
    </id>
    <severity>
        Safe
    </severity>
    <kind>
        Fields
    </kind>
    <change>
        Type of field @target has been changed from @old_value (@old_size) to @new_value (@new_size).
    </change>
    <effect>
        No effect.
    </effect>
</rule>

<rule>
    <id>
        Private_Field_Type_And_Size_And_Type_Size
    </id>
    <severity>
        Low
    </severity>
    <kind>
        Fields
    </kind>
    <change>
        Type of field @target has been changed from @old_value (@old_size) to @new_value (@new_size).
    </change>
    <effect>
        Size of the inclusive type has been changed.
    </effect>
</rule>

<rule>
    <id>
        Private_Field_Type_And_Size_And_Layout_And_Type_Size
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        Fields
    </kind>
    <change>
        Type of field @target has been changed from @old_value (@old_size) to @new_value (@new_size).
    </change>
    <effect>
        1) Size of the inclusive type has been changed.
        2) Previous accesses of applications and library functions to the fields at higher positions of the structure definition may be broken.
    </effect>
</rule>

<rule>
    <id>
        Field_BaseType_And_Size
    </id>
    <severity>
        Low
    </severity>
    <kind>
        Fields
    </kind>
    <change>
        Base type of field @target has been changed from @old_value (@old_size) to @new_value (@new_size).
    </change>
    <effect>
        Possible access of applications to incorrect memory through the pointer.
    </effect>
</rule>

<rule>
    <id>
        Field_BaseType
    </id>
    <severity>
        Low
    </severity>
    <kind>
        Fields
    </kind>
    <change>
        Base type of field @target has been changed from @old_value to @new_value.
    </change>
    <effect>
        Replacement of field base type may indicate a change in the semantic meaning of the field.
    </effect>
</rule>

<rule>
    <id>
        Field_PointerLevel_Increased
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        Fields
    </kind>
    <change>
        The pointer level of field @target has been increased from @old_value to @new_value.
    </change>
    <effect>
        The library functions may try to access unallocated memory by the dereferencing of old field value and therefore cause a crash of applications.
    </effect>
</rule>

<rule>
    <id>
        Field_PointerLevel_Decreased
    </id>
    <severity>
        Low
    </severity>
    <kind>
        Fields
    </kind>
    <change>
        The pointer level of field @target has been decreased from @old_value to @new_value.
    </change>
    <effect>
        The library functions will treat the value of this field as the lower-dimension array and will not read all elements. This may change the behavior of applications.
    </effect>
</rule>

<rule>
    <id>
        Field_Size
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        Fields
    </kind>
    <change>
        Size of field @target has been changed from @old_size to @new_size.
    </change>
    <effect>
        Previous accesses of applications and library functions to this field may be broken.
    </effect>
</rule>

<rule>
    <id>
        Struct_Field_Size_Increased
    </id>
    <severity>
        Low
    </severity>
    <kind>
        Fields
    </kind>
    <change>
        Size of field @target has been changed from @old_size to @new_size.
    </change>
    <effect>
        Previous accesses of applications and library functions to this field may be broken.
    </effect>
</rule>

<rule>
    <id>
        Field_Size_And_Layout
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        Fields
    </kind>
    <change>
        Size of field @target has been changed from @old_size to @new_size.
    </change>
    <effect>
        Previous accesses of applications and library functions to this field and fields at higher positions of the structure definition may be broken.
    </effect>
</rule>

<rule>
    <id>
        Field_Size_And_Type_Size
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        Fields
    </kind>
    <change>
        Size of field @target has been changed from @old_size to @new_size.
    </change>
    <effect>
        1) Size of the inclusive type has been changed.
        2) Previous accesses of applications and library functions to this field may be broken.
    </effect>
</rule>

<rule>
    <id>
        Field_Size_And_Layout_And_Type_Size
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        Fields
    </kind>
    <change>
        Size of field @target has been changed from @old_size to @new_size.
    </change>
    <effect>
        1) Size of the inclusive type has been changed.
        2) Previous accesses of applications and library functions to this field and fields at higher positions of the structure definition may be broken.
    </effect>
</rule>

<rule>
    <id>
        Private_Field_Size_And_Layout
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        Fields
    </kind>
    <change>
        Size of field @target has been changed from @old_size to @new_size.
    </change>
    <effect>
        Previous accesses of applications and library functions to the fields at higher positions of the structure definition may be broken.
    </effect>
</rule>

<rule>
    <id>
        Private_Field_Size
    </id>
    <severity>
        Safe
    </severity>
    <kind>
        Fields
    </kind>
    <change>
        Size of field @target has been changed from @old_size to @new_size.
    </change>
    <effect>
        No effect.
    </effect>
</rule>

<rule>
    <id>
        Private_Field_Size_And_Type_Size
    </id>
    <severity>
        Low
    </severity>
    <kind>
        Fields
    </kind>
    <change>
        Size of field @target has been changed from @old_size to @new_size.
    </change>
    <effect>
        Size of the inclusive type has been changed.
    </effect>
</rule>

<rule>
    <id>
        Private_Field_Size_And_Layout_And_Type_Size
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        Fields
    </kind>
    <change>
        Size of field @target has been changed from @old_size to @new_size.
    </change>
    <effect>
        1) Size of the inclusive type has been changed.
        2) Previous accesses of applications and library functions to the fields at higher positions of the structure definition may be broken.
    </effect>
</rule>

<rule>
    <id>
        Typedef_BaseType
    </id>
    <severity>
        Low
    </severity>
    <kind>
        Types
    </kind>
    <change>
        Base type has been changed from @old_value to @new_value.
    </change>
    <effect>
        Replacement of the base data type may indicate a change in its semantic meaning.
    </effect>
</rule>

<rule>
    <id>
        Typedef_BaseType_Format
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        Types
    </kind>
    <change>
        Base type has been changed from @old_value to @new_value of different format.
    </change>
    <effect>
        The fields or parameters of such data type may be incorrectly initialized or accessed by old client applications.
    </effect>
</rule>

<rule>
    <id>
        Added_Symbol
    </id>
    <severity>
        Safe
    </severity>
    <kind>
        Symbols
    </kind>
</rule>

<rule>
    <id>
        Removed_Symbol
    </id>
    <severity>
        High
    </severity>
    <kind>
        Symbols
    </kind>
</rule>

<rule>
    <id>
        Method_Became_Static
    </id>
    <severity>
        High
    </severity>
    <kind>
        Symbols
    </kind>
    <change>
        Method became static.
    </change>
    <effect>
        Layout of parameter's stack has been changed and therefore parameters at higher positions in the stack may be incorrectly initialized by applications.
    </effect>
</rule>

<rule>
    <id>
        Method_Became_Non_Static
    </id>
    <severity>
        High
    </severity>
    <kind>
        Symbols
    </kind>
    <change>
        Method became non-static.
    </change>
    <effect>
        Layout of parameter's stack has been changed and therefore parameters at higher positions in the stack may be incorrectly initialized by applications.
    </effect>
</rule>

<rule>
    <id>
        Parameter_Default_Value_Changed
    </id>
    <severity>
        Low
    </severity>
    <kind>
        Parameters
    </kind>
    <change>
        The default argument of @param_pos parameter @target has been changed from @old_value to @new_value.
    </change>
    <effect>
        Applications will pass an old default (compile-time) argument that may not be properly handled anymore. This may result in crash or incorrect behavior of applications.
    </effect>
</rule>

<rule>
    <id>
        Parameter_Default_Value_Removed
    </id>
    <severity>
        Low
    </severity>
    <kind>
        Parameters
    </kind>
    <change>
        The default argument @old_value of @param_pos parameter @target has been removed.
    </change>
    <effect>
        Applications will pass an old default argument (that is not default any more) that may not be properly handled anymore. This may result in crash or incorrect behavior of applications.
    </effect>
</rule>

<rule>
    <id>
        Parameter_Default_Value_Added
    </id>
    <severity>
        Safe
    </severity>
    <kind>
        Parameters
    </kind>
    <change>
        The default argument @new_value of @param_pos parameter @target has been added.
    </change>
    <effect>
        No effect.
    </effect>
</rule>

<rule>
    <id>
        Parameter_Type_And_Register
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        Symbols
    </kind>
    <change>
        Type of @param_pos parameter @target has been changed from @old_value (@old_size) to @new_value (@new_size).
    </change>
    <effect>
        The parameter became passed in different register. Applications will read the wrong memory block instead of the parameter value. Also, distribution of other parameters on the available registers and stack may be changed.
    </effect>
</rule>

<rule>
    <id>
        Parameter_Type_And_Stack
    </id>
    <severity>
        High
    </severity>
    <kind>
        Parameters
    </kind>
    <change>
        Type of @param_pos parameter @target has been changed from @old_value (@old_size) to @new_value (@new_size).
    </change>
    <effect>
        Layout of parameter's stack has been changed and therefore parameters at higher positions in the stack may be incorrectly initialized by applications.
    </effect>
</rule>

<rule>
    <id>
        Parameter_Type_And_Size
    </id>
    <severity>
        High
    </severity>
    <kind>
        Parameters
    </kind>
    <change>
        Type of @param_pos parameter @target has been changed from @old_value (@old_size) to @new_value (@new_size).
    </change>
    <effect>
        Layout of parameter's stack has been changed and therefore parameters at higher positions in the stack may be incorrectly initialized by applications.
    </effect>
</rule>

<rule>
    <id>
        Parameter_Type_From_Stack_To_Register
    </id>
    <severity>
        High
    </severity>
    <kind>
        Parameters
    </kind>
    <change>
        Type of @param_pos parameter @target has been changed from @old_value (@old_size) to @new_value (@new_size).
    </change>
    <effect>
        The parameter became passed in the register instead of the stack. This may result in crash or incorrect behavior of applications.
    </effect>
</rule>

<rule>
    <id>
        Parameter_Type_From_Register_To_Stack
    </id>
    <severity>
        High
    </severity>
    <kind>
        Parameters
    </kind>
    <change>
        Type of @param_pos parameter @target has been changed from @old_value (@old_size) to @new_value (@new_size).
    </change>
    <effect>
        The parameter became passed through the stack instead of the register. This may result in crash or incorrect behavior of applications.
    </effect>
</rule>

<rule>
    <id>
        Parameter_Type
    </id>
    <severity>
        Low
    </severity>
    <kind>
        Parameters
    </kind>
    <change>
        Type of @param_pos parameter @target has been changed from @old_value to @new_value.
    </change>
    <effect>
        Replacement of parameter data type may indicate a change in its semantic meaning.
    </effect>
</rule>

<rule>
    <id>
        Parameter_Became_Non_Const
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        Parameters
    </kind>
    <change>
        Type of @param_pos parameter @target has been changed from @old_value to @new_value (became non-const).
    </change>
    <effect>
        This function may change parameter @target, but it will be treated as const by old client applications. This may result in crash or incorrect behavior of applications.
    </effect>
</rule>

<rule>
    <id>
        Parameter_Removed_Const
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        Parameters
    </kind>
    <change>
        Type of @param_pos parameter @target has been changed from @old_value to @new_value (removed const qualifier).
    </change>
    <effect>
        This function may change parameter @target, but it will be treated as const by old client applications. This may result in crash or incorrect behavior of applications.
    </effect>
</rule>

<rule>
    <id>
        Parameter_Became_Restrict
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        Parameters
    </kind>
    <change>
        Parameter @target became restrict.
    </change>
    <effect>
        Added a new restriction on the parameter: if the memory addressed by the restrict-qualified pointer is modified, no other pointer will access that same memory. The compiler may choose to optimize new library code involving restrict-qualified pointers in a way that might result in incorrect behavior of old applications, that don't meet this restriction.
    </effect>
</rule>

<rule>
    <id>
        Parameter_Became_Non_Restrict
    </id>
    <severity>
        Safe
    </severity>
    <kind>
        Parameters
    </kind>
    <change>
        Parameter @target became non-restrict.
    </change>
    <effect>
        No effect.
    </effect>
</rule>

<rule>
    <id>
        Parameter_Became_Register
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        Parameters
    </kind>
    <change>
        Added register modifier to the parameter @target.
    </change>
    <effect>
        The parameter may be passed in a register instead of the calling stack.
    </effect>
</rule>

<rule>
    <id>
        Parameter_Became_Non_Register
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        Parameters
    </kind>
    <change>
        Removed register modifier from the parameter @target.
    </change>
    <effect>
        The parameter will be passed on the calling stack instead of a register.
    </effect>
</rule>

<rule>
    <id>
        Parameter_To_Register
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        Parameters
    </kind>
    <change>
        The parameter @target became passed in @new_value register instead of stack.
    </change>
    <effect>
        Violation of the calling convention. This may result in crash or incorrect behavior of applications.
    </effect>
</rule>

<rule>
    <id>
        Parameter_From_Register
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        Parameters
    </kind>
    <change>
        The parameter @target became passed on stack instead of @old_value register.
    </change>
    <effect>
        Violation of the calling convention. This may result in crash or incorrect behavior of applications.
    </effect>
</rule>

<rule>
    <id>
        Parameter_Changed_Register
    </id>
    <severity>
        High
    </severity>
    <kind>
        Symbols
    </kind>
    <change>
        The parameter @target became passed in @new_value register instead of @old_value.
    </change>
    <effect>
         Applications will read the wrong memory block instead of the parameter value.
    </effect>
</rule>

<rule>
    <id>
        Parameter_Changed_Offset
    </id>
    <severity>
        High
    </severity>
    <kind>
        Symbols
    </kind>
    <change>
        The parameter @target became passed at the different offset on the stack (@new_value instead of @old_value).
    </change>
    <effect>
         Violation of the calling convention. This may result in crash or incorrect behavior of applications.
    </effect>
</rule>

<rule>
    <id>
        Return_Type_Became_Const
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        Symbols
    </kind>
    <change>
        Type of return value became const (has been changed from @old_value to @new_value).
    </change>
    <effect>
        The return value will be treated as non-const by old client applications. This may result in crash or incorrect behavior of applications.
    </effect>
</rule>

<rule>
    <id>
        Return_Type_Added_Const
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        Symbols
    </kind>
    <change>
        Added **const** qualifier to return value (has been changed from @old_value to @new_value).
    </change>
    <effect>
        The return value will be treated as non-const by old client applications. This may result in crash or incorrect behavior of applications.
    </effect>
</rule>

<rule>
    <id>
        Parameter_BaseType_And_Size
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        Parameters
    </kind>
    <change>
        Base type of @param_pos parameter @target has been changed from @old_value (@old_size) to @new_value (@new_size).
    </change>
    <effect>
        This parameter may be incorrectly initialized by applications.
    </effect>
</rule>

<rule>
    <id>
        Parameter_BaseType
    </id>
    <severity>
        Low
    </severity>
    <kind>
        Parameters
    </kind>
    <change>
        Base type of @param_pos parameter @target has been changed from @old_value to @new_value.
    </change>
    <effect>
        Replacement of parameter base type may indicate a change in its semantic meaning.
    </effect>
</rule>

<rule>
    <id>
        Parameter_PointerLevel_Increased
    </id>
    <severity>
        High
    </severity>
    <kind>
        Parameters
    </kind>
    <change>
        The pointer level of @param_pos parameter @target has been increased from @old_value to @new_value.
    </change>
    <effect>
        The library function may try to access unallocated memory by the dereferencing of old parameter value and therefore cause a crash of applications.
    </effect>
</rule>

<rule>
    <id>
        Parameter_PointerLevel_Decreased
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        Parameters
    </kind>
    <change>
        The pointer level of @param_pos parameter @target has been decreased from @old_value to @new_value.
    </change>
    <effect>
        The library function will treat the parameter as the lower-dimension array and will not read all elements. This may change the behavior of applications.
        NOTE: if this is out-parameter then this change may cause a crash of applications.
    </effect>
</rule>

<rule>
    <id>
        Return_Type_And_Size
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        Symbols
    </kind>
    <change>
        Type of return value has been changed from @old_value (@old_size) to @new_value (@new_size).
    </change>
    <effect>
        Applications will obtain a different return value and execution may change.
    </effect>
</rule>

<rule>
    <id>
        Global_Data_Type_And_Size
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        Symbols
    </kind>
    <change>
        Type of this global data has been changed from @old_value (@old_size) to @new_value (@new_size).
    </change>
    <effect>
        Applications will obtain a different value and execution may change.
    </effect>
</rule>

<rule>
    <id>
        Return_Type
    </id>
    <severity>
        Low
    </severity>
    <kind>
        Symbols
    </kind>
    <change>
        Type of return value has been changed from @old_value to @new_value.
    </change>
    <effect>
        Replacement of return type may indicate a change in its semantic meaning.
    </effect>
</rule>

<rule>
    <id>
        Global_Data_Type
    </id>
    <severity>
        Low
    </severity>
    <kind>
        Symbols
    </kind>
    <change>
        Type of this global data has been changed from @old_value to @new_value.
    </change>
    <effect>
        Replacement of data type may indicate a change in semantic meaning.
    </effect>
</rule>

<rule>
    <id>
        Global_Data_Type_Format
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        Symbols
    </kind>
    <change>
        Type of this global data has been changed from @old_value to @new_value of different format.
    </change>
    <effect>
        This global data may be incorrectly accessed by applications.
    </effect>
</rule>

<rule>
    <id>
        Global_Data_Size
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        Symbols
    </kind>
    <change>
        Size of this global data has been changed from @old_size to @new_size.
    </change>
    <effect>
        Applications will obtain a different value and execution may change.
    </effect>
</rule>

<rule>
    <id>
        Return_Type_Became_Void
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        Symbols
    </kind>
    <change>
        Type of return value has been changed from @old_value (@old_size) to void.
    </change>
    <effect>
        Applications will not obtain a return value and execution may change.
    </effect>
</rule>

<rule>
    <id>
        Return_Type_Became_Void_And_Stack_Layout
    </id>
    <severity>
        High
    </severity>
    <kind>
        Symbols
    </kind>
    <change>
        Type of return value has been changed from @old_value (@old_size) to void.
    </change>
    <effect>
        1) Applications will read the wrong memory block instead of the return value.
        2) Layout of parameter's stack has been shifted by @word_size bytes because the hidden first argument, that is used to pass the return value, has been removed. All the parameters will be incorrectly initialized by applications.
    </effect>
</rule>

<rule>
    <id>
        Return_Type_Became_Void_And_Register
    </id>
    <severity>
        High
    </severity>
    <kind>
        Symbols
    </kind>
    <change>
        Type of return value has been changed from @old_value (@old_size) to void.
    </change>
    <effect>
        1) Applications will read the wrong memory block instead of the return value.
        2) Distribution of parameters on the available registers and stack has been changed because the hidden first argument, that is used to pass the return value, has been removed. All the parameters will be incorrectly initialized by applications.
    </effect>
</rule>

<rule>
    <id>
        Return_Type_From_Void_And_Stack_Layout
    </id>
    <severity>
        High
    </severity>
    <kind>
        Symbols
    </kind>
    <change>
        Type of return value has been changed from void to @new_value (@new_size).
    </change>
    <effect>
        Layout of parameter's stack has been shifted by @word_size bytes because the return value became passed in memory as the hidden first argument, that was used to pass the return value. All the parameters will be incorrectly initialized by applications.
    </effect>
</rule>

<rule>
    <id>
        Return_Type_From_Void_And_Register
    </id>
    <severity>
        High
    </severity>
    <kind>
        Symbols
    </kind>
    <change>
        Type of return value has been changed from void to @new_value (@new_size).
    </change>
    <effect>
        Distribution of parameters on the available registers and stack has been changed because the return value became passed in memory as the hidden first argument, that is used to pass the return value. All the parameters will be incorrectly initialized by applications.
    </effect>
</rule>

<rule>
    <id>
        Return_Type_From_Void
    </id>
    <severity>
        Low
    </severity>
    <kind>
        Symbols
    </kind>
    <change>
        Type of return value has been changed from void to @new_value (@new_size).
    </change>
    <effect>
        Replacement of return type may indicate a change in its semantic meaning.
    </effect>
</rule>

<rule>
    <id>
        Return_Type_From_Register_To_Stack
    </id>
    <severity>
        High
    </severity>
    <kind>
        Symbols
    </kind>
    <change>
        Type of return value has been changed from @old_value (@old_size) to @new_value (@new_size).
    </change>
    <effect>
        1) The return value became passed in memory as the hidden first argument (address of the space on the stack provided by the caller) instead of the register and therefore the layout of parameter's stack has been shifted by @word_size bytes. All the parameters will be incorrectly initialized by applications.
        2) Applications will read the wrong memory block instead of the return value.
    </effect>
</rule>

<rule>
    <id>
        Return_Type_And_Register_Became_Hidden_Parameter
    </id>
    <severity>
        High
    </severity>
    <kind>
        Symbols
    </kind>
    <change>
        Type of return value has been changed from @old_value (@old_size) to @new_value (@new_size).
    </change>
    <effect>
        1) The return value became passed in different register as the hidden first argument (address of the space on the stack provided by the caller) and therefore distribution of parameters on the available registers and stack will be changed. All the parameters will be incorrectly initialized by applications.
        2) Applications will read the wrong memory block instead of the return value.
    </effect>
</rule>

<rule>
    <id>
        Return_Type_From_Stack_To_Register
    </id>
    <severity>
        High
    </severity>
    <kind>
        Symbols
    </kind>
    <change>
        Type of return value has been changed from @old_value (@old_size) to @new_value (@new_size).
    </change>
    <effect>
        1) The return value became passed in register instead of the hidden first argument (address of the space on the stack provided by the caller) and therefore the layout of parameter's stack has been shifted by @word_size bytes. All the parameters will be incorrectly initialized by applications.
        2) Applications will read the wrong memory block instead of the return value.
    </effect>
</rule>

<rule>
    <id>
        Return_Type_And_Register_Was_Hidden_Parameter
    </id>
    <severity>
        High
    </severity>
    <kind>
        Symbols
    </kind>
    <change>
        Type of return value has been changed from @old_value (@old_size) to @new_value (@new_size).
    </change>
    <effect>
        1) The return value became passed in register instead of the hidden first argument, that is passed in different register, and therefore distribution of parameters on the available registers and stack will be changed. All the parameters will be incorrectly initialized by applications.
        2) Applications will read the wrong memory block instead of the return value.
    </effect>
</rule>

<rule>
    <id>
        Global_Data_Became_Non_Const
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        Symbols
    </kind>
    <change>
        This global data became non-const.
    </change>
    <effect>
        This data will be copied to applications at compile time. Any attempts to change this global data by library functions may result in crash of applications.
    </effect>
</rule>

<rule>
    <id>
        Global_Data_Removed_Const
    </id>
    <severity>
        Low
    </severity>
    <kind>
        Symbols
    </kind>
    <change>
        Removed **const** qualifier from the type of this global data.
    </change>
    <effect>
        This data will be treated as const by old client applications. Any attempts to change this global data by library functions may result in undefined behavior.
    </effect>
</rule>

<rule>
    <id>
        Global_Data_Became_Const
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        Symbols
    </kind>
    <change>
        This global data became const.
    </change>
    <effect>
        Any attempts of old applications to change this global data may result in crash.
    </effect>
</rule>

<rule>
    <id>
        Global_Data_Added_Const
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        Symbols
    </kind>
    <change>
        Added **const** qualifier to the type of this global data.
    </change>
    <effect>
        Any attempts of old applications to change this global data may result in crash.
    </effect>
</rule>

<rule>
    <id>
        Return_BaseType_And_Size
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        Symbols
    </kind>
    <change>
        Base type of return value has been changed from @old_value (@old_size) to @new_value (@new_size).
    </change>
    <effect>
        Applications will obtain a different return value and execution may change.
    </effect>
</rule>

<rule>
    <id>
        Return_BaseType
    </id>
    <severity>
        Low
    </severity>
    <kind>
        Symbols
    </kind>
    <change>
        Base type of return value has been changed from @old_value to @new_value.
    </change>
    <effect>
        Replacement of return base type may indicate a change in its semantic meaning.
    </effect>
</rule>

<rule>
    <id>
        Return_PointerLevel_Increased
    </id>
    <severity>
        Low
    </severity>
    <kind>
        Symbols
    </kind>
    <change>
        The pointer level of return value has been increased from @old_value to @new_value.
    </change>
    <effect>
        Applications will treat the return value as the lower-dimension array and will not read all elements. This may change the behavior of applications.
    </effect>
</rule>

<rule>
    <id>
        Return_PointerLevel_Decreased
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        Symbols
    </kind>
    <change>
        The pointer level of return value has been decreased from @old_value to @new_value.
    </change>
    <effect>
        Applications may try to access unallocated memory by the dereferencing of new return value and therefore cause a crash.
    </effect>
</rule>

<rule>
    <id>
        Removed_Parameter
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        Parameters
    </kind>
    <change>
        @param_pos parameter @target has been removed from the calling stack.
    </change>
    <effect>
        This parameter will be ignored by the function.
    </effect>
</rule>

<rule>
    <id>
        Removed_Unnamed_Parameter
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        Parameters
    </kind>
    <change>
        Parameter @target of type @param_type has been removed from the calling stack.
    </change>
    <effect>
        This parameter will be ignored by the function.
    </effect>
</rule>

<rule>
    <id>
        Added_Parameter
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        Parameters
    </kind>
    <change>
        Parameter @target of type @param_type has been added to the calling stack.
    </change>
    <effect>
        This parameter will not be initialized by old clients.
    </effect>
</rule>

<rule>
    <id>
        Added_Unnamed_Parameter
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        Parameters
    </kind>
    <change>
        @param_pos parameter @target has been added to the calling stack.
    </change>
    <effect>
        This parameter will not be initialized by old clients.
    </effect>
</rule>

<rule>
    <id>
        Removed_Middle_Parameter
    </id>
    <severity>
        High
    </severity>
    <kind>
        Parameters
    </kind>
    <change>
        @param_pos middle parameter @target has been removed from the calling stack.
    </change>
    <effect>
        Layout of parameter's stack has been changed and therefore parameters at higher positions in the stack may be incorrectly initialized by applications.
    </effect>
</rule>

<rule>
    <id>
        Removed_Middle_Unnamed_Parameter
    </id>
    <severity>
        High
    </severity>
    <kind>
        Parameters
    </kind>
    <change>
        Middle parameter @target of type @param_type has been removed from the calling stack.
    </change>
    <effect>
        Layout of parameter's stack has been changed and therefore parameters at higher positions in the stack may be incorrectly initialized by applications.
    </effect>
</rule>

<rule>
    <id>
        Added_Middle_Parameter
    </id>
    <severity>
        High
    </severity>
    <kind>
        Parameters
    </kind>
    <change>
        Parameter @target of type @param_type has been added to the calling stack at the middle position.
    </change>
    <effect>
        Layout of parameter's stack has been changed and therefore parameters at higher positions in the stack may be incorrectly initialized by applications.
    </effect>
</rule>

<rule>
    <id>
        Added_Middle_Unnamed_Parameter
    </id>
    <severity>
        High
    </severity>
    <kind>
        Parameters
    </kind>
    <change>
        @param_pos parameter @target has been added to the calling stack at the middle position.
    </change>
    <effect>
        Layout of parameter's stack has been changed and therefore parameters at higher positions in the stack may be incorrectly initialized by applications.
    </effect>
</rule>

<rule>
    <id>
        Renamed_Parameter
    </id>
    <severity>
        Low
    </severity>
    <kind>
        Parameters
    </kind>
    <change>
        @param_pos parameter @target has been renamed to @new_value.
    </change>
    <effect>
        Renaming of a parameter may indicate a change in its semantic meaning.
    </effect>
</rule>

<rule>
    <id>
        Symbol_Became_Static
    </id>
    <severity>
        High
    </severity>
    <kind>
        Symbols
    </kind>
    <change>
        Method became static.
    </change>
    <effect>
        The name of the appropriate symbol for this function on binary level has been changed from @old_value to @new_value. This may cause undefined reference linker error in old client applications.
    </effect>
</rule>

<rule>
    <id>
        Symbol_Became_Non_Static
    </id>
    <severity>
        High
    </severity>
    <kind>
        Symbols
    </kind>
    <change>
        Method became non-static.
    </change>
    <effect>
        The name of the appropriate symbol for this function on binary level has been changed from @old_value to @new_value. This may cause undefined reference linker error in old client applications.
    </effect>
</rule>

<rule>
    <id>
        Symbol_Became_Virtual
    </id>
    <severity>
        High
    </severity>
    <kind>
        Symbols
    </kind>
    <change>
        Method became virtual.
    </change>
    <effect>
        The name of the appropriate symbol for this function on binary level has been changed from @old_value to @new_value. This may cause undefined reference linker error in old client applications.
    </effect>
</rule>

<rule>
    <id>
        Symbol_Became_Non_Virtual
    </id>
    <severity>
        High
    </severity>
    <kind>
        Symbols
    </kind>
    <change>
        Method became non-virtual.
    </change>
    <effect>
        The name of the appropriate symbol for this function on binary level has been changed from @old_value to @new_value. This may cause undefined reference linker error in old client applications.
    </effect>
</rule>

<rule>
    <id>
        Symbol_Changed_Return
    </id>
    <severity>
        High
    </severity>
    <kind>
        Symbols
    </kind>
    <change>
        Type of return value has been changed from @old_type to @new_type.
    </change>
    <effect>
        The name of the appropriate symbol for this function on binary level has been changed from @old_value to @new_value. This may cause undefined reference linker error in old client applications.
    </effect>
</rule>

<rule>
    <id>
        Global_Data_Symbol_Changed_Type
    </id>
    <severity>
        High
    </severity>
    <kind>
        Symbols
    </kind>
    <change>
        Type of this global data has been changed from @old_type to @new_type.
    </change>
    <effect>
        The name of the appropriate symbol for this data on binary level has been changed from @old_value to @new_value. This may cause undefined reference linker error in old client applications.
    </effect>
</rule>

<rule>
    <id>
        Symbol_Changed_Parameters
    </id>
    <severity>
        High
    </severity>
    <kind>
        Symbols
    </kind>
    <change>
        Parameters list has been changed.
    </change>
    <effect>
        The name of the appropriate symbol for this function on binary level has been changed from @old_value to @new_value. This may cause undefined reference linker error in old client applications.
    </effect>
</rule>

<rule>
    <id>
        Method_Became_Non_Const
    </id>
    <severity>
        High
    </severity>
    <kind>
        Symbols
    </kind>
    <change>
        Method became non-const.
    </change>
    <effect>
        The name of the appropriate symbol for this function on binary level has been changed from @old_value to @new_value. This may cause undefined reference linker error in old client applications.
    </effect>
</rule>

<rule>
    <id>
        Method_Became_Const
    </id>
    <severity>
        High
    </severity>
    <kind>
        Symbols
    </kind>
    <change>
        Method became const.
    </change>
    <effect>
        The name of the appropriate symbol for this function on binary level has been changed from @old_value to @new_value. This may cause undefined reference linker error in old client applications.
    </effect>
</rule>

<rule>
    <id>
        Method_Became_Volatile
    </id>
    <severity>
        High
    </severity>
    <kind>
        Symbols
    </kind>
    <change>
        Method became volatile.
    </change>
    <effect>
        The name of the appropriate symbol for this function on binary level has been changed from @old_value to @new_value. This may cause undefined reference linker error in old client applications.
    </effect>
</rule>

<rule>
    <id>
        Method_Became_Non_Volatile
    </id>
    <severity>
        High
    </severity>
    <kind>
        Symbols
    </kind>
    <change>
        Method became non-volatile.
    </change>
    <effect>
        The name of the appropriate symbol for this function on binary level has been changed from @old_value to @new_value. This may cause undefined reference linker error in old client applications.
    </effect>
</rule>

<rule>
    <id>
        Changed_Constant
    </id>
    <severity>
        Low
    </severity>
    <kind>
        Constants
    </kind>
    <change>
        The value of constant @target has been changed from @old_value to @new_value.
    </change>
    <effect>
        Applications will pass an old value of this constant as the parameter to the new-version library functions, that expect a new one. This may result in crash of incorrect behavior of applications.
    </effect>
</rule>

<rule>
    <id>
        Added_Constant
    </id>
    <severity>
        Safe
    </severity>
    <kind>
        Constants
    </kind>
    <change>
        The constant @target with value @new_value has been added.
    </change>
    <effect>
        No effect.
    </effect>
</rule>

<rule>
    <id>
        Removed_Constant
    </id>
    <severity>
        Low
    </severity>
    <kind>
        Constants
    </kind>
    <change>
        The constant @target with value @old_value has been removed.
    </change>
    <effect>
        The value of this constant may no longer be properly handled by new-version library functions.
    </effect>
</rule>

<rule>
    <id>
        Field_Became_Volatile
    </id>
    <severity>
        Low
    </severity>
    <kind>
        Fields
    </kind>
    <change>
        Field @target became volatile.
    </change>
    <effect>
        The value of this field can begin to change in ways outside the control of old client applications.
    </effect>
</rule>

<rule>
    <id>
        Field_Became_Non_Volatile
    </id>
    <severity>
        Safe
    </severity>
    <kind>
        Fields
    </kind>
    <change>
        Field @target became non-volatile.
    </change>
    <effect>
        No effect.
    </effect>
</rule>

<rule>
    <id>
        Return_Value_Became_Volatile
    </id>
    <severity>
        Low
    </severity>
    <kind>
        Symbols
    </kind>
    <change>
        Return value became volatile.
    </change>
    <effect>
        Old client applications will get volatile object instead of non-volatile, but may be optimized by the compiler and cannot handle volatile objects.
    </effect>
</rule>

<rule>
    <id>
        Parameter_Became_Non_Volatile
    </id>
    <severity>
        Low
    </severity>
    <kind>
        Symbols
    </kind>
    <change>
        Parameter @target became non-volatile.
    </change>
    <effect>
        Old client applications will pass volatile object to the function that may be optimized by the compiler and cannot handle volatile objects.
    </effect>
</rule>

<rule>
    <id>
        Field_Type_Format
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        Fields
    </kind>
    <change>
        Type of field @target has been changed from @old_value to @new_value of different format.
    </change>
    <effect>
        This field may be incorrectly initialized or accessed by applications.
    </effect>
</rule>

<rule>
    <id>
        Field_BaseType_Format
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        Fields
    </kind>
    <change>
        Base type of field @target has been changed from @old_value to @new_value of different format.
    </change>
    <effect>
        This field may be incorrectly initialized or accessed by applications.
    </effect>
</rule>

<rule>
    <id>
        Parameter_Type_Format
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        Parameters
    </kind>
    <change>
        Type of parameter @target has been changed from @old_value to @new_value of different format.
    </change>
    <effect>
        This parameter may be incorrectly initialized by applications.
    </effect>
</rule>

<rule>
    <id>
        Parameter_BaseType_Format
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        Parameters
    </kind>
    <change>
        Base type of parameter @target has been changed from @old_value to @new_value of different format.
    </change>
    <effect>
        This parameter may be incorrectly initialized by applications.
    </effect>
</rule>

<rule>
    <id>
        Return_Type_Format
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        Symbols
    </kind>
    <change>
        Type of return value has been changed from @old_value to @new_value of different format.
    </change>
    <effect>
        Applications will obtain a different return value and execution may change.
    </effect>
</rule>

<rule>
    <id>
        Return_Type_And_Register
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        Symbols
    </kind>
    <change>
        Type of return value has been changed from @old_value to @new_value.
    </change>
    <effect>
        The return value became passed in different register. Applications will read the wrong memory block instead of the return value. Also, distribution of parameters on the available registers and stack may be changed.
    </effect>
</rule>

<rule>
    <id>
        Return_BaseType_Format
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        Symbols
    </kind>
    <change>
        Base type of return value has been changed from @old_value to @new_value of different format.
    </change>
    <effect>
        This parameter may be incorrectly initialized by applications.
    </effect>
</rule>

<rule>
    <id>
        Parameter_Became_Non_VaList
    </id>
    <severity>
        Low
    </severity>
    <kind>
        Parameters
    </kind>
    <change>
        Type of @param_pos parameter has been changed from ... (va_list) to @new_value.
    </change>
    <effect>
        This parameter may not be initialized by old clients.
    </effect>
</rule>

<rule>
    <id>
        Parameter_Became_VaList
    </id>
    <severity>
        Low
    </severity>
    <kind>
        Parameters
    </kind>
    <change>
        Type of @param_pos parameter @target has been changed from @old_value to ... (va_list).
    </change>
    <effect>
        The semantic meaning of the parameter may change.
    </effect>
</rule>

<rule>
    <id>
        Added_Enum_Member
    </id>
    <severity>
        Safe
    </severity>
    <kind>
        Constants
    </kind>
    <change>
        The member @target with value @new_value has been added.
    </change>
    <effect>
        No effect.
    </effect>
</rule>

<rule>
    <id>
        Global_Data_Value_Changed
    </id>
    <severity>
        Low
    </severity>
    <kind>
        Symbols
    </kind>
    <change>
        The initial value of this global data has been changed from @old_value to @new_value.
    </change>
    <effect>
        Applications will use an old value of this data instead of the new one. This may cause incorrect behavior of applications.
    </effect>
</rule>

<rule>
    <id>
        Field_Became_Mutable
    </id>
    <severity>
        Low
    </severity>
    <kind>
        Fields
    </kind>
    <change>
        Field @target became **mutable**.
    </change>
    <effect>
        The value of this field can begin to change in ways outside the control of old client applications.
    </effect>
</rule>

<rule>
    <id>
        Field_Became_Non_Mutable
    </id>
    <severity>
        Low
    </severity>
    <kind>
        Fields
    </kind>
    <change>
        Field @target became **non-mutable**.
    </change>
    <effect>
        The value of this field can still be changed by const methods of old client applications, but it's not expected by new-version library.
    </effect>
</rule>

<rule>
    <id>
        Method_Became_Private
    </id>
    <severity>
        Low
    </severity>
    <kind>
        Symbols
    </kind>
    <change>
        This method became **private**.
    </change>
    <effect>
        Old applications will continue using this method, but it may require a different initialization of the environment and parameters.
    </effect>
</rule>

<rule>
    <id>
        Method_Became_Protected
    </id>
    <severity>
        Low
    </severity>
    <kind>
        Symbols
    </kind>
    <change>
        This method became **protected**.
    </change>
    <effect>
        Old applications will continue using this method, but it may require a different initialization of the environment and parameters.
    </effect>
</rule>

<rule>
    <id>
        Method_Became_Public
    </id>
    <severity>
        Safe
    </severity>
    <kind>
        Symbols
    </kind>
    <change>
        This method became **public**.
    </change>
    <effect>
        No effect. 
    </effect>
</rule>

<rule>
    <id>
        Global_Data_Became_Private
    </id>
    <severity>
        Low
    </severity>
    <kind>
        Symbols
    </kind>
    <change>
        This global data became **private**.
    </change>
    <effect>
        Old applications will continue using this global data, but it may require a different initialization of the environment. 
    </effect>
</rule>

<rule>
    <id>
        Global_Data_Became_Protected
    </id>
    <severity>
        Low
    </severity>
    <kind>
        Symbols
    </kind>
    <change>
        This global data became **protected**.
    </change>
    <effect>
        Old applications will continue using this global data, but it may require a different initialization of the environment. 
    </effect>
</rule>

<rule>
    <id>
        Global_Data_Became_Public
    </id>
    <severity>
        Safe
    </severity>
    <kind>
        Symbols
    </kind>
    <change>
        This global data became **public**.
    </change>
    <effect>
        No effect. 
    </effect>
</rule>

<rule>
    <id>
        Field_Became_Const
    </id>
    <severity>
        Low
    </severity>
    <kind>
        Types
    </kind>
    <change>
        Field @target became **const**.
    </change>
    <effect>
        The value of this field is expected to be **const** in new library version, but can be modified by old applications.
    </effect>
</rule>

<rule>
    <id>
        Field_Became_Non_Const
    </id>
    <severity>
        Safe
    </severity>
    <kind>
        Types
    </kind>
    <change>
        Field @target became **non-const**.
    </change>
    <effect>
        No effect.
    </effect>
</rule>

<rule>
    <id>
        Field_Added_Const
    </id>
    <severity>
        Low
    </severity>
    <kind>
        Types
    </kind>
    <change>
        Added **const** qualifier to field @target.
    </change>
    <effect>
        The value of this field is expected to be **const** in new library version, but can be modified by old applications.
    </effect>
</rule>

<rule>
    <id>
        Field_Removed_Const
    </id>
    <severity>
        Safe
    </severity>
    <kind>
        Types
    </kind>
    <change>
        Removed **const** qualifier from field @target.
    </change>
    <effect>
        No effect.
    </effect>
</rule>

<rule>
    <id>
        Field_Became_Private
    </id>
    <severity>
        Low
    </severity>
    <kind>
        Types
    </kind>
    <change>
        Field @target became **private**.
    </change>
    <effect>
        Old applications will continue using this field, but it may require a different initialization of class object.
    </effect>
</rule>

<rule>
    <id>
        Field_Became_Protected
    </id>
    <severity>
        Low
    </severity>
    <kind>
        Types
    </kind>
    <change>
        Field @target became **protected**.
    </change>
    <effect>
        Old applications will continue using this field, but it may require a different initialization of class object.
    </effect>
</rule>

<rule>
    <id>
        Virtual_Method_Became_Pure
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        Types
    </kind>
    <change>
        Virtual method @target became **pure**.
    </change>
    <effect>
        Old applications will not provide implementation for this pure virtual method. This may result in crash or incorrect behavior of applications.
    </effect>
</rule>

<rule>
    <id>
        Virtual_Method_Became_Non_Pure
    </id>
    <severity>
        Safe
    </severity>
    <kind>
        Types
    </kind>
    <change>
        Virtual method @target became **non-pure**.
    </change>
    <effect>
        No effect.
    </effect>
</rule>

<rule>
    <id>
        Type_Became_Opaque
    </id>
    <severity>
        Medium
    </severity>
    <kind>
        Types
    </kind>
    <change>
        This type became **opaque**.
    </change>
    <effect>
        The internal structure of this type is hidden in the new library version and may be different. This may result in crash or incorrect behavior of applications.
    </effect>
</rule>

</rules>
