.. _Semantic Checks:

Semantic Checks
===============


.. list-table::
   :header-rows: 1
   :widths: auto

   * - ID
     - Message
   * - **Packages & Types**
     -
   * - DUPLICATE_NAME
     - Name '#' in package '#' was previously defined at line # in #
   * - EXTEND_BEFORE_DEFINITION
     - Cannot extend type '#::#' before declaration at line # in #
   * - MULTIPLE_PACKAGES
     - Type name '#' exists in multiple packages ('#', '#', and possibly others)
   * - NOT_A_STRUCT
     - '#' is not a struct
   * - NOT_AN_ENUM_TYPE
     - '#' is not an enum type
   * - PREDEFINED_NAME
     - Type name '#' is a reserved type name. Use a different name
   * - REQUESTED_TYPE
     - '#::#' it is not a (struct/scalar/method) type
   * - TYPE_ACCESS
     - Cannot access type '#' of package '#'
   * - UNDEFINED_PACKAGE
     - No package called '#'
   * - UNDEFINED_TYPE
     - No type called '#'
   * - **Template Types**
     -
   * - MISSING_PARAMETER
     - Template '#::#' given # parameters instead of #
   * - UNDEFINED_TEMPLATE
     - No template called '#::#'
   * - **When Sub-Types Qualifiers**
     -
   * - AMBIGUOUS_QUALIFIER
     - '#' when qualifier for struct '#' is ambiguous, use full qualifier (e.g. '#' or '#')
   * - CONFLICTING_QUALIFIER
     - '#' and '#' when qualifiers for '#' are conflicting and may not be used together
   * - NOT_A_SUBTYPE
     - '#' is not a subtype of '#'
   * - REDUNDANT_QUALIFIER
     - '#' when qualifier for '#' is redundant
   * - RESERVED_NAME
     - '#' is a reserved name, cannot be used as a when qualifier name
   * - WRONG_FIELD_TYPE
     - Field '#' cannot be a when qualifier, it is neither an enum nor a boolean
   * - **When & Like Inheritance**
     -
   * - CIRCULAR_INHERITANCE
     - '#::#' extends itself
   * - LIKE_INHERITANCE
     - Cannot derive a like-subtype of '#' (it already has when-subtypes)
   * - WHEN_INHERITANCE
     - Cannot derive a when-subtype of '#' (it already has like-subtypes)
   * - **Fields & Variables**
     -
   * - DUPLICATE_NAME
     - Name '#' already used in the current scope at line # in #
   * - IS_INSTANCE
     - Cannot declare an instance of '#' in '#' which is not a unit
   * - REDEFINED_FIELD
     - Field '#.#' was previously defined at line # in #
   * - UNDEFINED_IDENTIFIER
     - Identifier '#' is not defined
   * - UNDEFINED_IDENTIFIER
     - Identifier '#' is not a member of '#'
   * - UNRESOLVED_IDENTIFIER
     - Cannot resolve identifier '#' (unresolved preceding expression)
   * - UNDEFINED_VARIABLE
     - No field or local variable called '#'
   * - **Events**
     -
   * - EVENT_ACCESS
     - Cannot access event '#.#' of package '#'
   * - REDEFINED_EVENT
     - Event '#.#' was previously defined (must use 'is only') at line # in #
   * - UNDEFINED_EVENT
     - Event '#.#' was not defined previously
   * - **Methods**
     -
   * - EXTEND_FINAL
     - Cannot extend '#.#()', it was previously defined final at line # in #
   * - METHOD_ACCESS
     - Cannot access method '#.#()' of package '#'
   * - METHOD_RETURN_TYPE
     - Cannot resolve '#' method return type (unresolved argument expression)
   * - REDEFINED_FINAL
     - Cannot declare '#.#()' as final, it was previously defined at line # in #
   * - REDEFINED_METHOD
     - Method '#.#()' was previously defined (must use 'is also', 'is first' or 'is only') at line # in #
   * - UNDEFINED_METHOD
     - Method '#.#()' was not defined previously (cannot use 'is also', 'is first' or 'is only')
   * - UNDEFINED_METHOD
     - CVL method '#.#()' was not defined previously
   * - UNDEFINED_METHOD
     - Method '#' is not defined
   * - UNDEFINED_METHOD
     - Method '#' is not a member of '#'
   * - UNIMPLEMENTED_METHOD
     - In method port '#.#()' is not implemented
   * - UNRESOLVED_METHOD
     - Cannot resolve method '#' (unresolved preceding expression)
   * - **Method Arguments**
     -
   * - ARGUMENT_DEFAULT
     - Arguments following an argument with default value must also have default values
   * - ARGUMENT_DEFAULT
     - Argument default value differs from previous declaration at line # in #
   * - ARGUMENT_COUNT
     - Argument number differs from previous declaration at line # in #
   * - METHOD_CALL_ARGUMENTS
     - Expecting '#' argument[s] when calling '#', found '#'
   * - METHOD_CALL_ARGUMENTS
     - Expecting minimum '#' argument[s] when calling '#', found '#'
   * - METHOD_CALL_ARGUMENTS
     - Expecting maximum '#' argument[s] when calling '#', found '#'
   * - **Atributes**
     -
   * - UNEXPECTED_ATTRIBUTE_NAME
     - Unexpected attribute name '#', must be one of 'deep_copy', 'deep_compare', 'deep_compare_physical' or 'deep_all'
   * - UNEXPECTED_ATTRIBUTE_VALUE
     - Unexpected attribute value '#', must be one of 'normal', 'reference' or 'ignore'
   * - **Cover**
     -
   * - UNDEFINED_COVER
     - Cover group '#.#' was not defined previously (cannot use 'is also')
   * - UNDEFINED_COVER_ITEM
     - Cover item # is not defined
   * - **Constraint**
     -
   * - REDEFINED_CONSTRAINT
     - Constraint '#.#' was previously defined (must use 'is only') at line # in #
   * - UNDEFINED_CONSTRAINT
     - Constraint '#.#' was not defined previously
   * - **Enum**
     -
   * - DUPLICATE_ENUM
     - Enum name '#' was previously defined at line # in #
   * - MISSING_ENUM_NAME
     - '#' is not a value of enum type '#'
   * - UNDEFINED_IDENTIFIER
     - Identifier '#' is not a value of enumerated type '#'
   * - **Expect**
     -
   * - REDEFINED_EXPECT
     - Expect '#.#' was previously defined at line # in #
   * - UNDEFINED_EXPECT
     - Expect '#.#' was not defined previously
   * - **Bind Arguments**
     -
   * - BIND_ARG_COUNT
     - Wrong number of arguments for 'bind()/do_bind()', must be exactly 2
   * - BIND_ARG_PORT_TYPE
     - Argument # of '#()' must be a port
   * - BIND_ARGS_PORT_KIND
     - Different kinds of ports cannot be bound to each other
   * - BIND_ARGS_PORT_ELEM
     - Ports with associated element types that do not agree cannot be bound
   * - UNRESOLVED_BIND_ARG
     - Argument # of '#()' cannot be resolved
   * - **Access**
     -
   * - ILLEGAL_ACCESS
     - Cannot access # # '#.#'
   * - **Select**
     -
   * - SELECT_IN_NON_LIST
     - Cannot use select, element '#' is not a list
   * - **Assignment & Math Operation**
     -
   * - UNEXPECTED_TYPE
     - '#' is of type '#', while expecting numeric type
   * - UNEXPECTED_TYPE
     - '#' is of type '#', while expecting type '#'
   * - UNEXPECTED_TYPE
     - '#' is of type '#', while expecting some type
   * - UNEXPECTED_TYPE
     - '#' is of type '#', while expecting type '#' or '#'
   * - **NON STANDARD**
     -
   * - NON_STANDARD_MACRO
     - '#'
   * - NON_STANDARD_METHOD
     - '#::#()'
   * - NON_STANDARD_TYPE
     - '#::#'


