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